Release v0.3.2 #12
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release Pyraview | |
| on: | |
| release: | |
| types: [published] | |
| push: | |
| tags: [ 'v*' ] | |
| workflow_dispatch: | |
| inputs: | |
| tag: | |
| description: 'Tag to release' | |
| required: true | |
| jobs: | |
| build_and_test: | |
| name: Build & Package (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v4 | |
| - name: Setup CMake | |
| uses: lukka/get-cmake@latest | |
| - name: Configure CMake | |
| shell: bash | |
| run: | | |
| mkdir build | |
| if [ "${{ runner.os }}" == "Windows" ]; then | |
| cmake -S . -B build -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release | |
| else | |
| cmake -S . -B build -DCMAKE_BUILD_TYPE=Release | |
| fi | |
| - name: Build All | |
| run: cmake --build build --parallel | |
| # Zip binaries for release (naming by OS/Architecture) | |
| - name: Package Binaries | |
| shell: bash | |
| run: | | |
| mkdir -p dist | |
| if [ "${{ runner.os }}" == "Windows" ]; then | |
| # Use 7-Zip (pre-installed on Windows runners) | |
| # 'a' is add, '-j' junk paths (like zip -j) | |
| 7z a -tzip dist/pyraview-win-x64.zip ./build/bin/*.dll ./build/bin/*.exe | |
| else | |
| zip -j dist/pyraview-${{ runner.os }}-${{ runner.arch }}.zip build/bin/* | |
| fi | |
| - name: Upload Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: binaries-${{ matrix.os }} | |
| path: dist/* | |
| build-matlab: | |
| name: Build Matlab MEX (${{ matrix.os }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| # Matlab actions support limited OS versions, check availability | |
| os: [ubuntu-latest, windows-latest, macos-latest] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: matlab-actions/setup-matlab@v2 | |
| with: | |
| release: 'R2024b' | |
| - name: Compile MEX | |
| uses: matlab-actions/run-command@v2 | |
| with: | |
| # Run the updated build script which handles paths correctly | |
| command: cd('src/matlab'); build_pyraview; | |
| - name: Upload MEX Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: mex-${{ matrix.os }} | |
| path: src/matlab/+pyraview/*.mex* # Capture all MEX files in the package | |
| if-no-files-found: error | |
| package-matlab: | |
| name: Package Matlab Toolbox | |
| needs: build-matlab | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: matlab-actions/setup-matlab@v2 | |
| with: | |
| release: 'R2024b' | |
| # Download all platform-specific MEX files we just built | |
| - name: Download all MEX artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: src/matlab/+pyraview | |
| pattern: mex-* | |
| merge-multiple: true | |
| # Run the packaging command | |
| - name: Package Toolbox | |
| uses: matlab-actions/run-command@v2 | |
| env: | |
| GITHUB_REF_NAME: ${{ inputs.tag || github.ref_name }} | |
| with: | |
| command: | | |
| % 1. Define metadata | |
| toolboxName = 'Pyraview'; | |
| % Use the fixed GUID we agreed upon | |
| guid = '6e14a2b9-7f3c-4d8e-9a1b-3c5d7e9f2a4b'; | |
| % 2. Get Version from Environment | |
| version = getenv('GITHUB_REF_NAME'); | |
| if isempty(version) || ~startsWith(version, 'v') | |
| version = '0.1.6'; % Fallback | |
| else | |
| version = erase(version, 'v'); | |
| end | |
| % 3. Initialize Options from the MATLAB source folder | |
| % This creates the object without needing a .prj file on disk yet | |
| opts = matlab.addons.toolbox.ToolboxOptions(fullfile(pwd, 'src', 'matlab'), guid, ... | |
| 'ToolboxName', toolboxName, ... | |
| 'ToolboxVersion', version, ... | |
| 'AuthorName', 'Van Hooser lab', ... | |
| 'AuthorEmail', 'vanhoosr@brandeis.edu', ... | |
| 'Description', 'High-performance multi-resolution decimation engine.', ... | |
| 'OutputFile', fullfile(pwd, 'Pyraview.mltbx'), ... | |
| 'ToolboxFiles', {fullfile(pwd, 'src', 'matlab')}); | |
| % 6. Package it | |
| fprintf('Packaging %s v%s [%s]...\n', toolboxName, version, guid); | |
| matlab.addons.toolbox.packageToolbox(opts); | |
| # Upload the .mltbx as an artifact so the release job can pick it up | |
| - name: Upload Toolbox Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: matlab-toolbox | |
| path: Pyraview.mltbx | |
| release: | |
| name: Create GitHub Release | |
| needs: [build_and_test, package-matlab] | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write # Required to create releases | |
| steps: | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: release-assets | |
| merge-multiple: true | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| files: release-assets/* | |
| name: Release ${{ inputs.tag || github.ref_name }} | |
| tag_name: ${{ inputs.tag || github.ref_name }} | |
| draft: false | |
| prerelease: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |