From c3e9af3901de9a5924fb2135abac11e15ec3a666 Mon Sep 17 00:00:00 2001 From: Arcadiy Ivanov Date: Mon, 24 Aug 2026 18:14:42 -0400 Subject: [PATCH 1/2] Document Python 3.15 support and 0.13.21 vendorized upgrades Adds the 0.13.21 release notes covering Python 3.15 support, the PEP 451 loader fix, the `packaging` 26.3 `Requirement.__slots__` fix, the removal of pre-3.10 compatibility workarounds and the vendorized dependency bumps. Bumps the supported version range on the front page to 3.10 through 3.15. --- articles/_release-notes/v0.13.x.md | 28 ++++++++++++++++++++++++++++ index.html | 4 ++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/articles/_release-notes/v0.13.x.md b/articles/_release-notes/v0.13.x.md index 19158b9..dd8bc92 100644 --- a/articles/_release-notes/v0.13.x.md +++ b/articles/_release-notes/v0.13.x.md @@ -6,6 +6,34 @@ list_title: Versions 0.13.x # Release Notes - Versions 0.13.x +## Version 0.13.21 + +### New Features +* Python 3.15 support + +### Bugs Fixed +* Vendored packages and `coverage` failed to import on Python 3.15, which + removed the legacy `load_module()` fallback from the import machinery. Both + of PyBuilder's meta path loaders now implement the PEP 451 + `create_module()`/`exec_module()` protocol. +* `packaging` 26.3 gave `Requirement` a `__slots__` layout, breaking the + `project_name` attribute PyBuilder attached to dependency requirements. + Requirement names are now read from `Requirement.name`. + +### Removed Features +* Removed compatibility workarounds for Python versions below 3.10 + +### Vendorized Dependency Upgrades +* Bumped vendorized dependencies, notably: + * virtualenv 20.36.1 to 21.7.4, which splits interpreter discovery into a + separate `python-discovery` package and no longer depends on `click` + * importlib-metadata 8.7.1 to 9.0.0 + * packaging 26.0 to 26.3 + * importlib-resources 6.5.2 to 7.1.0 + * rich 14.3.2 to 15.0.0 + * wheel 0.46.3 to 0.48.0 + * setuptools to 84.0.0 + ## Version 0.13.20 ### New Features diff --git a/index.html b/index.html index b9c2d46..ad9639f 100644 --- a/index.html +++ b/index.html @@ -16,10 +16,10 @@

from other famous build tools like Apache Maven and Gradle.

- PyBuilder runs on Python 3.10 to 3.14 and PyPy. + PyBuilder runs on Python 3.10 to 3.15 and PyPy. Every commit is tested via GitHub Actions - on CPython 3.10, 3.11, 3.12, 3.13, 3.14 and PyPy on Linux, MacOS + on CPython 3.10, 3.11, 3.12, 3.13, 3.14, 3.15 and PyPy on Linux, MacOS (with and without Homebrew) and Windows.

From f95bbcd04515359200151fea481e61905a119f14 Mon Sep 17 00:00:00 2001 From: Arcadiy Ivanov Date: Mon, 24 Aug 2026 18:59:57 -0400 Subject: [PATCH 2/2] Ignore openhub.net and coveralls.io in the external link check Cloudflare-style bot protection now answers htmlproofer's requests to both hosts with 403, failing every build regardless of the change under test. Scoped to those two hosts via --ignore-urls rather than adding 403 to --ignore-status-codes, so a genuinely forbidden link anywhere else still fails the build. The patterns require a path separator after the host so that lookalike domains are not silently skipped. --- build.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/build.sh b/build.sh index 5c30881..ca8452d 100755 --- a/build.sh +++ b/build.sh @@ -2,8 +2,12 @@ bundle exec jekyll build +# openhub.net and coveralls.io answer htmlproofer with 403 from bot protection. +# Ignore those two hosts by URL rather than ignoring 403 globally, so a genuinely +# forbidden link anywhere else still fails the build. bundle exec htmlproofer --allow-hash-href \ --ignore-status-codes=429,999,302 \ + --ignore-urls='/^https://www\.openhub\.net//,/^https://coveralls\.io//' \ --no-check-internal-hash \ --no-check-external-hash \ --no-enforce-https \