From 5fbef55af2aeb7182f0af2f597e53290320b68e7 Mon Sep 17 00:00:00 2001 From: Peter Sobot Date: Fri, 15 May 2026 16:38:29 -0700 Subject: [PATCH 1/5] Try switching to ARM containers for ARM builds. --- .github/workflows/all.yml | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/.github/workflows/all.yml b/.github/workflows/all.yml index a7aa1153..cfd0b04e 100644 --- a/.github/workflows/all.yml +++ b/.github/workflows/all.yml @@ -862,28 +862,28 @@ jobs: # - { os: windows-latest, build: cp313t-win_amd64 } # - { os: windows-latest, build: cp312-win32 } - { os: "ubuntu-24.04", build: cp310-manylinux_x86_64 } - - { os: "ubuntu-24.04", build: cp310-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp310-manylinux_aarch64 } - { os: "ubuntu-24.04", build: cp310-musllinux_x86_64 } - - { os: "ubuntu-24.04", build: cp310-musllinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp310-musllinux_aarch64 } - { os: "ubuntu-24.04", build: cp311-manylinux_x86_64 } - - { os: "ubuntu-24.04", build: cp311-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp311-manylinux_aarch64 } # - { os: 'ubuntu-24.04', build: cp311-musllinux_x86_64 } # - { os: 'ubuntu-24.04', build: cp311-musllinux_aarch64 } - { os: "ubuntu-24.04", build: cp312-manylinux_x86_64 } - - { os: "ubuntu-24.04", build: cp312-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp312-manylinux_aarch64 } - { os: "ubuntu-24.04", build: cp312-musllinux_x86_64 } - - { os: "ubuntu-24.04", build: cp312-musllinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp312-musllinux_aarch64 } - { os: "ubuntu-24.04", build: cp313-manylinux_x86_64 } - - { os: "ubuntu-24.04", build: cp313-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp313-manylinux_aarch64 } # - { os: 'ubuntu-24.04', build: cp313-musllinux_x86_64 } # - { os: 'ubuntu-24.04', build: cp313-musllinux_aarch64 } - { os: "ubuntu-24.04", build: cp313t-manylinux_x86_64 } - - { os: "ubuntu-24.04", build: cp313t-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp313t-manylinux_aarch64 } # - { os: 'ubuntu-24.04', build: cp313t-musllinux_x86_64 } # - { os: 'ubuntu-24.04', build: cp313t-musllinux_aarch64 } - { os: "ubuntu-24.04", build: cp314-manylinux_x86_64 } - - { os: "ubuntu-24.04", build: cp314-manylinux_aarch64 } - - { os: "ubuntu-24.04", build: cp314t-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp314-manylinux_aarch64 } + - { os: "ubuntu-24.04-arm", build: cp314t-manylinux_aarch64 } name: Build wheel for ${{ matrix.build }} steps: - uses: actions/checkout@v4 @@ -895,11 +895,6 @@ jobs: python-version: "3.13" - name: Install cibuildwheel run: python -m pip install 'cibuildwheel>=2.11.0' - - name: Set up QEMU for aarch64 on Linux - if: runner.os == 'Linux' - uses: docker/setup-qemu-action@v1 - with: - platforms: all - name: Build wheels run: python -m cibuildwheel --output-dir wheelhouse env: From b220c23886ef5f785c2df8d1fa5689cbbcd750c7 Mon Sep 17 00:00:00 2001 From: Peter Sobot Date: Sat, 16 May 2026 10:46:02 -0700 Subject: [PATCH 2/5] Only bother testing package import during wheel build. --- .github/workflows/all.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/all.yml b/.github/workflows/all.yml index cfd0b04e..4b1eb026 100644 --- a/.github/workflows/all.yml +++ b/.github/workflows/all.yml @@ -899,6 +899,8 @@ jobs: run: python -m cibuildwheel --output-dir wheelhouse env: CIBW_BUILD: ${{ matrix.build }} + CIBW_TEST_COMMAND: "python -c \"import pedalboard; print(pedalboard.__version__)\"" + CIBW_TEST_REQUIRES: "" # on macOS and with Python 3.10: building NumPy from source fails without these options: CIBW_ENVIRONMENT: NPY_BLAS_ORDER="" NPY_LAPACK_ORDER="" CIBW_BUILD="${{ matrix.build }}" # Use the minimum macOS deployment target supported by our version of PyBind: From 51d47c6d90c95a70a06ac1b57534aec064be85d0 Mon Sep 17 00:00:00 2001 From: Peter Sobot Date: Sat, 16 May 2026 11:04:14 -0700 Subject: [PATCH 3/5] Fix a ton of GH warnings. --- .github/workflows/all.yml | 118 ++++++++++++++++++-------------------- pyproject.toml | 2 +- 2 files changed, 56 insertions(+), 64 deletions(-) diff --git a/.github/workflows/all.yml b/.github/workflows/all.yml index 4b1eb026..b3659c50 100644 --- a/.github/workflows/all.yml +++ b/.github/workflows/all.yml @@ -23,10 +23,10 @@ jobs: name: Lint Python steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install Ruff run: | python -m pip install --upgrade pip @@ -42,10 +42,10 @@ jobs: name: Type-check Python steps: - name: Set up Python 3.12 - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: 3.12 - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install Linux build dependencies @@ -58,7 +58,7 @@ jobs: libxcursor-dev libfreetype6 libfreetype6-dev \ libasound2-dev - name: Install uv - uses: astral-sh/setup-uv@v5 + uses: astral-sh/setup-uv@v7 - name: uv sync run: uv sync --locked --all-extras --dev - name: Check Python type hints @@ -69,7 +69,7 @@ jobs: continue-on-error: true name: Lint C++ steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 # Don't check out submodules, as the action below will look at ALL C++ code! - name: Check C++ Formatting uses: jidicula/clang-format-action@v4.13.0 @@ -95,10 +95,10 @@ jobs: name: Pre-build on ${{ matrix.os }} with ${{ matrix.compiler }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install Linux dependencies @@ -135,7 +135,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: enableCrossOsArchive: true path: | @@ -143,7 +143,9 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.compiler }}-ccache- - name: Build pedalboard locally env: CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -166,15 +168,9 @@ jobs: run: | ccache --show-stats --verbose ccache --zero-stats - # cat ${{ github.workspace }}/.ccache_log || true - # - name: Delete Existing Cache for ${{ runner.os }} Objects - # run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache-objects-restore.outputs.cache-primary-key }} - # env: - # # This token requires the "repo" scope. - # GITHUB_TOKEN: ${{ secrets.ACTION_CLEAR_CACHES_TOKEN }} - name: Save Cached ${{ runner.os }} Objects id: cache-objects-save - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: enableCrossOsArchive: true path: | @@ -182,7 +178,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ steps.cache-objects-restore.outputs.cache-primary-key }} + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} prime-macos-build-caches: runs-on: ${{ matrix.os }} @@ -200,10 +196,10 @@ jobs: name: Pre-build on ${{ matrix.os }} with ${{ matrix.compiler }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install ccache on macOS @@ -220,7 +216,7 @@ jobs: pip install -r test-requirements.txt - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: enableCrossOsArchive: true path: | @@ -228,7 +224,9 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.compiler }}-ccache- - name: Build pedalboard locally env: CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -256,16 +254,9 @@ jobs: run: | ccache --show-stats --verbose ccache --zero-stats - # cat ${{ github.workspace }}/.ccache_log || true - # ls -lashR ${{ github.workspace }} - # - name: Delete Existing Cache for ${{ runner.os }} Objects - # run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache-objects-restore.outputs.cache-primary-key }} - # env: - # # This token requires the "repo" scope. - # GITHUB_TOKEN: ${{ secrets.ACTION_CLEAR_CACHES_TOKEN }} - name: Save Cached ${{ runner.os }} Objects id: cache-objects-save - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: enableCrossOsArchive: true path: | @@ -273,7 +264,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ steps.cache-objects-restore.outputs.cache-primary-key }} + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} # Build the native module with ccache enabled so we can share object files between builds: prime-asan-build-caches: @@ -292,10 +283,10 @@ jobs: name: Pre-build on ${{ matrix.os }} with ${{ matrix.compiler }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install Linux dependencies @@ -332,7 +323,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: enableCrossOsArchive: true path: | @@ -340,7 +331,9 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.compiler }}-ccache- - name: Build pedalboard locally env: CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -363,16 +356,9 @@ jobs: run: | ccache --show-stats --verbose ccache --zero-stats - # cat ${{ github.workspace }}/.ccache_log || true - # ls -lashR ${{ github.workspace }} - # - name: Delete Existing Cache for ${{ runner.os }} Objects - # run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache-objects-restore.outputs.cache-primary-key }} - # env: - # # This token requires the "repo" scope. - # GITHUB_TOKEN: ${{ secrets.ACTION_CLEAR_CACHES_TOKEN }} - name: Save Cached ${{ runner.os }} Objects id: cache-objects-save - uses: actions/cache/save@v4 + uses: actions/cache/save@v5 with: enableCrossOsArchive: true path: | @@ -380,7 +366,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ steps.cache-objects-restore.outputs.cache-primary-key }} + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} # This initial job catches obvious failures faster by running tests in parallel on just Ubuntu. run-tests-in-parallel: @@ -400,10 +386,10 @@ jobs: name: Test ${{ matrix.runner_index }} / ${{ matrix.runner_total }} with Python ${{ matrix.python-version }} on ${{ matrix.os }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install Linux dependencies @@ -437,7 +423,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: enableCrossOsArchive: true path: | @@ -445,7 +431,9 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.compiler }}-ccache- - name: Print Restored ${{ runner.os }} Objects run: ls -lashR ${{ github.workspace }} # Without this, distutils will recompile the extension even though we already have the .so built: @@ -618,10 +606,10 @@ jobs: name: Test with Python ${{ matrix.python-version }} on ${{ matrix.os }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install Linux dependencies @@ -670,7 +658,7 @@ jobs: args: install jq - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: enableCrossOsArchive: true path: | @@ -678,7 +666,9 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-${{ matrix.compiler }}-ccache- # Without this, distutils will recompile the extension even though we already have the shared object built: - name: Touch Restored ${{ runner.os }} Objects to Prevent Cache Miss if: runner.os == 'Linux' || runner.os == 'macOS' @@ -755,10 +745,10 @@ jobs: name: Test with Python ${{ matrix.python-version }} + Address Sanitizer steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v5 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive - name: Install Linux dependencies @@ -788,7 +778,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v4 + uses: actions/cache/restore@v5 with: enableCrossOsArchive: true path: | @@ -796,7 +786,9 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-clang-ccache + key: ${{ matrix.os }}-clang-ccache-${{ github.sha }} + restore-keys: | + ${{ matrix.os }}-clang-ccache- - name: Build pedalboard locally env: DEBUG: "0" @@ -886,11 +878,11 @@ jobs: - { os: "ubuntu-24.04-arm", build: cp314t-manylinux_aarch64 } name: Build wheel for ${{ matrix.build }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: submodules: recursive # Used to host cibuildwheel, so version doesn't really matter - - uses: actions/setup-python@v5 + - uses: actions/setup-python@v6 with: python-version: "3.13" - name: Install cibuildwheel @@ -901,10 +893,10 @@ jobs: CIBW_BUILD: ${{ matrix.build }} CIBW_TEST_COMMAND: "python -c \"import pedalboard; print(pedalboard.__version__)\"" CIBW_TEST_REQUIRES: "" + CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" # on macOS and with Python 3.10: building NumPy from source fails without these options: CIBW_ENVIRONMENT: NPY_BLAS_ORDER="" NPY_LAPACK_ORDER="" CIBW_BUILD="${{ matrix.build }}" - # Use the minimum macOS deployment target supported by our version of PyBind: - MACOSX_DEPLOYMENT_TARGET: "10.14" + MACOSX_DEPLOYMENT_TARGET: "11.0" - name: Ensure wheels have required files if: runner.os != 'Windows' run: | @@ -915,7 +907,7 @@ jobs: # Check that the wheel has py.typed in it: unzip -l "$wheel" | grep 'pedalboard_native/py.typed' done - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: wheel-${{ matrix.build }} path: ./wheelhouse/*.whl @@ -925,7 +917,7 @@ jobs: needs: build-wheels steps: - name: Merge Artifacts - uses: actions/upload-artifact/merge@v4 + uses: actions/upload-artifact/merge@v6 with: name: wheels pattern: wheel-* @@ -936,7 +928,7 @@ jobs: name: "Upload wheels to PyPI" if: github.event_name == 'release' && github.event.action == 'published' steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: name: wheels path: dist diff --git a/pyproject.toml b/pyproject.toml index 9ffc49aa..738b9be6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["scikit-build-core>=0.5.0", "pybind11>=2.9.0"] build-backend = "scikit_build_core.build" [tool.cibuildwheel] -enable = ["cpython-freethreading"] +enable = [] test-requires = ["-r test-requirements.txt"] test-command = "pytest {project}/tests" # The manylinux container doesn't have a new enough glibc version, From 847350a8b91ff1dfd774bf7a9bfb1b1d126549cd Mon Sep 17 00:00:00 2001 From: Peter Sobot Date: Sat, 16 May 2026 12:06:19 -0700 Subject: [PATCH 4/5] Restore freethreading flag despite warning. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 738b9be6..9ffc49aa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["scikit-build-core>=0.5.0", "pybind11>=2.9.0"] build-backend = "scikit_build_core.build" [tool.cibuildwheel] -enable = [] +enable = ["cpython-freethreading"] test-requires = ["-r test-requirements.txt"] test-command = "pytest {project}/tests" # The manylinux container doesn't have a new enough glibc version, From 02e025d80507fb362ab6503c36101b05e72bdb18 Mon Sep 17 00:00:00 2001 From: Peter Sobot Date: Wed, 20 May 2026 13:10:05 +0200 Subject: [PATCH 5/5] More fixes. --- .github/workflows/all.yml | 118 ++++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 55 deletions(-) diff --git a/.github/workflows/all.yml b/.github/workflows/all.yml index b3659c50..4b1eb026 100644 --- a/.github/workflows/all.yml +++ b/.github/workflows/all.yml @@ -23,10 +23,10 @@ jobs: name: Lint Python steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 - name: Install Ruff run: | python -m pip install --upgrade pip @@ -42,10 +42,10 @@ jobs: name: Type-check Python steps: - name: Set up Python 3.12 - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: 3.12 - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install Linux build dependencies @@ -58,7 +58,7 @@ jobs: libxcursor-dev libfreetype6 libfreetype6-dev \ libasound2-dev - name: Install uv - uses: astral-sh/setup-uv@v7 + uses: astral-sh/setup-uv@v5 - name: uv sync run: uv sync --locked --all-extras --dev - name: Check Python type hints @@ -69,7 +69,7 @@ jobs: continue-on-error: true name: Lint C++ steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 # Don't check out submodules, as the action below will look at ALL C++ code! - name: Check C++ Formatting uses: jidicula/clang-format-action@v4.13.0 @@ -95,10 +95,10 @@ jobs: name: Pre-build on ${{ matrix.os }} with ${{ matrix.compiler }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install Linux dependencies @@ -135,7 +135,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v5 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: | @@ -143,9 +143,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} - restore-keys: | - ${{ matrix.os }}-${{ matrix.compiler }}-ccache- + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache - name: Build pedalboard locally env: CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -168,9 +166,15 @@ jobs: run: | ccache --show-stats --verbose ccache --zero-stats + # cat ${{ github.workspace }}/.ccache_log || true + # - name: Delete Existing Cache for ${{ runner.os }} Objects + # run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache-objects-restore.outputs.cache-primary-key }} + # env: + # # This token requires the "repo" scope. + # GITHUB_TOKEN: ${{ secrets.ACTION_CLEAR_CACHES_TOKEN }} - name: Save Cached ${{ runner.os }} Objects id: cache-objects-save - uses: actions/cache/save@v5 + uses: actions/cache/save@v4 with: enableCrossOsArchive: true path: | @@ -178,7 +182,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + key: ${{ steps.cache-objects-restore.outputs.cache-primary-key }} prime-macos-build-caches: runs-on: ${{ matrix.os }} @@ -196,10 +200,10 @@ jobs: name: Pre-build on ${{ matrix.os }} with ${{ matrix.compiler }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install ccache on macOS @@ -216,7 +220,7 @@ jobs: pip install -r test-requirements.txt - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v5 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: | @@ -224,9 +228,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} - restore-keys: | - ${{ matrix.os }}-${{ matrix.compiler }}-ccache- + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache - name: Build pedalboard locally env: CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -254,9 +256,16 @@ jobs: run: | ccache --show-stats --verbose ccache --zero-stats + # cat ${{ github.workspace }}/.ccache_log || true + # ls -lashR ${{ github.workspace }} + # - name: Delete Existing Cache for ${{ runner.os }} Objects + # run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache-objects-restore.outputs.cache-primary-key }} + # env: + # # This token requires the "repo" scope. + # GITHUB_TOKEN: ${{ secrets.ACTION_CLEAR_CACHES_TOKEN }} - name: Save Cached ${{ runner.os }} Objects id: cache-objects-save - uses: actions/cache/save@v5 + uses: actions/cache/save@v4 with: enableCrossOsArchive: true path: | @@ -264,7 +273,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + key: ${{ steps.cache-objects-restore.outputs.cache-primary-key }} # Build the native module with ccache enabled so we can share object files between builds: prime-asan-build-caches: @@ -283,10 +292,10 @@ jobs: name: Pre-build on ${{ matrix.os }} with ${{ matrix.compiler }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install Linux dependencies @@ -323,7 +332,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v5 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: | @@ -331,9 +340,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} - restore-keys: | - ${{ matrix.os }}-${{ matrix.compiler }}-ccache- + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache - name: Build pedalboard locally env: CCACHE_DIR: ${{ github.workspace }}/.ccache @@ -356,9 +363,16 @@ jobs: run: | ccache --show-stats --verbose ccache --zero-stats + # cat ${{ github.workspace }}/.ccache_log || true + # ls -lashR ${{ github.workspace }} + # - name: Delete Existing Cache for ${{ runner.os }} Objects + # run: gh cache delete --repo ${{ github.repository }} ${{ steps.cache-objects-restore.outputs.cache-primary-key }} + # env: + # # This token requires the "repo" scope. + # GITHUB_TOKEN: ${{ secrets.ACTION_CLEAR_CACHES_TOKEN }} - name: Save Cached ${{ runner.os }} Objects id: cache-objects-save - uses: actions/cache/save@v5 + uses: actions/cache/save@v4 with: enableCrossOsArchive: true path: | @@ -366,7 +380,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} + key: ${{ steps.cache-objects-restore.outputs.cache-primary-key }} # This initial job catches obvious failures faster by running tests in parallel on just Ubuntu. run-tests-in-parallel: @@ -386,10 +400,10 @@ jobs: name: Test ${{ matrix.runner_index }} / ${{ matrix.runner_total }} with Python ${{ matrix.python-version }} on ${{ matrix.os }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install Linux dependencies @@ -423,7 +437,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v5 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: | @@ -431,9 +445,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} - restore-keys: | - ${{ matrix.os }}-${{ matrix.compiler }}-ccache- + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache - name: Print Restored ${{ runner.os }} Objects run: ls -lashR ${{ github.workspace }} # Without this, distutils will recompile the extension even though we already have the .so built: @@ -606,10 +618,10 @@ jobs: name: Test with Python ${{ matrix.python-version }} on ${{ matrix.os }} steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install Linux dependencies @@ -658,7 +670,7 @@ jobs: args: install jq - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v5 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: | @@ -666,9 +678,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache-${{ github.sha }} - restore-keys: | - ${{ matrix.os }}-${{ matrix.compiler }}-ccache- + key: ${{ matrix.os }}-${{ matrix.compiler }}-ccache # Without this, distutils will recompile the extension even though we already have the shared object built: - name: Touch Restored ${{ runner.os }} Objects to Prevent Cache Miss if: runner.os == 'Linux' || runner.os == 'macOS' @@ -745,10 +755,10 @@ jobs: name: Test with Python ${{ matrix.python-version }} + Address Sanitizer steps: - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive - name: Install Linux dependencies @@ -778,7 +788,7 @@ jobs: pip install tensorflow==2.13 || true - name: Restore Cached ${{ runner.os }} Objects id: cache-objects-restore - uses: actions/cache/restore@v5 + uses: actions/cache/restore@v4 with: enableCrossOsArchive: true path: | @@ -786,9 +796,7 @@ jobs: ${{ github.workspace }}/pedalboard/build/lib* ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/pedalboard/juce_overrides ${{ github.workspace }}/pedalboard/build/temp${{ github.workspace }}/pedalboard/vendors - key: ${{ matrix.os }}-clang-ccache-${{ github.sha }} - restore-keys: | - ${{ matrix.os }}-clang-ccache- + key: ${{ matrix.os }}-clang-ccache - name: Build pedalboard locally env: DEBUG: "0" @@ -878,11 +886,11 @@ jobs: - { os: "ubuntu-24.04-arm", build: cp314t-manylinux_aarch64 } name: Build wheel for ${{ matrix.build }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v4 with: submodules: recursive # Used to host cibuildwheel, so version doesn't really matter - - uses: actions/setup-python@v6 + - uses: actions/setup-python@v5 with: python-version: "3.13" - name: Install cibuildwheel @@ -893,10 +901,10 @@ jobs: CIBW_BUILD: ${{ matrix.build }} CIBW_TEST_COMMAND: "python -c \"import pedalboard; print(pedalboard.__version__)\"" CIBW_TEST_REQUIRES: "" - CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" # on macOS and with Python 3.10: building NumPy from source fails without these options: CIBW_ENVIRONMENT: NPY_BLAS_ORDER="" NPY_LAPACK_ORDER="" CIBW_BUILD="${{ matrix.build }}" - MACOSX_DEPLOYMENT_TARGET: "11.0" + # Use the minimum macOS deployment target supported by our version of PyBind: + MACOSX_DEPLOYMENT_TARGET: "10.14" - name: Ensure wheels have required files if: runner.os != 'Windows' run: | @@ -907,7 +915,7 @@ jobs: # Check that the wheel has py.typed in it: unzip -l "$wheel" | grep 'pedalboard_native/py.typed' done - - uses: actions/upload-artifact@v6 + - uses: actions/upload-artifact@v4 with: name: wheel-${{ matrix.build }} path: ./wheelhouse/*.whl @@ -917,7 +925,7 @@ jobs: needs: build-wheels steps: - name: Merge Artifacts - uses: actions/upload-artifact/merge@v6 + uses: actions/upload-artifact/merge@v4 with: name: wheels pattern: wheel-* @@ -928,7 +936,7 @@ jobs: name: "Upload wheels to PyPI" if: github.event_name == 'release' && github.event.action == 'published' steps: - - uses: actions/download-artifact@v7 + - uses: actions/download-artifact@v4 with: name: wheels path: dist