From 38639582e8e60dd51490cb10f74dbe6f030e51ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Sun, 23 Aug 2026 16:07:05 +0100 Subject: [PATCH 1/5] Update cibuildwheel to a version compatible with python 3.15 --- .github/workflows/ci.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 657ad6f47..e456c537e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -135,7 +135,7 @@ jobs: run: ${GITHUB_WORKSPACE}/.github/wheel-helpers/fetch-latest-buildbox-release.sh - name: Build wheels - run: pipx run cibuildwheel==v3.1.4 + run: pipx run cibuildwheel~=4.0 - uses: actions/upload-artifact@v7 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b3be858c7..cf9caa9b2 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -72,7 +72,7 @@ jobs: run: ${GITHUB_WORKSPACE}/.github/wheel-helpers/fetch-latest-buildbox-release.sh - name: Build wheels - run: pipx run cibuildwheel==v3.1.4 + run: pipx run cibuildwheel~=4.0 - uses: actions/upload-artifact@v7 with: From 34a935c84ac43f76afd2f5e59baecd8258516d9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Sun, 23 Aug 2026 16:27:35 +0100 Subject: [PATCH 2/5] Update coverage python package to a version compatible with python 3.15 --- requirements/cov-requirements.in | 2 +- requirements/cov-requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements/cov-requirements.in b/requirements/cov-requirements.in index 65bd5dab8..1cec99bbe 100644 --- a/requirements/cov-requirements.in +++ b/requirements/cov-requirements.in @@ -1,4 +1,4 @@ -coverage >= 6 +coverage >= 7.15 pytest-cov >= 2.5.0 pytest >= 6.0.1 Cython diff --git a/requirements/cov-requirements.txt b/requirements/cov-requirements.txt index 285f5c068..a8f44bbaf 100644 --- a/requirements/cov-requirements.txt +++ b/requirements/cov-requirements.txt @@ -1,4 +1,4 @@ -coverage==7.13.5 +coverage==7.15.4 pytest-cov==7.1.0 pytest==9.0.3 Cython==3.2.4 From 9a93571b9bac310d0e809b00ecc7a79ed2f7c974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrg=20Billeter?= Date: Fri, 11 Sep 2026 18:38:10 +0200 Subject: [PATCH 3/5] tox.ini: Update black to version 26.5 This is required for compatibility with Python 3.15. --- tox.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tox.ini b/tox.ini index 172b659d3..74474c677 100644 --- a/tox.ini +++ b/tox.ini @@ -140,7 +140,7 @@ setenv = [testenv:format] skip_install = True deps = - black~=26.3.0 + black~=26.5.0 commands = black {posargs: src tests doc/source/conf.py setup.py} @@ -150,7 +150,7 @@ commands = [testenv:format-check] skip_install = True deps = - black~=26.3.0 + black~=26.5.0 commands = black --check --diff {posargs: src tests doc/source/conf.py setup.py} From c4812e3c77c263c4158759930fe90a9512fa0e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Sun, 23 Aug 2026 15:32:41 +0100 Subject: [PATCH 4/5] Add support for Python 3.15 --- .github/common.env | 4 +-- .github/compose/ci.docker-compose.yml | 5 ++++ .github/workflows/ci.yml | 1 + .github/workflows/release.yml | 1 + pyproject.toml | 3 +- tox.ini | 40 +++++++++++++-------------- 6 files changed, 31 insertions(+), 23 deletions(-) diff --git a/.github/common.env b/.github/common.env index 11ff253f6..961bd56f8 100644 --- a/.github/common.env +++ b/.github/common.env @@ -1,6 +1,6 @@ # Shared common variables CI_IMAGE_VERSION=master-2779642792 -CI_TOXENV_MAIN=py310,py311,py312,py313,py314 -CI_TOXENV_PLUGINS=py310-plugins,py311-plugins,py312-plugins,py313-plugins,py314-plugins +CI_TOXENV_MAIN=py310,py311,py312,py313,py314,py315 +CI_TOXENV_PLUGINS=py310-plugins,py311-plugins,py312-plugins,py313-plugins,py314-plugins,py315-plugins CI_TOXENV_ALL="${CI_TOXENV_MAIN},${CI_TOXENV_PLUGINS}" diff --git a/.github/compose/ci.docker-compose.yml b/.github/compose/ci.docker-compose.yml index 5dd7ac1d9..444806479 100644 --- a/.github/compose/ci.docker-compose.yml +++ b/.github/compose/ci.docker-compose.yml @@ -116,3 +116,8 @@ services: <<: *tests-template image: quay.io/pypa/manylinux_2_28_x86_64 command: .github/wheel-helpers/test-wheel-manylinux.sh cp314-cp314 /opt/python/cp314-cp314/bin/python3 + + wheels-manylinux_2_28-cp315: + <<: *tests-template + image: quay.io/pypa/manylinux_2_28_x86_64 + command: .github/wheel-helpers/test-wheel-manylinux.sh cp315-cp315 /opt/python/cp315-cp315/bin/python3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e456c537e..2ec52d6ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -157,6 +157,7 @@ jobs: - wheels-manylinux_2_28-cp312 - wheels-manylinux_2_28-cp313 - wheels-manylinux_2_28-cp314 + - wheels-manylinux_2_28-cp315 steps: - uses: actions/checkout@v7 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cf9caa9b2..e12fbb047 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -94,6 +94,7 @@ jobs: - wheels-manylinux_2_28-cp312 - wheels-manylinux_2_28-cp313 - wheels-manylinux_2_28-cp314 + - wheels-manylinux_2_28-cp315 steps: - uses: actions/checkout@v7 diff --git a/pyproject.toml b/pyproject.toml index 6ea1ad2b9..765e4a8c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -43,6 +43,7 @@ classifiers = [ "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", + "Programming Language :: Python :: 3.15", "Topic :: Software Development :: Build Tools", ] @@ -57,7 +58,7 @@ Tracker = "https://github.com/apache/buildstream/issues" bst = "buildstream._frontend:cli" [tool.black] -target-version = ["py310", "py311", "py312", "py313", "py314"] +target-version = ["py310", "py311", "py312", "py313", "py314", "py315"] line-length = 119 exclude = ''' ( diff --git a/tox.ini b/tox.ini index 74474c677..e820dec31 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ # Tox global configuration # [tox] -envlist = py{310,311,312,313,314} +envlist = py{310,311,312,313,314,315} skip_missing_interpreters = true isolated_build = true @@ -33,30 +33,30 @@ BST_PLUGINS_VERSION = 79649529cffb695d0d22195ed9a4910c80ca6907 # 2.5.0 [testenv] usedevelop = # This is required by Cython in order to get coverage for cython files. - py{310,311,312,313,314}-!nocover: True + py{310,311,312,313,314,315}-!nocover: True commands = # Running with coverage reporting enabled - py{310,311,312,313,314}-!plugins-!nocover: pytest --basetemp {envtmpdir} --cov=buildstream --cov-config .coveragerc {posargs} + py{310,311,312,313,314,315}-!plugins-!nocover: pytest --basetemp {envtmpdir} --cov=buildstream --cov-config .coveragerc {posargs} # Running with coverage reporting disabled - py{310,311,312,313,314}-!plugins-nocover: pytest --basetemp {envtmpdir} {posargs} + py{310,311,312,313,314,315}-!plugins-nocover: pytest --basetemp {envtmpdir} {posargs} # Running external plugins tests with coverage reporting enabled - py{310,311,312,313,314}-plugins-!nocover: pytest --basetemp {envtmpdir} --cov=buildstream --cov-config .coveragerc --plugins {posargs} + py{310,311,312,313,314,315}-plugins-!nocover: pytest --basetemp {envtmpdir} --cov=buildstream --cov-config .coveragerc --plugins {posargs} # Running external plugins tests with coverage disabled - py{310,311,312,313,314}-plugins-nocover: pytest --basetemp {envtmpdir} --plugins {posargs} + py{310,311,312,313,314,315}-plugins-nocover: pytest --basetemp {envtmpdir} --plugins {posargs} commands_post: - py{310,311,312,313,314}-!nocover: mkdir -p .coverage-reports - py{310,311,312,313,314}-!nocover: mv {envtmpdir}/.coverage {toxinidir}/.coverage-reports/.coverage.{env:COVERAGE_PREFIX:}{envname} + py{310,311,312,313,314,315}-!nocover: mkdir -p .coverage-reports + py{310,311,312,313,314,315}-!nocover: mv {envtmpdir}/.coverage {toxinidir}/.coverage-reports/.coverage.{env:COVERAGE_PREFIX:}{envname} deps = - py{310,311,312,313,314}: -rrequirements/requirements.txt - py{310,311,312,313,314}: -rrequirements/dev-requirements.txt - py{310,311,312,313,314}: git+https://github.com/apache/buildstream-plugins.git@{env:BST_PLUGINS_VERSION:{[config]BST_PLUGINS_VERSION}} + py{310,311,312,313,314,315}: -rrequirements/requirements.txt + py{310,311,312,313,314,315}: -rrequirements/dev-requirements.txt + py{310,311,312,313,314,315}: git+https://github.com/apache/buildstream-plugins.git@{env:BST_PLUGINS_VERSION:{[config]BST_PLUGINS_VERSION}} # Install local sample plugins for testing pip plugin origins - py{310,311,312,313,314}: {toxinidir}/tests/plugins/sample-plugins + py{310,311,312,313,314,315}: {toxinidir}/tests/plugins/sample-plugins # Install external plugins for plugin tests - py{310,311,312,313,314}-plugins: git+https://gitlab.com/buildstream/buildstream-plugins-community.git@{env:BST_PLUGINS_COMMUNITY_VERSION:{[config]BST_PLUGINS_COMMUNITY_VERSION}}#egg=bst_plugins_community[deb] + py{310,311,312,313,314,315}-plugins: git+https://gitlab.com/buildstream/buildstream-plugins-community.git@{env:BST_PLUGINS_COMMUNITY_VERSION:{[config]BST_PLUGINS_COMMUNITY_VERSION}}#egg=bst_plugins_community[deb] # Only require coverage and pytest-cov when using it !nocover: -rrequirements/cov-requirements.txt @@ -84,18 +84,18 @@ passenv = # These keys are not inherited by any other sections # setenv = - py{310,311,312,313,314}: COVERAGE_FILE = {envtmpdir}/.coverage - py{310,311,312,313,314}: BST_TEST_HOME = {envtmpdir} - py{310,311,312,313,314}: BST_TEST_XDG_CACHE_HOME = {envtmpdir}/cache - py{310,311,312,313,314}: BST_TEST_XDG_CONFIG_HOME = {envtmpdir}/config - py{310,311,312,313,314}: BST_TEST_XDG_DATA_HOME = {envtmpdir}/share + py{310,311,312,313,314,315}: COVERAGE_FILE = {envtmpdir}/.coverage + py{310,311,312,313,314,315}: BST_TEST_HOME = {envtmpdir} + py{310,311,312,313,314,315}: BST_TEST_XDG_CACHE_HOME = {envtmpdir}/cache + py{310,311,312,313,314,315}: BST_TEST_XDG_CONFIG_HOME = {envtmpdir}/config + py{310,311,312,313,314,315}: BST_TEST_XDG_DATA_HOME = {envtmpdir}/share # This is required to get coverage for Cython - py{310,311,312,313,314}-!nocover: BST_CYTHON_TRACE = 1 + py{310,311,312,313,314,315}-!nocover: BST_CYTHON_TRACE = 1 randomized: PYTEST_ADDOPTS="--random-order-bucket=global" allowlist_externals = - py{310,311,312,313,314}: + py{310,311,312,313,314,315}: mv mkdir From bb3c61a4fcedde1a90c4bbcfc09d386b737f8049 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Jard=C3=B3n?= Date: Sun, 23 Aug 2026 15:26:04 +0100 Subject: [PATCH 5/5] ci: Add Fedora 45 job This distro has Python 3.15 by default. --- .github/common.env | 2 +- .github/compose/ci.docker-compose.yml | 4 ++++ .github/run-ci.sh | 2 +- .github/workflows/ci.yml | 1 + 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/common.env b/.github/common.env index 961bd56f8..c9dd2d6eb 100644 --- a/.github/common.env +++ b/.github/common.env @@ -1,6 +1,6 @@ # Shared common variables -CI_IMAGE_VERSION=master-2779642792 +CI_IMAGE_VERSION=master-2783218587 CI_TOXENV_MAIN=py310,py311,py312,py313,py314,py315 CI_TOXENV_PLUGINS=py310-plugins,py311-plugins,py312-plugins,py313-plugins,py314-plugins,py315-plugins CI_TOXENV_ALL="${CI_TOXENV_MAIN},${CI_TOXENV_PLUGINS}" diff --git a/.github/compose/ci.docker-compose.yml b/.github/compose/ci.docker-compose.yml index 444806479..2b594f3ce 100644 --- a/.github/compose/ci.docker-compose.yml +++ b/.github/compose/ci.docker-compose.yml @@ -34,6 +34,10 @@ services: <<: *tests-template image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:44-${CI_IMAGE_VERSION:-latest} + fedora-45: + <<: *tests-template + image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-fedora:45-${CI_IMAGE_VERSION:-latest} + ubuntu-22.04: <<: *tests-template image: registry.gitlab.com/buildstream/buildstream-docker-images/testsuite-ubuntu:22.04-${CI_IMAGE_VERSION:-latest} diff --git a/.github/run-ci.sh b/.github/run-ci.sh index f3690320e..ee6b67049 100755 --- a/.github/run-ci.sh +++ b/.github/run-ci.sh @@ -102,7 +102,7 @@ function runServiceTest() { if [ -z "${test_names}" ]; then - for test_name in mypy debian-12 debian-13 fedora-44 fedora-missing-deps ubuntu-22.04; do + for test_name in mypy debian-12 debian-13 fedora-44 fedora-45 fedora-missing-deps ubuntu-22.04; do if ! runTest "${test_name}"; then echo "Tests failed" exit 1 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ec52d6ce..b6f6b48cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,6 +39,7 @@ jobs: - debian-12 - debian-13 - fedora-44 + - fedora-45 - fedora-missing-deps - ubuntu-22.04 - lint