From f70184dca87f6cbc28cc19854632b5f7c3ddc29e Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Wed, 4 Sep 2024 01:11:40 +0200 Subject: [PATCH 01/19] fix: Bump actions/download-artifact from 3 to 4 Signed-off-by: Christopher Arndt --- .github/workflows/push_to_master.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push_to_master.yml b/.github/workflows/push_to_master.yml index 16e2765..8a5da98 100644 --- a/.github/workflows/push_to_master.yml +++ b/.github/workflows/push_to_master.yml @@ -107,7 +107,7 @@ jobs: if: github.ref == 'refs/heads/develop' steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: # unpacks default artifact into dist/ # if `name: artifact` is omitted, the action will create extra parent dir diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dbad247..076da2b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -108,7 +108,7 @@ jobs: runs-on: ubuntu-latest environment: PyPI release steps: - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: # unpacks default artifact into dist/ # if `name: artifact` is omitted, the action will create extra parent dir From 7a7395df540135d4caf4d455c13142e8271d7dea Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Tue, 5 Nov 2024 22:47:53 +0100 Subject: [PATCH 02/19] [ci] Update github actions to v4 Signed-off-by: Christopher Arndt --- .github/workflows/pr_to_master.yml | 12 ++++++------ .github/workflows/push_to_master.yml | 12 ++++++------ .github/workflows/release.yml | 12 ++++++------ 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/pr_to_master.yml b/.github/workflows/pr_to_master.yml index 82bb2f5..97decda 100644 --- a/.github/workflows/pr_to_master.yml +++ b/.github/workflows/pr_to_master.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -28,7 +28,7 @@ jobs: run: pipx run twine check --strict dist/* - name: Upload sdist - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: dist/*.tar.gz @@ -41,7 +41,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -66,7 +66,7 @@ jobs: CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" - name: Upload wheels - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl @@ -78,7 +78,7 @@ jobs: arch: [aarch64] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -96,6 +96,6 @@ jobs: shell: bash - name: Upload wheels - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl diff --git a/.github/workflows/push_to_master.yml b/.github/workflows/push_to_master.yml index 8a5da98..b5fc336 100644 --- a/.github/workflows/push_to_master.yml +++ b/.github/workflows/push_to_master.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -28,7 +28,7 @@ jobs: run: pipx run twine check --strict dist/* - name: Upload sdist - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: dist/*.tar.gz @@ -41,7 +41,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -66,7 +66,7 @@ jobs: CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" - name: Upload wheels - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl @@ -78,7 +78,7 @@ jobs: arch: [aarch64] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -96,7 +96,7 @@ jobs: shell: bash - name: Upload wheels - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 076da2b..e16a69d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -32,7 +32,7 @@ jobs: run: pipx run twine check --strict dist/* - name: Upload sdist - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: dist/*.tar.gz @@ -44,7 +44,7 @@ jobs: os: [ubuntu-latest, windows-latest, macos-latest] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v with: submodules: true @@ -69,7 +69,7 @@ jobs: CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" - name: Upload wheels - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl @@ -81,7 +81,7 @@ jobs: arch: [aarch64] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: true @@ -99,7 +99,7 @@ jobs: shell: bash - name: Upload wheels - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: wheelhouse/*.whl From d8aa945cdd6813abca4e54f6b611618b673c8216 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Wed, 6 Nov 2024 04:01:43 +0100 Subject: [PATCH 03/19] [ci] fix: create distinct artifact for each GH actions workflow step and set compression level to 0 [ci] Update GH actions setup-qemu-action to v3 [ci] Update GH actions pypa/gh-action-pypi-publish to release/v1 Signed-off-by: Christopher Arndt --- .github/workflows/pr_to_master.yml | 8 +++++++- .github/workflows/push_to_master.yml | 14 +++++++++----- .github/workflows/release.yml | 14 +++++++++----- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pr_to_master.yml b/.github/workflows/pr_to_master.yml index 97decda..629ae68 100644 --- a/.github/workflows/pr_to_master.yml +++ b/.github/workflows/pr_to_master.yml @@ -30,7 +30,9 @@ jobs: - name: Upload sdist uses: actions/upload-artifact@v4 with: + name: sdist path: dist/*.tar.gz + compression-level: 0 build_wheels: name: Build wheels on ${{ matrix.os }} @@ -68,7 +70,9 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: + name: bdist-${{ matrix.os }} path: wheelhouse/*.whl + compression-level: 0 build_arch_wheels: name: Build wheels on Linux ${{ matrix.arch }} @@ -82,7 +86,7 @@ jobs: with: submodules: true - - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-qemu-action@v3 with: platforms: all @@ -98,4 +102,6 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: + name: bdist-linux-${{ matrix.arch }} path: wheelhouse/*.whl + compression-level: 0 diff --git a/.github/workflows/push_to_master.yml b/.github/workflows/push_to_master.yml index b5fc336..6651db6 100644 --- a/.github/workflows/push_to_master.yml +++ b/.github/workflows/push_to_master.yml @@ -30,7 +30,9 @@ jobs: - name: Upload sdist uses: actions/upload-artifact@v4 with: + name: sdist path: dist/*.tar.gz + compression-level: 0 build_wheels: name: Build wheels on ${{ matrix.os }} @@ -68,7 +70,9 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: + name: bdist-${{ matrix.os }} path: wheelhouse/*.whl + compression-level: 0 build_arch_wheels: name: Build wheels on Linux ${{ matrix.arch }} @@ -82,7 +86,7 @@ jobs: with: submodules: true - - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-qemu-action@v3 with: platforms: all @@ -98,7 +102,9 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: + name: bdist-linux-${{ matrix.arch }} path: wheelhouse/*.whl + compression-level: 0 upload_pypi: needs: [build_arch_wheels, build_wheels, build_sdist] @@ -109,13 +115,11 @@ jobs: - uses: actions/download-artifact@v4 with: - # unpacks default artifact into dist/ - # if `name: artifact` is omitted, the action will create extra parent dir - name: artifact path: dist + merge-multiple: true - name: Publish distribution to Test PyPI - uses: pypa/gh-action-pypi-publish@v1.8.6 + uses: pypa/gh-action-pypi-publish@release/v1 with: skip_existing: true user: __token__ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e16a69d..d303e6d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -34,7 +34,9 @@ jobs: - name: Upload sdist uses: actions/upload-artifact@v4 with: + name: sdist path: dist/*.tar.gz + compression-level: 0 build_wheels: name: Build wheels on ${{ matrix.os }} @@ -71,7 +73,9 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: + name: bdist-${{ matrix.os }} path: wheelhouse/*.whl + compression-level: 0 build_arch_wheels: name: Build wheels on Linux ${{ matrix.arch }} @@ -85,7 +89,7 @@ jobs: with: submodules: true - - uses: docker/setup-qemu-action@v2 + - uses: docker/setup-qemu-action@v3 with: platforms: all @@ -101,7 +105,9 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: + name: bdist-linux-${{ matrix.arch }} path: wheelhouse/*.whl + compression-level: 0 upload_pypi: needs: [build_arch_wheels, build_wheels, build_sdist] @@ -110,13 +116,11 @@ jobs: steps: - uses: actions/download-artifact@v4 with: - # unpacks default artifact into dist/ - # if `name: artifact` is omitted, the action will create extra parent dir - name: artifact path: dist + merge-multiple: true - name: Publish distribution to PyPI - uses: pypa/gh-action-pypi-publish@v1.8.6 + uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }} From 750f78bef7ad3627f4004bc1140518161df03404 Mon Sep 17 00:00:00 2001 From: s0600204 <2053873+s0600204@users.noreply.github.com> Date: Mon, 10 Feb 2025 16:43:30 +0000 Subject: [PATCH 04/19] Don't add a MSVC-style flag if not using MSVC on windows (#213) This fixes builds on Windows when, for instance, one is using `clang` on top of `MSys2`; and in a more generic way than the pre-existing solution. For expected return values of the `get_argument_syntax()` method, see https://mesonbuild.com/Reference-tables.html#compiler-ids --- rtmidi/meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtmidi/meson.build b/rtmidi/meson.build index f96a95c..42585d2 100644 --- a/rtmidi/meson.build +++ b/rtmidi/meson.build @@ -26,7 +26,7 @@ endif if winmm_support defines += ['-D__WINDOWS_MM__'] - if meson.get_compiler('cpp').get_id() != 'gcc' + if meson.get_compiler('cpp').get_argument_syntax() == 'msvc' defines += ['/EHsc'] endif dependencies += [winmm_dep] From acd3409faef40d9b0fa656eaf5df357d6ab77722 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Wed, 12 Feb 2025 22:48:25 +0100 Subject: [PATCH 05/19] feat: update dev requirements with pip-compile (#215) Signed-off-by: Christopher Arndt --- requirements-dev.txt | 80 ++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index c382aac..e3c7bd6 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,51 +1,51 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.13 # by the following command: # # pip-compile --no-emit-index-url --strip-extras requirements-dev.in # -alabaster==0.7.16 +alabaster==1.0.0 # via sphinx -babel==2.14.0 +babel==2.17.0 # via sphinx -build==1.2.1 +build==1.2.2.post1 # via pip-tools -cachetools==5.3.3 +cachetools==5.5.1 # via tox -certifi==2024.2.2 +certifi==2025.1.31 # via requests chardet==5.2.0 # via tox -charset-normalizer==3.3.2 +charset-normalizer==3.4.1 # via requests -click==8.1.7 +click==8.1.8 # via pip-tools colorama==0.4.6 # via tox -coverage==7.4.4 +coverage==7.6.11 # via -r requirements-dev.in -cython==3.0.10 +cython==3.0.11 # via -r requirements-dev.in -distlib==0.3.8 +distlib==0.3.9 # via virtualenv -docutils==0.20.1 +docutils==0.21.2 # via # myst-parser # sphinx # sphinx-rtd-theme -filelock==3.13.4 +filelock==3.17.0 # via # tox # virtualenv -flake8==7.0.0 +flake8==7.1.1 # via -r requirements-dev.in -idna==3.7 +idna==3.10 # via requests imagesize==1.4.1 # via sphinx iniconfig==2.0.0 # via pytest -jinja2==3.1.3 +jinja2==3.1.5 # via # myst-parser # sphinx @@ -53,17 +53,17 @@ markdown-it-py==3.0.0 # via # mdit-py-plugins # myst-parser -markupsafe==2.1.5 +markupsafe==3.0.2 # via jinja2 mccabe==0.7.0 # via flake8 -mdit-py-plugins==0.4.0 +mdit-py-plugins==0.4.2 # via myst-parser mdurl==0.1.2 # via markdown-it-py -myst-parser==2.0.0 +myst-parser==4.0.0 # via -r requirements-dev.in -packaging==24.0 +packaging==24.2 # via # build # pyproject-api @@ -72,67 +72,67 @@ packaging==24.0 # tox pip-tools==7.4.1 # via -r requirements-dev.in -platformdirs==4.2.0 +platformdirs==4.3.6 # via # tox # virtualenv -pluggy==1.4.0 +pluggy==1.5.0 # via # pytest # tox -pycodestyle==2.11.1 +pycodestyle==2.12.1 # via flake8 pydocstyle==6.3.0 # via -r requirements-dev.in pyflakes==3.2.0 # via flake8 -pygments==2.17.2 +pygments==2.19.1 # via sphinx -pyproject-api==1.6.1 +pyproject-api==1.9.0 # via tox -pyproject-hooks==1.0.0 +pyproject-hooks==1.2.0 # via # build # pip-tools -pytest==8.1.1 +pytest==8.3.4 # via -r requirements-dev.in -pyyaml==6.0.1 +pyyaml==6.0.2 # via myst-parser -requests==2.31.0 +requests==2.32.3 # via sphinx snowballstemmer==2.2.0 # via # pydocstyle # sphinx -sphinx==7.2.6 +sphinx==8.1.3 # via # -r requirements-dev.in # myst-parser # sphinx-rtd-theme # sphinxcontrib-jquery -sphinx-rtd-theme==2.0.0 +sphinx-rtd-theme==3.0.2 # via -r requirements-dev.in -sphinxcontrib-applehelp==1.0.8 +sphinxcontrib-applehelp==2.0.0 # via sphinx -sphinxcontrib-devhelp==1.0.6 +sphinxcontrib-devhelp==2.0.0 # via sphinx -sphinxcontrib-htmlhelp==2.0.5 +sphinxcontrib-htmlhelp==2.1.0 # via sphinx sphinxcontrib-jquery==4.1 # via sphinx-rtd-theme sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-qthelp==1.0.7 +sphinxcontrib-qthelp==2.0.0 # via sphinx -sphinxcontrib-serializinghtml==1.1.10 +sphinxcontrib-serializinghtml==2.0.0 # via sphinx -tox==4.14.2 +tox==4.24.1 # via -r requirements-dev.in -urllib3==2.2.1 +urllib3==2.3.0 # via requests -virtualenv==20.25.1 +virtualenv==20.29.1 # via tox -wheel==0.43.0 +wheel==0.45.1 # via pip-tools # The following packages are considered to be unsafe in a requirements file: From c8826db61c0513d5948ede73ee8fc5dceecc02ba Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 13 Feb 2025 02:21:42 +0100 Subject: [PATCH 06/19] feat: Python 3.13 support and CI builds (#214) - Set minimum required Python version 3.9 in `pyproject.toml`. - Added Python 3.13 to `cibuildwheel` build list in `pyproject.toml` and removed 3.8. - Added Python 3.13 to meta-data classifiers in `pyproject.toml` and removed 3.8. - Added Python 3.13 to `tox.ini` and removed 3.8. - Updated minimum supported Python version mentioned in readme etc. - Updated latest Python version mentioned in windows install docs. - ci: Use GitHub Action Linux arm runners, remove dedicated pipeline for aarch64. - ci: Let cibuildwheel install needed Python versions. Signed-off-by: Christopher Arndt --- .github/workflows/pr_to_master.yml | 45 ++-------------------------- .github/workflows/push_to_master.yml | 45 ++-------------------------- .github/workflows/release.yml | 45 ++-------------------------- INSTALL-windows.md | 6 ++-- README.md | 2 +- pyproject.toml | 13 ++++---- src/_rtmidi.pyx | 2 +- tox.ini | 2 +- 8 files changed, 22 insertions(+), 138 deletions(-) diff --git a/.github/workflows/pr_to_master.yml b/.github/workflows/pr_to_master.yml index 629ae68..a6fbf52 100644 --- a/.github/workflows/pr_to_master.yml +++ b/.github/workflows/pr_to_master.yml @@ -40,7 +40,7 @@ jobs: strategy: fail-fast: true matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest] steps: - uses: actions/checkout@v4 @@ -50,51 +50,12 @@ jobs: - uses: ilammy/msvc-dev-cmd@v1 if: matrix.os == 'windows-latest' - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: | - 3.9 - 3.10 - 3.11 - 3.12 - pypy3.9 - pypy3.10 - - name: Build wheels - uses: pypa/cibuildwheel@v2.16 + uses: pypa/cibuildwheel@v2.22 env: # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: bdist-${{ matrix.os }} - path: wheelhouse/*.whl - compression-level: 0 - - build_arch_wheels: - name: Build wheels on Linux ${{ matrix.arch }} - runs-on: ubuntu-20.04 - strategy: - matrix: - arch: [aarch64] - steps: - - - uses: actions/checkout@v4 - with: - submodules: true - - - uses: docker/setup-qemu-action@v3 - with: - platforms: all - - - name: Build wheels - uses: pypa/cibuildwheel@v2.16 - env: - CIBW_ARCHS: ${{ matrix.arch }} - - name: Verify clean directory run: git diff --exit-code shell: bash @@ -102,6 +63,6 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: bdist-linux-${{ matrix.arch }} + name: bdist-${{ matrix.os }} path: wheelhouse/*.whl compression-level: 0 diff --git a/.github/workflows/push_to_master.yml b/.github/workflows/push_to_master.yml index 6651db6..39131ae 100644 --- a/.github/workflows/push_to_master.yml +++ b/.github/workflows/push_to_master.yml @@ -40,7 +40,7 @@ jobs: strategy: fail-fast: true matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest] steps: - uses: actions/checkout@v4 @@ -50,51 +50,12 @@ jobs: - uses: ilammy/msvc-dev-cmd@v1 if: matrix.os == 'windows-latest' - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: | - 3.9 - 3.10 - 3.11 - 3.12 - pypy3.9 - pypy3.10 - - name: Build wheels - uses: pypa/cibuildwheel@v2.16 + uses: pypa/cibuildwheel@v2.22 env: # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: bdist-${{ matrix.os }} - path: wheelhouse/*.whl - compression-level: 0 - - build_arch_wheels: - name: Build wheels on Linux ${{ matrix.arch }} - runs-on: ubuntu-20.04 - strategy: - matrix: - arch: [aarch64] - steps: - - - uses: actions/checkout@v4 - with: - submodules: true - - - uses: docker/setup-qemu-action@v3 - with: - platforms: all - - - name: Build wheels - uses: pypa/cibuildwheel@v2.16 - env: - CIBW_ARCHS: ${{ matrix.arch }} - - name: Verify clean directory run: git diff --exit-code shell: bash @@ -102,7 +63,7 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: bdist-linux-${{ matrix.arch }} + name: bdist-${{ matrix.os }} path: wheelhouse/*.whl compression-level: 0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d303e6d..7f1dc64 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -43,7 +43,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-latest, windows-latest, macos-latest] + os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest] steps: - uses: actions/checkout@v @@ -53,51 +53,12 @@ jobs: - uses: ilammy/msvc-dev-cmd@v1 if: matrix.os == 'windows-latest' - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: | - 3.9 - 3.10 - 3.11 - 3.12 - pypy3.9 - pypy3.10 - - name: Build wheels - uses: pypa/cibuildwheel@v2.16 + uses: pypa/cibuildwheel@v2.22 env: # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" - - name: Upload wheels - uses: actions/upload-artifact@v4 - with: - name: bdist-${{ matrix.os }} - path: wheelhouse/*.whl - compression-level: 0 - - build_arch_wheels: - name: Build wheels on Linux ${{ matrix.arch }} - runs-on: ubuntu-20.04 - strategy: - matrix: - arch: [aarch64] - steps: - - - uses: actions/checkout@v4 - with: - submodules: true - - - uses: docker/setup-qemu-action@v3 - with: - platforms: all - - - name: Build wheels - uses: pypa/cibuildwheel@v2.16 - env: - CIBW_ARCHS: ${{ matrix.arch }} - - name: Verify clean directory run: git diff --exit-code shell: bash @@ -105,7 +66,7 @@ jobs: - name: Upload wheels uses: actions/upload-artifact@v4 with: - name: bdist-linux-${{ matrix.arch }} + name: bdist-${{ matrix.os }} path: wheelhouse/*.whl compression-level: 0 diff --git a/INSTALL-windows.md b/INSTALL-windows.md index 4debd57..674ca29 100644 --- a/INSTALL-windows.md +++ b/INSTALL-windows.md @@ -1,7 +1,7 @@ # How to install python-rtmidi from source on Windows These instructions should work for installing `python-rtmidi` from source with -Python 3.8+ in the 64-bit or 32-bit versions (you can run the latter on Windows +Python 3.9+ in the 64-bit or 32-bit versions (you can run the latter on Windows 64-bit versions with no problems). Please follow all the steps below in the exact order. @@ -10,8 +10,8 @@ Please follow all the steps below in the exact order. You probably need administrator rights for some or all of the following steps. -1. Install the latest release of Python (3.12 at the time of writing, at least - 3.8+) from to the default +1. Install the latest release of Python (3.13 at the time of writing, at least + 3.9+) from to the default location (e.g. `C:\Python312`). You can install either or both the 32-bit and the 64-bit version. diff --git a/README.md b/README.md index 7460de9..504e731 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Windows (MultiMedia System) operating systems. provides a thin wrapper around the RtMidi C++ interface. The API is basically the same as the C++ one but with the naming scheme of classes, methods and parameters adapted to the Python PEP-8 conventions and requirements of the -Python package naming structure. **python-rtmidi** supports Python 3 (3.8+). +Python package naming structure. **python-rtmidi** supports Python 3 (3.9+). The [documentation] provides installation instructions, a history of changes per release and an API reference. diff --git a/pyproject.toml b/pyproject.toml index e28c53f..187145b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,11 +28,11 @@ classifiers = [ "Operating System :: MacOS :: MacOS X", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Topic :: Multimedia :: Sound/Audio :: MIDI", "Topic :: Software Development :: Libraries :: Python Modules", ] @@ -63,11 +63,11 @@ file = "LICENSE.md" [tool.black] line-length = 99 target-version = [ - "py38", "py39", "py310", "py311", "py312", + "py313", ] [tool.isort] @@ -96,10 +96,11 @@ manylinux-aarch64-image = "manylinux_2_28" test-requires = "pytest" test-command = "pytest -v -m ci {package}/tests" -# Install system library [tool.cibuildwheel.linux] -build = ["cp3{9,10,11,12}-manylinux*", "pp3{9,10}-manylinux*"] +build = ["cp3{9,10,11,12,13}-manylinux*", "pp3{9,10,11}-manylinux*"] archs = ["auto64"] +enable = ["pypy"] +# Install system libraries before-all = [ "dnf -y install alsa-lib-devel alsa-utils", "curl -o jack2-1.9.22.tar.gz https://codeload.github.com/jackaudio/jack2/tar.gz/refs/tags/v1.9.22", @@ -112,9 +113,9 @@ before-all = [ repair-wheel-command = "auditwheel repair --exclude libasound.so.2 --lib-sdir . -w {dest_dir} {wheel}" [tool.cibuildwheel.macos] -build = "cp3{9,10,11,12}-macosx*" +build = "cp3{9,10,11,12,13}-macosx*" archs = ["x86_64", "arm64"] [tool.cibuildwheel.windows] -build = "cp3{9,10,11,12}-win*" +build = "cp3{9,10,11,12,13}-win*" archs = ["AMD64"] diff --git a/src/_rtmidi.pyx b/src/_rtmidi.pyx index 3019ffe..4859807 100644 --- a/src/_rtmidi.pyx +++ b/src/_rtmidi.pyx @@ -19,7 +19,7 @@ and Windows (MultiMedia System) operating systems. provides a thin wrapper around the RtMidi C++ interface. The API is basically the same as the C++ one but with the naming scheme of classes, methods and parameters adapted to the Python PEP-8 conventions and requirements of the -Python package naming structure. **python-rtmidi** supports Python 3 (3.8+). +Python package naming structure. **python-rtmidi** supports Python 3 (3.9+). Usage example diff --git a/tox.ini b/tox.ini index 41a5501..2aec034 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = flake8, py38, py39, py310, py311, py312 +envlist = flake8, py39, py310, py311, py312, py313 skip_missing_interpreters = True isolated_build = True From 5d37cb9df406aed0adf5467327e764e7fc8abe5c Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 13 Feb 2025 02:26:18 +0100 Subject: [PATCH 07/19] ci: fix workflow dependencies (#216) Signed-off-by: Christopher Arndt --- .github/workflows/push_to_master.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push_to_master.yml b/.github/workflows/push_to_master.yml index 39131ae..f7f0115 100644 --- a/.github/workflows/push_to_master.yml +++ b/.github/workflows/push_to_master.yml @@ -68,7 +68,7 @@ jobs: compression-level: 0 upload_pypi: - needs: [build_arch_wheels, build_wheels, build_sdist] + needs: [build_wheels, build_sdist] runs-on: ubuntu-latest environment: PyPI release if: github.ref == 'refs/heads/develop' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7f1dc64..3711903 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -71,7 +71,7 @@ jobs: compression-level: 0 upload_pypi: - needs: [build_arch_wheels, build_wheels, build_sdist] + needs: [build_wheels, build_sdist] runs-on: ubuntu-latest environment: PyPI release steps: From d207fa44de49bb1ae6408c520bb247213d8b94b9 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 19:00:10 +0200 Subject: [PATCH 08/19] fix: flake formatting errors in example scripts Signed-off-by: Christopher Arndt --- examples/advanced/send_all.py | 9 +++++---- examples/joystick/joystick2midi.py | 7 +++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/advanced/send_all.py b/examples/advanced/send_all.py index b6a6d3c..cdd0602 100644 --- a/examples/advanced/send_all.py +++ b/examples/advanced/send_all.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -"""Send all notes and CCs with all possible values an all 16 channels.""" +"""Send all notes and CCs with all possible values on all 16 channels.""" import argparse import logging @@ -60,12 +60,13 @@ for chan in channels: for note in range(128): log.debug( - f"Sending NOTE ON: ch={chan+1:02}, note={note:03}, vel={args.velocity:03}" + f"Sending NOTE ON: ch={chan + 1:02}, note={note:03}, vel={args.velocity:03}" ) midiout.send_message([NOTE_ON | chan, note, args.velocity]) time.sleep(args.delay) log.debug( - f"Sending NOTE OFF: ch={chan+1:02}, note={note:03}, vel={args.off_velocity:03}" + f"Sending NOTE OFF: ch={chan + 1:02}, " + f"note={note:03}, vel={args.off_velocity:03}" ) midiout.send_message([NOTE_OFF | chan, note, args.off_velocity]) time.sleep(args.delay) @@ -73,7 +74,7 @@ for chan in channels: for cc in range(128): for val in range(128): - log.debug(f"Sending CONTROL_CHANGE: ch={chan+1:02}, cc={cc:03}, val={val:03}") + log.debug(f"Sending CONTROL_CHANGE: ch={chan + 1:02}, cc={cc:03}, val={val:03}") midiout.send_message([CONTROL_CHANGE | chan, cc, val]) time.sleep(args.delay) except (EOFError, KeyboardInterrupt): diff --git a/examples/joystick/joystick2midi.py b/examples/joystick/joystick2midi.py index 5f72235..c3a0a00 100644 --- a/examples/joystick/joystick2midi.py +++ b/examples/joystick/joystick2midi.py @@ -75,9 +75,9 @@ def update(self, value, threshold): while not done: # Possible joystick actions: JOYAXISMOTION, JOYBALLMOTION, JOYBUTTONDOWN, # JOYBUTTONUP, JOYHATMOTION - for event in pygame.event.get(): # User did something. - if event.type == pygame.QUIT: # If user clicked close. - done = True # Flag that we are done so we exit this loop. + for event in pygame.event.get(): # User did something. + if event.type == pygame.QUIT: # If user clicked close. + done = True # Flag that we are done so we exit this loop. elif event.type == pygame.JOYBUTTONUP: print("Joystick button {} released.".format(event.button)) if event.button == 2: # 'X' button @@ -104,7 +104,6 @@ def update(self, value, threshold): print("SEND: {!r}".format(msg)) midiout.send_message(msg) - # Limit poll rate to UPDATES_PER_SECOND. clock.tick(UPDATES_PER_SECOND) except KeyboardInterrupt: From e81ec0bea542ea67c043a0020273765d87b3f7e2 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 17:22:05 +0200 Subject: [PATCH 09/19] fix: update rtmidi sub-module's python-rtmidi branch to be based on latest HEAD of master branch Signed-off-by: Christopher Arndt --- src/rtmidi | 2 +- tests/test_basic.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rtmidi b/src/rtmidi index f6ea40d..8cae607 160000 --- a/src/rtmidi +++ b/src/rtmidi @@ -1 +1 @@ -Subproject commit f6ea40d406affaed540d16c54372a0230a84f22b +Subproject commit 8cae607d5e9a04f888e5f78699d6a1bbae26688a diff --git a/tests/test_basic.py b/tests/test_basic.py index 6036084..b971646 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -53,7 +53,7 @@ def test_get_compiled_api_by_name(self): def test_get_rtmidi_version(self): version = rtmidi.get_rtmidi_version() self.assertTrue(isinstance(version, str)) - self.assertEqual(version, '5.0.0') + self.assertEqual(version, '6.0.0') def test_nondummy_api_present(self): # Make sure at least one actual API has been compiled From 8109c6e8faf7da9c15ce4ba062e7cc5aaeea8f66 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 18:30:53 +0200 Subject: [PATCH 10/19] feat: add set_buffer_size method to MidiIn class Signed-off-by: Christopher Arndt --- src/_rtmidi.pyx | 15 +++++++-------- tests/test_rtmidi.py | 4 ++++ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/_rtmidi.pyx b/src/_rtmidi.pyx index 4859807..00c9e5c 100644 --- a/src/_rtmidi.pyx +++ b/src/_rtmidi.pyx @@ -194,6 +194,7 @@ cdef extern from "RtMidi.h": double getMessage(vector[unsigned char] *message) except * void ignoreTypes(bool midiSysex, bool midiTime, bool midiSense) except * void setCallback(RtMidiCallback callback, void *data) except * + void setBufferSize(unsigned int size, unsigned int count) except * cdef cppclass RtMidiOut(RtMidi): Api RtMidiOut(Api rtapi, string clientName) except + @@ -923,14 +924,8 @@ cdef class MidiIn(MidiBase): buffer overflows. **Windows note:** the Windows Multi Media API uses fixed size buffers - for the reception of sysex messages, whose number and size is set at - compile time. Sysex messages longer than the buffer size can not be - received properly when using the Windows Multi Media API. - - The default distribution of python-rtmidi sets the number of sysex - buffers to four and the size of each to 8192 bytes. To change these - values, edit the ``RT_SYSEX_BUFFER_COUNT`` and ``RT_SYSEX_BUFFER_SIZE`` - preprocessor defines in ``RtMidi.cpp`` and recompile. + for the reception of sysex messages. You can change the number and + size of the buffers with the ``set_buffer_size`` method. """ self.thisptr.ignoreTypes(sysex, timing, active_sense) @@ -960,6 +955,10 @@ cdef class MidiIn(MidiBase): self._callback = (func, data) self.thisptr.setCallback(&_cb_func, self._callback) + def set_buffer_size(self, size, count): + """Set the size and number of MIDI input buffers.""" + self.thisptr.setBufferSize(size, count) + cdef class MidiOut(MidiBase): """Midi output client interface. diff --git a/tests/test_rtmidi.py b/tests/test_rtmidi.py index 6627360..5f32acb 100644 --- a/tests/test_rtmidi.py +++ b/tests/test_rtmidi.py @@ -120,6 +120,10 @@ def callback(event, data): time.sleep(self.DELAY) self.assertEqual(messages, []) + def test_set_buffer_size(self): + self.midi_in.set_buffer_size(1024, 4) + self.test_callback() + def set_up_loopback(self): # TODO: find better solution than this hack-ish strategy to find out # the port number of the virtual output port, which we have to use, From b3f52a1a64e72943f6fe409fdf2e6d999b47ab94 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 17:25:14 +0200 Subject: [PATCH 11/19] Bump version to 1.6.0 Signed-off-by: Christopher Arndt --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index d748e2f..89a7794 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ project( 'python-rtmidi', 'cpp', - version: '1.5.8', + version: '1.6.0', license: 'MIT', default_options: [ 'warning_level=2', From 7b2b85afe077a0e8b89f7ae8394a30adfb2868fe Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 17:54:24 +0200 Subject: [PATCH 12/19] docs: updated changelog and authors file Signed-off-by: Christopher Arndt --- AUTHORS.md | 1 + CHANGELOG.md | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/AUTHORS.md b/AUTHORS.md index 9e38a1d..1e5cd9f 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -19,6 +19,7 @@ - Benoit Pierre - Bruno Enten - Marek Szuba +- s0600204 (GitHub user) ## Testing diff --git a/CHANGELOG.md b/CHANGELOG.md index d18fe7e..581bb30 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,31 @@ For details and minor changes, please see the [version control log messages](https://github.com/SpotlightKid/python-rtmidi/commits/master). +## 1.6.0 (2025-04-18) + +Project infrastructure: + +- Support Python 3.13, drop support for Python 3.8 (#214): +- Set minimum required Python version 3.9 in `pyproject.toml`. +- Added Python 3.13 to CI builds and removed 3.8. +- Added Python 3.13 to classifiers in `pyproject.toml` and removed 3.8. +- Added Python 3.13 to `tox.ini` and removed 3.8. +- Updated minimum supported Python version mentioned in readme etc. +- Updated latest Python version mentioned in Windows install docs. +- Fixed compiler config in meson.build for alternative compilers on + Windows (#213, thanks @s0600204. +- Updated dev requirements with `pip-tools` (#215). + +Changes: + +- Update rtmidi sub-module's `python-rtmidi` branch to be based on latest + HEAD of `master` branch. + +Fixes / Features: + +- Add `set_buffer_size` method to `MidiIn` class (#204). + + ## 1.5.8 (2023-11-20) Fixes: From e2be5b180f43e89e35adad7b301b07f21896586a Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 19:12:56 +0200 Subject: [PATCH 13/19] fix: bump Jinja version in dev requirements Signed-off-by: Christopher Arndt --- requirements-dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index e3c7bd6..cb51153 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -45,7 +45,7 @@ imagesize==1.4.1 # via sphinx iniconfig==2.0.0 # via pytest -jinja2==3.1.5 +jinja2==3.1.6 # via # myst-parser # sphinx From 0077cf64ecdc7a15c7fb4ea9cfe091e0b442faf9 Mon Sep 17 00:00:00 2001 From: Christopher Arndt Date: Thu, 17 Apr 2025 19:18:10 +0200 Subject: [PATCH 14/19] docs: more changelog updates Signed-off-by: Christopher Arndt --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 581bb30..557a227 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,17 +16,17 @@ Project infrastructure: - Updated minimum supported Python version mentioned in readme etc. - Updated latest Python version mentioned in Windows install docs. - Fixed compiler config in meson.build for alternative compilers on - Windows (#213, thanks @s0600204. + Windows (#213, thanks @s0600204). - Updated dev requirements with `pip-tools` (#215). Changes: - Update rtmidi sub-module's `python-rtmidi` branch to be based on latest - HEAD of `master` branch. + HEAD of `master` branch (fixes #204). Fixes / Features: -- Add `set_buffer_size` method to `MidiIn` class (#204). +- Add `set_buffer_size` method to `MidiIn` class (fixes #200). ## 1.5.8 (2023-11-20) From e3a71480a1965a313f697b528196f27bb6da13e9 Mon Sep 17 00:00:00 2001 From: Eric Conlon <37287+ejconlon@users.noreply.github.com> Date: Thu, 21 Aug 2025 04:24:26 -0700 Subject: [PATCH 15/19] Fix framework casing in apple meson build (#222) --- meson.build | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meson.build b/meson.build index 89a7794..f1efb3c 100644 --- a/meson.build +++ b/meson.build @@ -55,7 +55,7 @@ elif host_machine.system().to_lower() == 'darwin' # API coremidi_dep = dependency( 'appleframeworks', - modules: ['coreaudio', 'coremidi', 'foundation'], + modules: ['CoreAudio', 'CoreMIDI', 'Foundation'], required: jack_not_found ) alsa_dep = disabler() From 6a21d0e124145da396e5c3b2d86cb9ad85cd1176 Mon Sep 17 00:00:00 2001 From: ralphtheninja Date: Fri, 12 Sep 2025 06:53:00 +0200 Subject: [PATCH 16/19] Fix output string typo (#223) --- rtmidi/midiutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rtmidi/midiutil.py b/rtmidi/midiutil.py index ccb03f4..b695efd 100644 --- a/rtmidi/midiutil.py +++ b/rtmidi/midiutil.py @@ -70,7 +70,7 @@ def list_available_ports(ports=None, midiio=None): """List MIDI ports given or available on given MIDI I/O instance.""" if ports is None: ports = midiio.get_ports() - type_ = " input" if isinstance(midiio, rtmidi.MidiIn) else " ouput" + type_ = " input" if isinstance(midiio, rtmidi.MidiIn) else " output" else: type_ = '' From 2640bda101aaaf96c7af1e607e8cc0b9837e24bf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Jan 2026 05:36:43 +0100 Subject: [PATCH 17/19] build(deps): bump wheel from 0.45.1 to 0.46.2 (#225) Bumps [wheel](https://github.com/pypa/wheel) from 0.45.1 to 0.46.2. - [Release notes](https://github.com/pypa/wheel/releases) - [Changelog](https://github.com/pypa/wheel/blob/main/docs/news.rst) - [Commits](https://github.com/pypa/wheel/compare/0.45.1...0.46.2) --- updated-dependencies: - dependency-name: wheel dependency-version: 0.46.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- requirements-dev.txt | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/requirements-dev.txt b/requirements-dev.txt index cb51153..9966b55 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,7 +4,7 @@ # # pip-compile --no-emit-index-url --strip-extras requirements-dev.in # -alabaster==1.0.0 +alabaster==0.7.16 # via sphinx babel==2.17.0 # via sphinx @@ -33,6 +33,8 @@ docutils==0.21.2 # myst-parser # sphinx # sphinx-rtd-theme +exceptiongroup==1.3.1 + # via pytest filelock==3.17.0 # via # tox @@ -43,6 +45,10 @@ idna==3.10 # via requests imagesize==1.4.1 # via sphinx +importlib-metadata==8.7.1 + # via + # build + # sphinx iniconfig==2.0.0 # via pytest jinja2==3.1.6 @@ -61,7 +67,7 @@ mdit-py-plugins==0.4.2 # via myst-parser mdurl==0.1.2 # via markdown-it-py -myst-parser==4.0.0 +myst-parser==3.0.1 # via -r requirements-dev.in packaging==24.2 # via @@ -70,6 +76,7 @@ packaging==24.2 # pytest # sphinx # tox + # wheel pip-tools==7.4.1 # via -r requirements-dev.in platformdirs==4.3.6 @@ -104,7 +111,7 @@ snowballstemmer==2.2.0 # via # pydocstyle # sphinx -sphinx==8.1.3 +sphinx==7.4.7 # via # -r requirements-dev.in # myst-parser @@ -126,14 +133,29 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx +tomli==2.4.0 + # via + # build + # pip-tools + # pyproject-api + # pytest + # sphinx + # tox tox==4.24.1 # via -r requirements-dev.in +typing-extensions==4.15.0 + # via + # exceptiongroup + # myst-parser + # tox urllib3==2.3.0 # via requests virtualenv==20.29.1 # via tox -wheel==0.45.1 +wheel==0.46.2 # via pip-tools +zipp==3.23.0 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: # pip From 83978a26303e1febe72a2aaba383919a6e907a18 Mon Sep 17 00:00:00 2001 From: Charles Martin Date: Sat, 26 Sep 2026 16:07:24 +1000 Subject: [PATCH 18/19] ci: build Python 3.14 wheels Add cp314 to the cibuildwheel build patterns and a 3.14 classifier, and update cibuildwheel from v2.22 to v4.2.1 (v2.22 predates 3.14 support). PyPy 3.9 and 3.10 are now behind cibuildwheel's pypy-eol flag, so enable it to keep building those wheels. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/pr_to_master.yml | 2 +- .github/workflows/push_to_master.yml | 2 +- .github/workflows/release.yml | 2 +- pyproject.toml | 9 +++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pr_to_master.yml b/.github/workflows/pr_to_master.yml index a6fbf52..377fff3 100644 --- a/.github/workflows/pr_to_master.yml +++ b/.github/workflows/pr_to_master.yml @@ -51,7 +51,7 @@ jobs: if: matrix.os == 'windows-latest' - name: Build wheels - uses: pypa/cibuildwheel@v2.22 + uses: pypa/cibuildwheel@v4.2.1 env: # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" diff --git a/.github/workflows/push_to_master.yml b/.github/workflows/push_to_master.yml index f7f0115..dd71041 100644 --- a/.github/workflows/push_to_master.yml +++ b/.github/workflows/push_to_master.yml @@ -51,7 +51,7 @@ jobs: if: matrix.os == 'windows-latest' - name: Build wheels - uses: pypa/cibuildwheel@v2.22 + uses: pypa/cibuildwheel@v4.2.1 env: # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3711903..d04ca97 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -54,7 +54,7 @@ jobs: if: matrix.os == 'windows-latest' - name: Build wheels - uses: pypa/cibuildwheel@v2.22 + uses: pypa/cibuildwheel@v4.2.1 env: # Skip trying to test arm64 builds on Intel Macs CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" diff --git a/pyproject.toml b/pyproject.toml index 187145b..339a767 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,6 +33,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Topic :: Multimedia :: Sound/Audio :: MIDI", "Topic :: Software Development :: Libraries :: Python Modules", ] @@ -97,9 +98,9 @@ test-requires = "pytest" test-command = "pytest -v -m ci {package}/tests" [tool.cibuildwheel.linux] -build = ["cp3{9,10,11,12,13}-manylinux*", "pp3{9,10,11}-manylinux*"] +build = ["cp3{9,10,11,12,13,14}-manylinux*", "pp3{9,10,11}-manylinux*"] archs = ["auto64"] -enable = ["pypy"] +enable = ["pypy", "pypy-eol"] # Install system libraries before-all = [ "dnf -y install alsa-lib-devel alsa-utils", @@ -113,9 +114,9 @@ before-all = [ repair-wheel-command = "auditwheel repair --exclude libasound.so.2 --lib-sdir . -w {dest_dir} {wheel}" [tool.cibuildwheel.macos] -build = "cp3{9,10,11,12,13}-macosx*" +build = "cp3{9,10,11,12,13,14}-macosx*" archs = ["x86_64", "arm64"] [tool.cibuildwheel.windows] -build = "cp3{9,10,11,12,13}-win*" +build = "cp3{9,10,11,12,13,14}-win*" archs = ["AMD64"] From a8c80d00a25338c68cad827a199071ba3cfa53f6 Mon Sep 17 00:00:00 2001 From: iDoMeteor <11758268+iDoMeteor@users.noreply.github.com> Date: Mon, 5 Oct 2026 10:25:26 -0400 Subject: [PATCH 19/19] ci: build Python 3.15 wheels Add cp315 to the cibuildwheel build patterns on Linux, macOS and Windows, a 3.15 classifier, and py314/py315 to the tox envlist (py314 was missing from the list). cibuildwheel >= 4.2.0 builds CPython 3.15 by default (no "cpython-prerelease" opt-in needed), and the release candidates have a frozen ABI, so the wheels remain valid for the final 3.15.0. Co-Authored-By: Claude --- pyproject.toml | 7 ++++--- tox.ini | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 339a767..88dcde0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Multimedia :: Sound/Audio :: MIDI", "Topic :: Software Development :: Libraries :: Python Modules", ] @@ -98,7 +99,7 @@ test-requires = "pytest" test-command = "pytest -v -m ci {package}/tests" [tool.cibuildwheel.linux] -build = ["cp3{9,10,11,12,13,14}-manylinux*", "pp3{9,10,11}-manylinux*"] +build = ["cp3{9,10,11,12,13,14,15}-manylinux*", "pp3{9,10,11}-manylinux*"] archs = ["auto64"] enable = ["pypy", "pypy-eol"] # Install system libraries @@ -114,9 +115,9 @@ before-all = [ repair-wheel-command = "auditwheel repair --exclude libasound.so.2 --lib-sdir . -w {dest_dir} {wheel}" [tool.cibuildwheel.macos] -build = "cp3{9,10,11,12,13,14}-macosx*" +build = "cp3{9,10,11,12,13,14,15}-macosx*" archs = ["x86_64", "arm64"] [tool.cibuildwheel.windows] -build = "cp3{9,10,11,12,13,14}-win*" +build = "cp3{9,10,11,12,13,14,15}-win*" archs = ["AMD64"] diff --git a/tox.ini b/tox.ini index 2aec034..f62856e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = flake8, py39, py310, py311, py312, py313 +envlist = flake8, py39, py310, py311, py312, py313, py314, py315 skip_missing_interpreters = True isolated_build = True