-
Notifications
You must be signed in to change notification settings - Fork 152
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The appdmg@0.6.6
fails to install on systems with python3 v3.12.0
#234
Comments
Related to this It's because For a workaround, install python3 -m pip install setuptools |
We are also interested in seeing this fixed asap :-) |
@BoykoAlex if you need fix ASAP I would advise you to write the fix and provide PR. |
Well... the workaround helped so not ASAP ;-) |
Thanks @tk-nguyen for the setup tools workaround! It worked for me :) |
The silent failure to install when using Adding |
We fixed this in our GitHub Actions workflows running on - name: setup python
uses: actions/setup-python@v5
with:
python-version: 3.12
- name: setup appdmg
run: |
python3 -m pip install setuptools
npm install -g appdmg@0.6.6 |
<<<<<<< Local Changes diff --git a/.github/workflows/cmake_ctest.yml b/.github/workflows/cmake_ctest.yml index 49fcf83..bf5d8bc 100644 --- a/.github/workflows/cmake_ctest.yml +++ b/.github/workflows/cmake_ctest.yml @@ -29,9 +29,9 @@ jobs: fail-fast: false # show all errors for each platform (vs. cancel jobs on error) matrix: include: - # - name: Linux - # os: ubuntu-22.04 - # pluginval-binary: ./pluginval + - name: Linux + os: ubuntu-22.04 + pluginval-binary: ./pluginval - name: macOS os: macos-14 pluginval-binary: pluginval.app/Contents/MacOS/pluginval @@ -40,198 +40,193 @@ jobs: pluginval-binary: ./pluginval.exe steps: - - # This is just easier than debugging different compilers on different platforms - - name: Set up Clang - if: ${{ matrix.name != 'macOS' }} - uses: egor-tensin/setup-clang@v1 - - # This also starts up our "fake" display Xvfb, needed for pluginval - - name: Install JUCE's Linux Deps - if: runner.os == 'Linux' - # Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44 - 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 - # downgrade gcc to workaround 22.04 and C++20 issue - # see: https://github.com/actions/runner-images/issues/8659 - sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list - sudo apt-get update - sudo apt-get install -y --allow-downgrades libc6=2.35-0ubuntu3.7 libc6-dev=2.35-0ubuntu3.7 libstdc++6=12.3.0-1ubuntu1~22.04 libgcc-s1=12.3.0-1ubuntu1~22.04 - sudo /usr/bin/Xvfb $DISPLAY & - - - name: Cache IPP (Windows) - if: runner.os == 'Windows' - id: cache-ipp - uses: actions/cache@v4 - with: - key: ipp-v4 - path: C:\Program Files (x86)\Intel - - - name: Install IPP (Windows) - if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') - shell: bash - run: | - curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d158661-ca8f-4e66-b5ea-3e0b3d00836a/w_ipp_oneapi_p_2021.10.1.15_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@v4 - with: - path: C:\Program Files (x86)\Intel - key: ipp-v4 - - - name: Install Ninja (Windows) - if: runner.os == 'Windows' - shell: bash - run: choco install ninja - - - name: Install macOS Deps - if: ${{ matrix.name == 'macOS' }} - run: brew install ninja osxutils - - # This block can be removed once 15.1 is default (JUCE requires it when building on macOS 14) - - 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@v4 - with: - submodules: recursive # Get JUCE populated - - - name: Cache the build - uses: mozilla-actions/sccache-action@v0.0.4 - - - name: Import Certificates (macOS) - uses: apple-actions/import-codesign-certs@v3 # only exists as a tag right now - if: ${{ matrix.name == 'macOS' }} - with: - p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }} - p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }} - - - name: Configure - shell: bash - run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" . - - - name: Build - shell: bash - run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 - - - name: Test - working-directory: ${{ env.BUILD_DIR }} - run: ctest --output-on-failure -j4 -VV - - - name: Read in .env from CMake # see GitHubENV.cmake - shell: bash - run: | - cat .env # show us the config - cat .env >> $GITHUB_ENV # pull in our PRODUCT_NAME, etc - - - name: Set additional env vars for next steps - shell: bash - 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 - shell: bash - 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: Codesign (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # Each plugin must be code signed - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.STANDALONE_PATH }}" --deep --strict --options=runtime --timestamp - - - name: Add Custom Icons (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # add the icns as its own icon resource (meta!) - sips -i packaging/pamplejuce.icns - - # Grab the resource, put in tempfile - DeRez -only icns packaging/pamplejuce.icns > /tmp/icons - - # Stuff the resource into the strange Icon? file's resource fork - Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' - Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' - - # Set custom icon attribute - SetFile -a C "${{ env.VST3_PATH }}" - SetFile -a C "${{ env.AU_PATH }}" - - - name: Create DMG, Notarize and Staple (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # workaround for https://github.com/LinusU/node-appdmg/issues/234 - python3 -m pip install setuptools --break-system-packages - npm install -g appdmg - mkdir -p packaging/dmg - - # Create directories for the dmg symlinks - sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/Components && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/VST3 && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/CLAP - ln -s /Library/Audio/Plug-Ins/Components "packaging/dmg/Your Mac's Component folder" - ln -s /Library/Audio/Plug-Ins/VST3 "packaging/dmg/Your Mac's VST3 folder" - ln -s /Library/Audio/Plug-Ins/CLAP "packaging/dmg/Your Mac's CLAP folder" - mv "${{ env.VST3_PATH }}" packaging/dmg - mv "${{ env.AU_PATH }}" packaging/dmg - mv "${{ env.CLAP_PATH }}" packaging/dmg - mv "${{ env.STANDALONE_PATH }}" packaging/dmg - - # Run appdmg to create the .dmg - cd packaging && appdmg dmg.json "${{ env.ARTIFACT_NAME}}.dmg" - codesign -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" --timestamp -i ${{ env.BUNDLE_ID }} --force "${{ env.ARTIFACT_NAME }}.dmg" - xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.dmg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait - xcrun stapler staple "${{ env.ARTIFACT_NAME }}.dmg" - - - 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: Generate Installer (Windows) - if: ${{ matrix.name == 'Windows' }} - shell: bash - 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 DMG (macOS) - if: ${{ matrix.name == 'macOS' }} - uses: actions/upload-artifact@v4 - with: - name: ${{ env.ARTIFACT_NAME }}.dmg - path: packaging/${{ env.ARTIFACT_NAME }}.dmg + # This is just easier than debugging different compilers on different platforms + - name: Set up Clang + if: ${{ matrix.name != 'macOS' }} + uses: egor-tensin/setup-clang@v1 + + # This also starts up our "fake" display Xvfb, needed for pluginval + - name: Install JUCE's Linux Deps + if: runner.os == 'Linux' + # Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44 + 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 + # downgrade gcc to workaround 22.04 and C++20 issue + + - name: Cache IPP (Windows) + if: runner.os == 'Windows' + id: cache-ipp + uses: actions/cache@v4 + with: + key: ipp-v4 + path: C:\Program Files (x86)\Intel + + - name: Install IPP (Windows) + if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') + shell: bash + run: | + curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d158661-ca8f-4e66-b5ea-3e0b3d00836a/w_ipp_oneapi_p_2021.10.1.15_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@v4 + with: + path: C:\Program Files (x86)\Intel + key: ipp-v4 + + - name: Install Ninja (Windows) + if: runner.os == 'Windows' + shell: bash + run: choco install ninja + + - name: Install macOS Deps + if: ${{ matrix.name == 'macOS' }} + run: brew install ninja osxutils + + # This block can be removed once 15.1 is default (JUCE requires it when building on macOS 14) + - 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@v4 + with: + submodules: recursive # Get JUCE populated + + - name: Cache the build + uses: mozilla-actions/sccache-action@v0.0.4 + + - name: Import Certificates (macOS) + uses: apple-actions/import-codesign-certs@v3 # only exists as a tag right now + if: ${{ matrix.name == 'macOS' }} + with: + p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }} + p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }} + + - name: Configure + shell: bash + run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" . + + - name: Build + shell: bash + run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 + + - name: Test + working-directory: ${{ env.BUILD_DIR }} + run: ctest --output-on-failure -j4 -VV + + - name: Read in .env from CMake # see GitHubENV.cmake + shell: bash + run: | + cat .env # show us the config + cat .env >> $GITHUB_ENV # pull in our PRODUCT_NAME, etc + + - name: Set additional env vars for next steps + shell: bash + 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 + shell: bash + 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: Codesign (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # Each plugin must be code signed + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.STANDALONE_PATH }}" --deep --strict --options=runtime --timestamp + + - name: Add Custom Icons (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # add the icns as its own icon resource (meta!) + sips -i packaging/pamplejuce.icns + + # Grab the resource, put in tempfile + DeRez -only icns packaging/pamplejuce.icns > /tmp/icons + + # Stuff the resource into the strange Icon? file's resource fork + Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' + Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' + + # Set custom icon attribute + SetFile -a C "${{ env.VST3_PATH }}" + SetFile -a C "${{ env.AU_PATH }}" + + - name: Create DMG, Notarize and Staple (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # workaround for https://github.com/LinusU/node-appdmg/issues/234 + python3 -m pip install setuptools --break-system-packages + npm install -g appdmg + mkdir -p packaging/dmg + + # Create directories for the dmg symlinks + sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/Components && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/VST3 && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/CLAP + ln -s /Library/Audio/Plug-Ins/Components "packaging/dmg/Your Mac's Component folder" + ln -s /Library/Audio/Plug-Ins/VST3 "packaging/dmg/Your Mac's VST3 folder" + ln -s /Library/Audio/Plug-Ins/CLAP "packaging/dmg/Your Mac's CLAP folder" + mv "${{ env.VST3_PATH }}" packaging/dmg + mv "${{ env.AU_PATH }}" packaging/dmg + mv "${{ env.CLAP_PATH }}" packaging/dmg + mv "${{ env.STANDALONE_PATH }}" packaging/dmg + + # Run appdmg to create the .dmg + cd packaging && appdmg dmg.json "${{ env.ARTIFACT_NAME}}.dmg" + codesign -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" --timestamp -i ${{ env.BUNDLE_ID }} --force "${{ env.ARTIFACT_NAME }}.dmg" + xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.dmg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait + xcrun stapler staple "${{ env.ARTIFACT_NAME }}.dmg" + + - 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: Generate Installer (Windows) + if: ${{ matrix.name == 'Windows' }} + shell: bash + 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 DMG (macOS) + if: ${{ matrix.name == 'macOS' }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT_NAME }}.dmg + path: packaging/${{ env.ARTIFACT_NAME }}.dmg release: if: contains(github.ref, 'tags/v') @@ -239,16 +234,16 @@ jobs: steps: - - name: Get Artifacts - uses: actions/download-artifact@v4 - - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - prerelease: true - # download-artifact puts these files in their own dirs... - # Using globs sidesteps having to pass the version around - files: | - */*.exe - */*.zip - */*.dmg + - name: Get Artifacts + uses: actions/download-artifact@v4 + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + prerelease: true + # download-artifact puts these files in their own dirs... + # Using globs sidesteps having to pass the version around + files: | + */*.exe + */*.zip + */*.dmg diff --git a/JUCE b/JUCE index 9dc2751..113009c 160000 --- a/JUCE +++ b/JUCE @@ -1 +1 @@ -Subproject commit 9dc2751b5c8d6e0bd8f1b2a015732bd4762dd525 +Subproject commit 113009c07431bdb7952d2564a0039354d03f452b ||||||| Old File diff --git a/.github/workflows/cmake_ctest.yml b/.github/workflows/cmake_ctest.yml index 49fcf83..bf5d8bc 100644 --- a/.github/workflows/cmake_ctest.yml +++ b/.github/workflows/cmake_ctest.yml @@ -29,9 +29,9 @@ jobs: fail-fast: false # show all errors for each platform (vs. cancel jobs on error) matrix: include: - # - name: Linux - # os: ubuntu-22.04 - # pluginval-binary: ./pluginval + - name: Linux + os: ubuntu-22.04 + pluginval-binary: ./pluginval - name: macOS os: macos-14 pluginval-binary: pluginval.app/Contents/MacOS/pluginval @@ -40,198 +40,193 @@ jobs: pluginval-binary: ./pluginval.exe steps: - - # This is just easier than debugging different compilers on different platforms - - name: Set up Clang - if: ${{ matrix.name != 'macOS' }} - uses: egor-tensin/setup-clang@v1 - - # This also starts up our "fake" display Xvfb, needed for pluginval - - name: Install JUCE's Linux Deps - if: runner.os == 'Linux' - # Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44 - 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 - # downgrade gcc to workaround 22.04 and C++20 issue - # see: https://github.com/actions/runner-images/issues/8659 - sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list - sudo apt-get update - sudo apt-get install -y --allow-downgrades libc6=2.35-0ubuntu3.7 libc6-dev=2.35-0ubuntu3.7 libstdc++6=12.3.0-1ubuntu1~22.04 libgcc-s1=12.3.0-1ubuntu1~22.04 - sudo /usr/bin/Xvfb $DISPLAY & - - - name: Cache IPP (Windows) - if: runner.os == 'Windows' - id: cache-ipp - uses: actions/cache@v4 - with: - key: ipp-v4 - path: C:\Program Files (x86)\Intel - - - name: Install IPP (Windows) - if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') - shell: bash - run: | - curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d158661-ca8f-4e66-b5ea-3e0b3d00836a/w_ipp_oneapi_p_2021.10.1.15_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@v4 - with: - path: C:\Program Files (x86)\Intel - key: ipp-v4 - - - name: Install Ninja (Windows) - if: runner.os == 'Windows' - shell: bash - run: choco install ninja - - - name: Install macOS Deps - if: ${{ matrix.name == 'macOS' }} - run: brew install ninja osxutils - - # This block can be removed once 15.1 is default (JUCE requires it when building on macOS 14) - - 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@v4 - with: - submodules: recursive # Get JUCE populated - - - name: Cache the build - uses: mozilla-actions/sccache-action@v0.0.4 - - - name: Import Certificates (macOS) - uses: apple-actions/import-codesign-certs@v3 # only exists as a tag right now - if: ${{ matrix.name == 'macOS' }} - with: - p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }} - p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }} - - - name: Configure - shell: bash - run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" . - - - name: Build - shell: bash - run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 - - - name: Test - working-directory: ${{ env.BUILD_DIR }} - run: ctest --output-on-failure -j4 -VV - - - name: Read in .env from CMake # see GitHubENV.cmake - shell: bash - run: | - cat .env # show us the config - cat .env >> $GITHUB_ENV # pull in our PRODUCT_NAME, etc - - - name: Set additional env vars for next steps - shell: bash - 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 - shell: bash - 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: Codesign (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # Each plugin must be code signed - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.STANDALONE_PATH }}" --deep --strict --options=runtime --timestamp - - - name: Add Custom Icons (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # add the icns as its own icon resource (meta!) - sips -i packaging/pamplejuce.icns - - # Grab the resource, put in tempfile - DeRez -only icns packaging/pamplejuce.icns > /tmp/icons - - # Stuff the resource into the strange Icon? file's resource fork - Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' - Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' - - # Set custom icon attribute - SetFile -a C "${{ env.VST3_PATH }}" - SetFile -a C "${{ env.AU_PATH }}" - - - name: Create DMG, Notarize and Staple (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # workaround for https://github.com/LinusU/node-appdmg/issues/234 - python3 -m pip install setuptools --break-system-packages - npm install -g appdmg - mkdir -p packaging/dmg - - # Create directories for the dmg symlinks - sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/Components && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/VST3 && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/CLAP - ln -s /Library/Audio/Plug-Ins/Components "packaging/dmg/Your Mac's Component folder" - ln -s /Library/Audio/Plug-Ins/VST3 "packaging/dmg/Your Mac's VST3 folder" - ln -s /Library/Audio/Plug-Ins/CLAP "packaging/dmg/Your Mac's CLAP folder" - mv "${{ env.VST3_PATH }}" packaging/dmg - mv "${{ env.AU_PATH }}" packaging/dmg - mv "${{ env.CLAP_PATH }}" packaging/dmg - mv "${{ env.STANDALONE_PATH }}" packaging/dmg - - # Run appdmg to create the .dmg - cd packaging && appdmg dmg.json "${{ env.ARTIFACT_NAME}}.dmg" - codesign -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" --timestamp -i ${{ env.BUNDLE_ID }} --force "${{ env.ARTIFACT_NAME }}.dmg" - xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.dmg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait - xcrun stapler staple "${{ env.ARTIFACT_NAME }}.dmg" - - - 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: Generate Installer (Windows) - if: ${{ matrix.name == 'Windows' }} - shell: bash - 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 DMG (macOS) - if: ${{ matrix.name == 'macOS' }} - uses: actions/upload-artifact@v4 - with: - name: ${{ env.ARTIFACT_NAME }}.dmg - path: packaging/${{ env.ARTIFACT_NAME }}.dmg + # This is just easier than debugging different compilers on different platforms + - name: Set up Clang + if: ${{ matrix.name != 'macOS' }} + uses: egor-tensin/setup-clang@v1 + + # This also starts up our "fake" display Xvfb, needed for pluginval + - name: Install JUCE's Linux Deps + if: runner.os == 'Linux' + # Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44 + 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 + # downgrade gcc to workaround 22.04 and C++20 issue + sudo /usr/bin/Xvfb $DISPLAY & + + - name: Cache IPP (Windows) + if: runner.os == 'Windows' + id: cache-ipp + uses: actions/cache@v4 + with: + key: ipp-v4 + path: C:\Program Files (x86)\Intel + + - name: Install IPP (Windows) + if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') + shell: bash + run: | + curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d158661-ca8f-4e66-b5ea-3e0b3d00836a/w_ipp_oneapi_p_2021.10.1.15_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@v4 + with: + path: C:\Program Files (x86)\Intel + key: ipp-v4 + + - name: Install Ninja (Windows) + if: runner.os == 'Windows' + shell: bash + run: choco install ninja + + - name: Install macOS Deps + if: ${{ matrix.name == 'macOS' }} + run: brew install ninja osxutils + + # This block can be removed once 15.1 is default (JUCE requires it when building on macOS 14) + - 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@v4 + with: + submodules: recursive # Get JUCE populated + + - name: Cache the build + uses: mozilla-actions/sccache-action@v0.0.4 + + - name: Import Certificates (macOS) + uses: apple-actions/import-codesign-certs@v3 # only exists as a tag right now + if: ${{ matrix.name == 'macOS' }} + with: + p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }} + p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }} + + - name: Configure + shell: bash + run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" . + + - name: Build + shell: bash + run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 + + - name: Test + working-directory: ${{ env.BUILD_DIR }} + run: ctest --output-on-failure -j4 -VV + + - name: Read in .env from CMake # see GitHubENV.cmake + shell: bash + run: | + cat .env # show us the config + cat .env >> $GITHUB_ENV # pull in our PRODUCT_NAME, etc + + - name: Set additional env vars for next steps + shell: bash + 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 + shell: bash + 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: Codesign (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # Each plugin must be code signed + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.STANDALONE_PATH }}" --deep --strict --options=runtime --timestamp + + - name: Add Custom Icons (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # add the icns as its own icon resource (meta!) + sips -i packaging/pamplejuce.icns + + # Grab the resource, put in tempfile + DeRez -only icns packaging/pamplejuce.icns > /tmp/icons + + # Stuff the resource into the strange Icon? file's resource fork + Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' + Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' + + # Set custom icon attribute + SetFile -a C "${{ env.VST3_PATH }}" + SetFile -a C "${{ env.AU_PATH }}" + + - name: Create DMG, Notarize and Staple (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # workaround for https://github.com/LinusU/node-appdmg/issues/234 + python3 -m pip install setuptools --break-system-packages + npm install -g appdmg + mkdir -p packaging/dmg + + # Create directories for the dmg symlinks + sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/Components && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/VST3 && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/CLAP + ln -s /Library/Audio/Plug-Ins/Components "packaging/dmg/Your Mac's Component folder" + ln -s /Library/Audio/Plug-Ins/VST3 "packaging/dmg/Your Mac's VST3 folder" + ln -s /Library/Audio/Plug-Ins/CLAP "packaging/dmg/Your Mac's CLAP folder" + mv "${{ env.VST3_PATH }}" packaging/dmg + mv "${{ env.AU_PATH }}" packaging/dmg + mv "${{ env.CLAP_PATH }}" packaging/dmg + mv "${{ env.STANDALONE_PATH }}" packaging/dmg + + # Run appdmg to create the .dmg + cd packaging && appdmg dmg.json "${{ env.ARTIFACT_NAME}}.dmg" + codesign -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" --timestamp -i ${{ env.BUNDLE_ID }} --force "${{ env.ARTIFACT_NAME }}.dmg" + xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.dmg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait + xcrun stapler staple "${{ env.ARTIFACT_NAME }}.dmg" + + - 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: Generate Installer (Windows) + if: ${{ matrix.name == 'Windows' }} + shell: bash + 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 DMG (macOS) + if: ${{ matrix.name == 'macOS' }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT_NAME }}.dmg + path: packaging/${{ env.ARTIFACT_NAME }}.dmg release: if: contains(github.ref, 'tags/v') @@ -239,16 +234,16 @@ jobs: needs: build_and_test steps: - - name: Get Artifacts - uses: actions/download-artifact@v4 - - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - prerelease: true - # download-artifact puts these files in their own dirs... - # Using globs sidesteps having to pass the version around - files: | - */*.exe - */*.zip - */*.dmg + - name: Get Artifacts + uses: actions/download-artifact@v4 + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + prerelease: true + # download-artifact puts these files in their own dirs... + # Using globs sidesteps having to pass the version around + files: | + */*.exe + */*.zip + */*.dmg diff --git a/JUCE b/JUCE index 9dc2751..113009c 160000 --- a/JUCE +++ b/JUCE @@ -1 +1 @@ ======= >>>>>>> External Changes index 49fcf83..bf5d8bc 100644 --- a/.github/workflows/cmake_ctest.yml +++ b/.github/workflows/cmake_ctest.yml @@ -29,9 +29,9 @@ jobs: fail-fast: false # show all errors for each platform (vs. cancel jobs on error) matrix: include: - # - name: Linux - # os: ubuntu-22.04 - # pluginval-binary: ./pluginval + - name: Linux + os: ubuntu-22.04 + pluginval-binary: ./pluginval - name: macOS os: macos-14 pluginval-binary: pluginval.app/Contents/MacOS/pluginval @@ -40,198 +40,193 @@ jobs: pluginval-binary: ./pluginval.exe steps: - - # This is just easier than debugging different compilers on different platforms - - name: Set up Clang - if: ${{ matrix.name != 'macOS' }} - uses: egor-tensin/setup-clang@v1 - - # This also starts up our "fake" display Xvfb, needed for pluginval - - name: Install JUCE's Linux Deps - if: runner.os == 'Linux' - # Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44 - 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 - # downgrade gcc to workaround 22.04 and C++20 issue - # see: https://github.com/actions/runner-images/issues/8659 - sudo rm -f /etc/apt/sources.list.d/ubuntu-toolchain-r-ubuntu-test-jammy.list - sudo apt-get update - sudo apt-get install -y --allow-downgrades libc6=2.35-0ubuntu3.7 libc6-dev=2.35-0ubuntu3.7 libstdc++6=12.3.0-1ubuntu1~22.04 libgcc-s1=12.3.0-1ubuntu1~22.04 - sudo /usr/bin/Xvfb $DISPLAY & - - - name: Cache IPP (Windows) - if: runner.os == 'Windows' - id: cache-ipp - uses: actions/cache@v4 - with: - key: ipp-v4 - path: C:\Program Files (x86)\Intel - - - name: Install IPP (Windows) - if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') - shell: bash - run: | - curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d158661-ca8f-4e66-b5ea-3e0b3d00836a/w_ipp_oneapi_p_2021.10.1.15_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@v4 - with: - path: C:\Program Files (x86)\Intel - key: ipp-v4 - - - name: Install Ninja (Windows) - if: runner.os == 'Windows' - shell: bash - run: choco install ninja - - - name: Install macOS Deps - if: ${{ matrix.name == 'macOS' }} - run: brew install ninja osxutils - - # This block can be removed once 15.1 is default (JUCE requires it when building on macOS 14) - - 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@v4 - with: - submodules: recursive # Get JUCE populated - - - name: Cache the build - uses: mozilla-actions/sccache-action@v0.0.4 - - - name: Import Certificates (macOS) - uses: apple-actions/import-codesign-certs@v3 # only exists as a tag right now - if: ${{ matrix.name == 'macOS' }} - with: - p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }} - p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }} - - - name: Configure - shell: bash - run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" . - - - name: Build - shell: bash - run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 - - - name: Test - working-directory: ${{ env.BUILD_DIR }} - run: ctest --output-on-failure -j4 -VV - - - name: Read in .env from CMake # see GitHubENV.cmake - shell: bash - run: | - cat .env # show us the config - cat .env >> $GITHUB_ENV # pull in our PRODUCT_NAME, etc - - - name: Set additional env vars for next steps - shell: bash - 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 - shell: bash - 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: Codesign (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # Each plugin must be code signed - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime --timestamp - codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.STANDALONE_PATH }}" --deep --strict --options=runtime --timestamp - - - name: Add Custom Icons (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # add the icns as its own icon resource (meta!) - sips -i packaging/pamplejuce.icns - - # Grab the resource, put in tempfile - DeRez -only icns packaging/pamplejuce.icns > /tmp/icons - - # Stuff the resource into the strange Icon? file's resource fork - Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' - Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' - - # Set custom icon attribute - SetFile -a C "${{ env.VST3_PATH }}" - SetFile -a C "${{ env.AU_PATH }}" - - - name: Create DMG, Notarize and Staple (macOS) - if: ${{ matrix.name == 'macOS' }} - run: | - # workaround for https://github.com/LinusU/node-appdmg/issues/234 - python3 -m pip install setuptools --break-system-packages - npm install -g appdmg - mkdir -p packaging/dmg - - # Create directories for the dmg symlinks - sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/Components && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/VST3 && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/CLAP - ln -s /Library/Audio/Plug-Ins/Components "packaging/dmg/Your Mac's Component folder" - ln -s /Library/Audio/Plug-Ins/VST3 "packaging/dmg/Your Mac's VST3 folder" - ln -s /Library/Audio/Plug-Ins/CLAP "packaging/dmg/Your Mac's CLAP folder" - mv "${{ env.VST3_PATH }}" packaging/dmg - mv "${{ env.AU_PATH }}" packaging/dmg - mv "${{ env.CLAP_PATH }}" packaging/dmg - mv "${{ env.STANDALONE_PATH }}" packaging/dmg - - # Run appdmg to create the .dmg - cd packaging && appdmg dmg.json "${{ env.ARTIFACT_NAME}}.dmg" - codesign -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" --timestamp -i ${{ env.BUNDLE_ID }} --force "${{ env.ARTIFACT_NAME }}.dmg" - xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.dmg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait - xcrun stapler staple "${{ env.ARTIFACT_NAME }}.dmg" - - - 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: Generate Installer (Windows) - if: ${{ matrix.name == 'Windows' }} - shell: bash - 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 DMG (macOS) - if: ${{ matrix.name == 'macOS' }} - uses: actions/upload-artifact@v4 - with: - name: ${{ env.ARTIFACT_NAME }}.dmg - path: packaging/${{ env.ARTIFACT_NAME }}.dmg + # This is just easier than debugging different compilers on different platforms + - name: Set up Clang + if: ${{ matrix.name != 'macOS' }} + uses: egor-tensin/setup-clang@v1 + + # This also starts up our "fake" display Xvfb, needed for pluginval + - name: Install JUCE's Linux Deps + if: runner.os == 'Linux' + # Thanks to McMartin & co https://forum.juce.com/t/list-of-juce-dependencies-under-linux/15121/44 + 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 + # downgrade gcc to workaround 22.04 and C++20 issue + + - name: Cache IPP (Windows) + if: runner.os == 'Windows' + id: cache-ipp + uses: actions/cache@v4 + with: + key: ipp-v4 + path: C:\Program Files (x86)\Intel + + - name: Install IPP (Windows) + if: (runner.os == 'Windows') && (steps.cache-ipp.outputs.cache-hit != 'true') + shell: bash + run: | + curl --output oneapi.exe https://registrationcenter-download.intel.com/akdlm/IRC_NAS/8d158661-ca8f-4e66-b5ea-3e0b3d00836a/w_ipp_oneapi_p_2021.10.1.15_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@v4 + with: + path: C:\Program Files (x86)\Intel + key: ipp-v4 + + - name: Install Ninja (Windows) + if: runner.os == 'Windows' + shell: bash + run: choco install ninja + + - name: Install macOS Deps + if: ${{ matrix.name == 'macOS' }} + run: brew install ninja osxutils + + # This block can be removed once 15.1 is default (JUCE requires it when building on macOS 14) + - 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@v4 + with: + submodules: recursive # Get JUCE populated + + - name: Cache the build + uses: mozilla-actions/sccache-action@v0.0.4 + + - name: Import Certificates (macOS) + uses: apple-actions/import-codesign-certs@v3 # only exists as a tag right now + if: ${{ matrix.name == 'macOS' }} + with: + p12-file-base64: ${{ secrets.DEV_ID_APP_CERT }} + p12-password: ${{ secrets.DEV_ID_APP_PASSWORD }} + + - name: Configure + shell: bash + run: cmake -B ${{ env.BUILD_DIR }} -G Ninja -DCMAKE_BUILD_TYPE=${{ env.BUILD_TYPE}} -DCMAKE_C_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_CXX_COMPILER_LAUNCHER=${{ matrix.ccache }} -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" . + + - name: Build + shell: bash + run: cmake --build ${{ env.BUILD_DIR }} --config ${{ env.BUILD_TYPE }} --parallel 4 + + - name: Test + working-directory: ${{ env.BUILD_DIR }} + run: ctest --output-on-failure -j4 -VV + + - name: Read in .env from CMake # see GitHubENV.cmake + shell: bash + run: | + cat .env # show us the config + cat .env >> $GITHUB_ENV # pull in our PRODUCT_NAME, etc + + - name: Set additional env vars for next steps + shell: bash + 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 + shell: bash + 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: Codesign (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # Each plugin must be code signed + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.VST3_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.AU_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.CLAP_PATH }}" --deep --strict --options=runtime --timestamp + codesign --force -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" -v "${{ env.STANDALONE_PATH }}" --deep --strict --options=runtime --timestamp + + - name: Add Custom Icons (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # add the icns as its own icon resource (meta!) + sips -i packaging/pamplejuce.icns + + # Grab the resource, put in tempfile + DeRez -only icns packaging/pamplejuce.icns > /tmp/icons + + # Stuff the resource into the strange Icon? file's resource fork + Rez -a /tmp/icons -o "${{ env.VST3_PATH }}/Icon"$'\r' + Rez -a /tmp/icons -o "${{ env.AU_PATH }}/Icon"$'\r' + + # Set custom icon attribute + SetFile -a C "${{ env.VST3_PATH }}" + SetFile -a C "${{ env.AU_PATH }}" + + - name: Create DMG, Notarize and Staple (macOS) + if: ${{ matrix.name == 'macOS' }} + run: | + # workaround for https://github.com/LinusU/node-appdmg/issues/234 + python3 -m pip install setuptools --break-system-packages + npm install -g appdmg + mkdir -p packaging/dmg + + # Create directories for the dmg symlinks + sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/Components && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/VST3 && sudo mkdir -m 755 -p /Library/Audio/Plug-Ins/CLAP + ln -s /Library/Audio/Plug-Ins/Components "packaging/dmg/Your Mac's Component folder" + ln -s /Library/Audio/Plug-Ins/VST3 "packaging/dmg/Your Mac's VST3 folder" + ln -s /Library/Audio/Plug-Ins/CLAP "packaging/dmg/Your Mac's CLAP folder" + mv "${{ env.VST3_PATH }}" packaging/dmg + mv "${{ env.AU_PATH }}" packaging/dmg + mv "${{ env.CLAP_PATH }}" packaging/dmg + mv "${{ env.STANDALONE_PATH }}" packaging/dmg + + # Run appdmg to create the .dmg + cd packaging && appdmg dmg.json "${{ env.ARTIFACT_NAME}}.dmg" + codesign -s "${{ secrets.DEVELOPER_ID_APPLICATION}}" --timestamp -i ${{ env.BUNDLE_ID }} --force "${{ env.ARTIFACT_NAME }}.dmg" + xcrun notarytool submit "${{ env.ARTIFACT_NAME }}.dmg" --apple-id ${{ secrets.NOTARIZATION_USERNAME }} --password ${{ secrets.NOTARIZATION_PASSWORD }} --team-id ${{ secrets.TEAM_ID }} --wait + xcrun stapler staple "${{ env.ARTIFACT_NAME }}.dmg" + + - 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: Generate Installer (Windows) + if: ${{ matrix.name == 'Windows' }} + shell: bash + 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 DMG (macOS) + if: ${{ matrix.name == 'macOS' }} + uses: actions/upload-artifact@v4 + with: + name: ${{ env.ARTIFACT_NAME }}.dmg + path: packaging/${{ env.ARTIFACT_NAME }}.dmg release: if: contains(github.ref, 'tags/v') @@ -239,16 +234,16 @@ jobs: steps: - - name: Get Artifacts - uses: actions/download-artifact@v4 - - - name: Create Release - uses: softprops/action-gh-release@v1 - with: - prerelease: true - # download-artifact puts these files in their own dirs... - # Using globs sidesteps having to pass the version around - files: | - */*.exe - */*.zip - */*.dmg + - name: Get Artifacts + uses: actions/download-artifact@v4 + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + prerelease: true + # download-artifact puts these files in their own dirs... + # Using globs sidesteps having to pass the version around + files: | + */*.exe + */*.zip + */*.dmg diff --git a/JUCE b/JUCE index 9dc2751..113009c 160000 --- a/JUCE +++ b/JUCE @@ -1 +1 @@ -Subproject commit 9dc2751b5c8d6e0bd8f1b2a015732bd4762dd525 +Subproject commit 113009c07431bdb7952d2564a0039354d03f452b diff --git a/benchmarks/Benchmarks.cpp b/benchmarks/Benchmarks.cpp index 17b9018..10948d7 100644 --- a/benchmarks/Benchmarks.cpp +++ b/benchmarks/Benchmarks.cpp @@ -12,15 +12,15 @@ TEST_CASE ("Boot performance") meter.measure ([&] (int i) { storage[(size_t) i].construct(); }); }; - BENCHMARK_ADVANCED ("Processor destructor") - (Catch::Benchmark::Chronometer meter) - { - auto gui = juce::ScopedJuceInitialiser_GUI {}; - std::vector<Catch::Benchmark::destructable_object<PluginProcessor>> storage (size_t (meter.runs())); - for (auto& s : storage) - s.construct(); - meter.measure ([&] (int i) { storage[(size_t) i].destruct(); }); - }; + // BENCHMARK_ADVANCED ("Processor destructor") + // (Catch::Benchmark::Chronometer meter) + // { + // auto gui = juce::ScopedJuceInitialiser_GUI {}; + // std::vector<Catch::Benchmark::destructable_object<PluginProcessor>> storage (size_t (meter.runs())); + // for (auto& s : storage) + // s.construct(); + // meter.measure ([&] (int i) { storage[(size_t) i].destruct(); }); + // }; BENCHMARK_ADVANCED ("Editor open and close") (Catch::Benchmark::Chronometer meter)
We see failures to install the
appdmg@0.6.6
on systems running python3v3.12.0
. It can install correctly with python3.11.0
.See https://github.com/jozefizso/macosrunner-appdmg/actions/runs/6676439380
The text was updated successfully, but these errors were encountered: