Bump actions/cache from 4 to 5 #155
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: Chasm_Build | |
| on: | |
| workflow_dispatch: | |
| push: | |
| pull_request: | |
| concurrency: | |
| group: ${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| BUILD_TYPE: Release | |
| BUILD_DIR: Builds | |
| DISPLAY: :0 | |
| HOMEBREW_NO_INSTALL_CLEANUP: 1 | |
| SCCACHE_GHA_ENABLED: true | |
| SCCACHE_CACHE_MULTIARCH: 1 | |
| IPP_DIR: C:\Program Files (x86)\Intel\oneAPI\ipp\latest\lib\cmake\ipp | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| build_and_test: | |
| if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name | |
| name: ${{ matrix.name }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - name: Linux | |
| os: ubuntu-22.04 | |
| pluginval-binary: ./pluginval | |
| extra-flags: -G Ninja | |
| - name: macOS | |
| os: macos-14 | |
| pluginval-binary: pluginval.app/Contents/MacOS/pluginval | |
| extra-flags: -G Ninja -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" | |
| - name: Windows | |
| os: windows-latest | |
| pluginval-binary: ./pluginval.exe | |
| steps: | |
| - uses: ilammy/msvc-dev-cmd@v1 | |
| - name: Set up Clang | |
| if: runner.os == 'Linux' | |
| uses: egor-tensin/setup-clang@v1 | |
| - name: Install JUCE's Linux Deps | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update && sudo apt install libasound2-dev libx11-dev libxinerama-dev libxext-dev libfreetype6-dev libwebkit2gtk-4.0-dev libglu1-mesa-dev xvfb ninja-build | |
| sudo /usr/bin/Xvfb $DISPLAY & | |
| - name: Cache IPP (Windows) | |
| if: runner.os == 'Windows' | |
| id: cache-ipp | |
| uses: actions/cache@v5 | |
| with: | |
| key: ipp-v6 | |
| path: C:\Program Files (x86)\Intel | |
| - name: Install IPP (Windows) | |
| if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') | |
| run: | | |
| curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/2e89fab4-e1c7-4f14-a1ef-6cddba8c5fa7/intel-ipp-2022.0.0.796_offline.exe | |
| ./oneapi.exe -s -x -f oneapi | |
| ./oneapi/bootstrapper.exe -s -c --action install --components=intel.oneapi.win.ipp.devel --eula=accept -p=NEED_VS2022_INTEGRATION=1 --log-dir=. | |
| - name: Save IPP cache (even on CI fail) | |
| if: runner.os == 'Windows' && (steps.cache-ipp.outputs.cache-hit != 'true') | |
| uses: actions/cache/save@v5 | |
| with: | |
| path: C:\Program Files (x86)\Intel | |
| key: ipp-v6 | |
| - name: Install Ninja (Windows) | |
| if: runner.os == 'Windows' | |
| run: choco install ninja | |
| - name: Install macOS Deps | |
| if: ${{ matrix.name == 'macOS' }} | |
| run: brew install ninja osxutils | |
| - name: Use latest Xcode on system (macOS) | |
| if: ${{ matrix.name == 'macOS' }} | |
| uses: maxim-lobanov/setup-xcode@v1 | |
| with: | |
| xcode-version: latest-stable | |
| - name: Checkout code | |
| uses: actions/checkout@v5 | |
| with: | |
| submodules: recursive | |
| token: ${{ secrets.PAT }} | |
| - name: Recreate moonbase_api_config.json | |
| run: | | |
| mkdir -p assets/BinaryData | |
| echo "${{ secrets.CONFIG_JSON_B64 }}" | base64 --decode > assets/BinaryData/moonbase_api_config.json | |
| - name: Cache the build | |
| uses: mozilla-actions/sccache-action@v0.0.9 | |
| - name: Import Certificates (macOS) | |
| uses: sudara/basic-macos-keychain-action@v1 | |
| id: keychain | |
| if: ${{ matrix.name == 'macOS'}} | |
| with: | |
| dev-id-app-cert: ${{ secrets.DEV_ID_APP_CERT }} | |
| dev-id-app-password: ${{ secrets.DEV_ID_APP_PASSWORD }} | |
| dev-id-installer-cert: ${{ secrets.DEV_ID_INSTALLER_CERT }} | |
| dev-id-installer-password: ${{ secrets.DEV_ID_INSTALLER_PASSWORD }} | |
| - name: Configure | |
| run: cmake -B ${{ env.BUILD_DIR }} -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache ${{ matrix.extra-flags }} . | |
| - name: Build | |
| run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 | |
| - name: Test & Benchmarks | |
| working-directory: ${{ env.BUILD_DIR }} | |
| run: ctest --verbose --output-on-failure | |
| - name: Read in .env from CMake | |
| run: | | |
| cat .env | |
| cat .env >> $GITHUB_ENV | |
| - name: Set additional env vars for next steps | |
| run: | | |
| ARTIFACTS_PATH=${{ env.BUILD_DIR }}/${{ env.PROJECT_NAME }}_artefacts/${{ env.BUILD_TYPE }} | |
| echo "ARTIFACTS_PATH=$ARTIFACTS_PATH" >> $GITHUB_ENV | |
| echo "VST3_PATH=$ARTIFACTS_PATH/VST3/${{ env.PRODUCT_NAME }}.vst3" >> $GITHUB_ENV | |
| echo "AU_PATH=$ARTIFACTS_PATH/AU/${{ env.PRODUCT_NAME }}.component" >> $GITHUB_ENV | |
| echo "AUV3_PATH=$ARTIFACTS_PATH/AUv3/${{ env.PRODUCT_NAME }}.appex" >> $GITHUB_ENV | |
| echo "CLAP_PATH=$ARTIFACTS_PATH/CLAP/${{ env.PRODUCT_NAME }}.clap" >> $GITHUB_ENV | |
| echo "STANDALONE_PATH=$ARTIFACTS_PATH/Standalone/${{ env.PRODUCT_NAME }}.app" >> $GITHUB_ENV | |
| echo "ARTIFACT_NAME=${{ env.PRODUCT_NAME }}-${{ env.VERSION }}-${{ matrix.name }}" >> $GITHUB_ENV | |
| - name: Pluginval | |
| run: | | |
| curl -LO "https://github.com/Tracktion/pluginval/releases/download/v1.0.3/pluginval_${{ matrix.name }}.zip" | |
| 7z x pluginval_${{ matrix.name }}.zip | |
| ${{ matrix.pluginval-binary }} --strictness-level 10 --verbose --validate "${{ env.VST3_PATH }}" | |
| - name: Add Custom Icons (macOS) | |
| if: ${{ matrix.name == 'macOS' }} | |
| run: | | |
| sips -i packaging/chasm.icns | |
| DeRez -only icns packaging/chasm.icns > /tmp/icons | |
| Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' | |
| Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' | |
| Rez -a /tmp/icons -o "${{ env.CLAP_PATH }}/Icon"$'\r' | |
| SetFile -a C "${{ env.VST3_PATH }}" | |
| SetFile -a C "${{ env.AU_PATH }}" | |
| SetFile -a C "${{ env.CLAP_PATH }}" | |
| - name: Remove Extended Attributes (macOS) | |
| if: ${{ matrix.name == 'macOS' }} | |
| run: | | |
| xattr -cr "${{ env.VST3_PATH }}" | |
| xattr -cr "${{ env.AU_PATH }}" | |
| xattr -cr "${{ env.CLAP_PATH }}" | |
| - name: Codesign (macOS) | |
| if: ${{ matrix.name == 'macOS'}} | |
| run: | | |
| if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then | |
| TSFLAG="--timestamp" | |
| echo "Using timestamped codesign (release build)" | |
| else | |
| TSFLAG="--timestamp=none" | |
| echo "Skipping timestamp (CI build)" | |
| fi | |
| KEYCHAIN="${{ steps.keychain.outputs.keychain-path }}" | |
| KEYCHAIN_PASSWORD="${{ steps.keychain.outputs.keychain-password }}" | |
| # Unlock the keychain to prevent password prompts | |
| security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" | |
| security find-identity -v -p codesigning "$KEYCHAIN" | |
| /usr/bin/codesign --keychain "$KEYCHAIN" --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime $TSFLAG | |
| /usr/bin/codesign --keychain "$KEYCHAIN" --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime $TSFLAG | |
| /usr/bin/codesign --keychain "$KEYCHAIN" --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime $TSFLAG | |
| - name: pkgbuild, Productbuild and Notarize (Release only) | |
| if: ${{ matrix.name == 'macOS' && startsWith(github.ref, 'refs/tags/v') }} | |
| timeout-minutes: 10 | |
| run: | | |
| KEYCHAIN="${{ steps.keychain.outputs.keychain-path }}" | |
| pkgbuild --keychain "$KEYCHAIN" --identifier "${{ env.BUNDLE_ID }}.au.pkg" --version $VERSION --component "${{ env.AU_PATH }}" --install-location "/Library/Audio/Plug-Ins/Components" "packaging/${{ env.PRODUCT_NAME }}.au.pkg" | |
| pkgbuild --keychain "$KEYCHAIN" --identifier "${{ env.BUNDLE_ID }}.vst3.pkg" --version $VERSION --component "${{ env.VST3_PATH }}" --install-location "/Library/Audio/Plug-Ins/VST3" "packaging/${{ env.PRODUCT_NAME }}.vst3.pkg" | |
| pkgbuild --keychain "$KEYCHAIN" --identifier "${{ env.BUNDLE_ID }}.clap.pkg" --version $VERSION --component "${{ env.CLAP_PATH }}" --install-location "/Library/Audio/Plug-Ins/CLAP" "packaging/${{ env.PRODUCT_NAME }}.clap.pkg" | |
| mkdir -p "packaging/presets_temp/${{ env.COMPANY_NAME }}/${{ env.PRODUCT_NAME }}/Presets" | |
| cp -r assets/stock_presets/* "packaging/presets_temp/${{ env.COMPANY_NAME }}/${{ env.PRODUCT_NAME }}/Presets/" | |
| pkgbuild --keychain "$KEYCHAIN" --identifier "${{ env.BUNDLE_ID }}.presets.pkg" --version $VERSION --root "packaging/presets_temp" --install-location "/Users/Shared" "packaging/${{ env.PRODUCT_NAME }}.presets.pkg" | |
| if [ -d "${{ env.STANDALONE_PATH }}" ]; then | |
| pkgbuild --analyze --root "$(dirname "${{ env.STANDALONE_PATH }}")" standalone.plist | |
| plutil -replace BundleIsRelocatable -bool NO standalone.plist | |
| pkgbuild --keychain "$KEYCHAIN" --identifier "${{ env.BUNDLE_ID }}.app.pkg" --version $VERSION --root "$(dirname "${{ env.STANDALONE_PATH }}")" --component-plist standalone.plist --install-location "/Applications" "packaging/${{ env.PRODUCT_NAME }}.app.pkg" | |
| fi | |
| cd packaging | |
| envsubst < distribution.xml.template > distribution.xml | |
| productbuild --keychain "$KEYCHAIN" --resources ./resources --distribution distribution.xml "${{ env.ARTIFACT_NAME }}.pkg" | |
| xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.pkg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait | |
| xcrun stapler staple "${{ env.ARTIFACT_NAME }}.pkg" | |
| - name: Zip | |
| if: ${{ matrix.name == 'Linux' }} | |
| working-directory: ${{ env.ARTIFACTS_PATH }} | |
| run: 7z a -tzip "${{ env.ARTIFACT_NAME }}.zip" "-xr!lib${{ env.PRODUCT_NAME }}_SharedCode.a" . | |
| - name: Install Inno Setup (Windows) | |
| if: ${{ matrix.name == 'Windows' }} | |
| run: choco install innosetup --yes | |
| - name: Generate Installer | |
| if: ${{ matrix.name == 'Windows' }} | |
| run: | | |
| iscc "packaging\installer.iss" | |
| mv "packaging/Output/${{ env.ARTIFACT_NAME }}.exe" "${{ env.ARTIFACTS_PATH }}/" | |
| - name: Upload Exe (Windows) | |
| if: ${{ matrix.name == 'Windows' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.ARTIFACT_NAME }}.exe | |
| path: "${{ env.ARTIFACTS_PATH }}/${{ env.ARTIFACT_NAME }}.exe" | |
| - name: Upload Zip (Linux) | |
| if: ${{ matrix.name == 'Linux' }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.ARTIFACT_NAME }}.zip | |
| path: "${{ env.ARTIFACTS_PATH }}/${{ env.ARTIFACT_NAME }}.zip" | |
| - name: Upload pkg (macOS Release only) | |
| if: ${{ matrix.name == 'macOS' && startsWith(github.ref, 'refs/tags/v') }} | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.ARTIFACT_NAME }}.pkg | |
| path: packaging/${{ env.ARTIFACT_NAME }}.pkg | |
| release: | |
| if: contains(github.ref, 'tags/v') | |
| runs-on: ubuntu-latest | |
| needs: build_and_test | |
| steps: | |
| - name: Get Artifacts | |
| uses: actions/download-artifact@v5 | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| prerelease: true | |
| files: | | |
| */*.exe | |
| */*.zip | |
| */*.pkg | |
| */*.dmg |