on: create: ref_type: tag ref: 'v*' workflow_dispatch: name: Create release jobs: build-release-artifacts: name: Build artifact runs-on: ${{ matrix.os }} strategy: matrix: include: - artifact: windows-x86_64 os: windows-2022 lib_file_name: helgobox.dll extension_file_name: reaper_helgobox.dll target: x86_64-pc-windows-msvc profile: release features: "playtime,egui,licensing" macosx_deployment_target: "" lib_file_name_dst: helgobox-windows-x86_64.dll extension_file_name_dst: reaper_helgobox-windows-x86_64.dll - artifact: windows-i686 os: windows-2022 lib_file_name: helgobox.dll extension_file_name: reaper_helgobox.dll target: i686-pc-windows-msvc profile: release-llvm-out-of-memory-fix features: "egui" lib_file_name_dst: helgobox-windows-i686.dll extension_file_name_dst: reaper_helgobox-windows-i686.dll - artifact: macos-x86_64 os: macos-14 lib_file_name: libhelgobox.dylib extension_file_name: libreaper_helgobox.dylib target: x86_64-apple-darwin profile: release-strip features: "playtime,egui,licensing" # The minimum version that I tested with is 10.13. # Writing 10.7 builds, but it won't run, for example, on 10.14 (weird)! # https://github.com/helgoboss/helgobox/issues/1384 macosx_deployment_target: "10.9" lib_file_name_dst: helgobox-macos-x86_64.vst.dylib extension_file_name_dst: reaper_helgobox-macos-x86_64.dylib - artifact: macos-aarch64 os: macos-14 lib_file_name: libhelgobox.dylib extension_file_name: libreaper_helgobox.dylib target: aarch64-apple-darwin profile: release-strip features: "playtime,egui,licensing" # First aarch64 macOS version macosx_deployment_target: "11.0" lib_file_name_dst: helgobox-macos-aarch64.vst.dylib extension_file_name_dst: reaper_helgobox-macos-aarch64.dylib - artifact: linux-x86_64 os: ubuntu-22.04 lib_file_name: libhelgobox.so extension_file_name: libreaper_helgobox.so target: x86_64-unknown-linux-gnu profile: release-strip features: "playtime,licensing" macosx_deployment_target: "" lib_file_name_dst: helgobox-linux-x86_64.so extension_file_name_dst: reaper_helgobox-linux-x86_64.so - artifact: linux-aarch64 os: ubuntu-22.04-arm lib_file_name: libhelgobox.so extension_file_name: libreaper_helgobox.so target: aarch64-unknown-linux-gnu profile: release-strip features: "playtime,licensing" macosx_deployment_target: "" lib_file_name_dst: helgobox-linux-aarch64.so extension_file_name_dst: reaper_helgobox-linux-aarch64.so env: MACOSX_DEPLOYMENT_TARGET: ${{ matrix.macosx_deployment_target }} steps: # Prepare (all) - name: Checkout uses: actions/checkout@v4 - uses: ./.github/actions/post-checkout with: playtime-engine-deploy-key: ${{ secrets.PRIVATE_PLAYTIME_CLIP_ENGINE_DEPLOY_KEY }} license-processor-deploy-key: ${{ secrets.PRIVATE_HELGOBOSS_LICENSE_PROCESSOR_DEPLOY_KEY }} - name: Install Rust uses: dtolnay/rust-toolchain@1.84.0 with: target: ${{ matrix.target }} - name: Rust cache uses: swatinem/rust-cache@v2 # Install OS dependencies (Linux/macOS only) - name: Set up dependencies if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install nasm php libudev-dev libxdo-dev libx11-dev libxcursor-dev libxcb-dri2-0-dev libxcb-icccm4-dev libx11-xcb-dev mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libspeechd-dev libgtk-3-dev shell: sh - name: Set up dependencies run: brew install php if: runner.os == 'macOS' shell: sh # Build (all) - name: Build release shell: sh env: PLAYTIME_AUTHENTICITY_SIGNING_KEY: "${{ secrets.PLAYTIME_AUTHENTICITY_SIGNING_KEY }}" PLAYTIME_LICENSE_VERIFYING_KEY: "${{ secrets.PLAYTIME_LICENSE_VERIFYING_KEY }}" PLAYTIME_PRESET_VERIFYING_KEY: "${{ secrets.PLAYTIME_PRESET_VERIFYING_KEY }}" AWS_LC_SYS_CMAKE_BUILDER: "1" run: cargo build --features "${{ matrix.features }}" --profile ${{ matrix.profile }} --target ${{ matrix.target }} # Upload to artifact - name: Upload plug-in and extension to artifact uses: actions/upload-artifact@v4 with: name: ${{ matrix.artifact }} path: | target/${{ matrix.target }}/${{ matrix.profile }}/${{ matrix.lib_file_name }} target/${{ matrix.target }}/${{ matrix.profile }}/${{ matrix.extension_file_name }} target/${{ matrix.target }}/${{ matrix.profile }}/helgobox.pdb target/${{ matrix.target }}/${{ matrix.profile }}/deps/libhelgobox.dylib.dSYM/ target/${{ matrix.target }}/${{ matrix.profile }}/libhelgobox-debug.so # Windows x64: Upload PDB to Sentry - name: Upload PDB if: startsWith(matrix.artifact, 'windows-x86_64') env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} shell: powershell run: | # Install Sentry CLI npm install -g @sentry/cli # Upload sentry-cli debug-files upload --auth-token $env:SENTRY_AUTH_TOKEN -o $env:SENTRY_ORG -p $env:SENTRY_PROJECT "target/${{ matrix.target }}/${{ matrix.profile }}/helgobox.pdb" - name: Check if release exists id: check_release shell: bash env: GITHUB_TOKEN: ${{ github.TOKEN }} run: | if gh release view ${{ github.ref_name }} &> /dev/null; then echo "RELEASE_EXISTS=true" >> "$GITHUB_OUTPUT" else echo "RELEASE_EXISTS=false" >> "$GITHUB_OUTPUT" fi - name: Create release if: steps.check_release.outputs.RELEASE_EXISTS != 'true' shell: bash env: GITHUB_TOKEN: ${{ github.TOKEN }} run: | gh release create ${{ github.ref_name }} --draft --prerelease --verify-tag - name: Download artifacts from build job uses: actions/download-artifact@v4 - name: Upload lib file shell: bash env: GITHUB_TOKEN: ${{ github.TOKEN }} run: | mv "target/${{ matrix.target }}/${{ matrix.profile }}/${{ matrix.lib_file_name }}" "${{ matrix.lib_file_name_dst }}" gh release upload ${{ github.ref_name }} --clobber "${{ matrix.lib_file_name_dst }}" - name: Upload extension file shell: bash env: GITHUB_TOKEN: ${{ github.TOKEN }} run: | mv "target/${{ matrix.target }}/${{ matrix.profile }}/${{ matrix.extension_file_name }}" "${{ matrix.extension_file_name_dst }}" gh release upload ${{ github.ref_name }} --clobber "${{ matrix.extension_file_name_dst }}"