Skip to content

ci: sync ci.yml from django-marina (Python 3.15, gate every job) - #878

Merged
dyve merged 2 commits into
mainfrom
ci-python-3.15-and-gate
Oct 3, 2026
Merged

dyve merged 2 commits into
mainfrom
ci-python-3.15-and-gate

Conversation

@dyve

@dyve dyve commented Sep 21, 2026

Copy link
Copy Markdown
Member

Stacked on #877. It branches from release-26.4 so its changelog entries land in a fresh Unreleased section rather than inside the released one. Merge #877 first and this reduces to the four files below.

Two changes propagated from django-marina (#681 and #682), both landing in ci.yml, so they travel as one review rather than two.

Python 3.15. 3.15.0rc2 is installable through uv, so the matrix reports on it well before the October release. The legs run with continue-on-error and cannot fail the build. No Django release claims 3.15 yet, 5.2, 6.0 and 6.1 all stop their classifiers at 3.14, so it pairs with 6.1 and main only. uv sync now pins the interpreter with --python, because uv skips pre-release interpreters when resolving by discovery, and that flag applies to every leg, so it is the line to look at hardest. Classifiers in pyproject.toml stay at 3.14: a classifier is a promise and a job that cannot fail the build does not back one. MAINTAINING.md records that rule.

The CI gate. tests is the only required status check on main and it only failed on the test matrix. docs and build feed nothing, so a failure in either left the matrix green and the gate green with it, meaning a broken docs build or a failing packaging preflight could be merged. It now reads every job it needs. The if: always() stays, because a job skipped after a failed need reports success to branch protection, so dropping it would reintroduce the hole through the front door.

Worth knowing for this package specifically: MAINTAINING.md names Pillow as the C-extension dependency that gates making a pre-release job blocking, and Pillow 12.3.0 already publishes cp315 wheels. That gate is open whenever 3.15 goes final. The bullet stays as policy rather than recording today's state, which would go stale.

The GDAL install steps and the jinja extra stay where they are, as PACKAGING.md requires here. Apart from those, ci.yml and tox.ini are byte-identical to django-marina after this.

Verified locally: py315-6.1 and py315-main pass here on 3.15.0rc2, 172 tests.

🤖 Generated with Claude Code

dyve and others added 2 commits September 21, 2026 09:01
Three commits have touched src/ since v26.3 on 2026-08-28: addon support on
floating-label fields, week/search/color inputs recognised as form controls,
and the BOOTSTRAP5 system check.

The test dependency group listed coverage[toml]>=7.6.1 twice. The duplicate is
dropped and the group sorted alphabetically, matching the docs group next to
it. Resolution does not change, only the lockfile's version of this package.

Entries are reordered to the convention in MAINTAINING.md: the missing
inline_field_class default first as a fix, then the three features, then
tooling, then documentation.

Verified with just lint and just build: check-manifest clean, pyroma 10/10, and
both the wheel and the sdist smoke-test against an isolated environment.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two changes propagated from django-marina, both in ci.yml, so they travel
together rather than as two rounds of review.

Python 3.15.0rc2 runs as a non-blocking matrix job against Django 6.1 and main.
No Django release claims 3.15 yet, so pairing it with 5.2 or 6.0 would park
permanent red legs that say nothing about this package. uv sync now pins the
interpreter with --python, because uv skips pre-release interpreters when it
resolves by discovery and the 3.15 leg would otherwise test on whatever else
the runner had.

The tests job is the only required status check on main, and it only failed on
the test matrix. docs and build feed nothing, so a failure in either left the
matrix green and the gate green with it: a broken docs build or a failing
packaging preflight could be merged. It now reads every job it needs. always()
stays because a job skipped after a failed need reports success to branch
protection, which is GitHub's documented behaviour and the reason the condition
is spelled out.

MAINTAINING.md names Pillow as the C-extension dependency that gates making a
pre-release job blocking. Pillow 12.3.0 already publishes cp315 wheels, so that
gate is open whenever 3.15 goes final. The bullet stays as policy rather than
recording today's state, which would go stale.

The GDAL install steps and the jinja extra stay where they are, as PACKAGING.md
requires for this package. Apart from those, ci.yml and tox.ini are now
byte-identical to django-marina.

Verified: py315-6.1 and py315-main pass here on 3.15.0rc2, 172 tests.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@coveralls

Copy link
Copy Markdown

Coverage Report for CI Build 35582349385

Coverage remained the same at 96.208%

Details

  • Coverage remained the same as the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 709
Covered Lines: 687
Line Coverage: 96.9%
Relevant Branches: 214
Covered Branches: 201
Branch Coverage: 93.93%
Branches in Coverage %: Yes
Coverage Strength: 15.5 hits per line

💛 - Coveralls

@dyve dyve mentioned this pull request Oct 3, 2026
@dyve
dyve merged commit eb04239 into main Oct 3, 2026
22 checks passed
@dyve
dyve deleted the ci-python-3.15-and-gate branch October 3, 2026 05:51
dyve added a commit that referenced this pull request Oct 4, 2026
…#885)

main claimed a version that does not exist. CHANGELOG.md carried a closed
`## 26.4 (2026-09-21)` section and pyproject.toml said 26.4, while the latest
tag was v26.3 and nothing had been published.

The release cut did not arrive through the release PR, #877, which was closed
as postponed. It arrived through #878, the CI sync, which also carried the
changelog heading, the version bump and the coverage[toml] dedup. Closing #877
therefore postponed nothing, and four more entries accumulated on top of a
section that was already dated and closed.

This folds the eight 26.4 entries back into Unreleased alongside the four that
followed, ordered by the categories in MAINTAINING.md: bug fixes, then
features, then tooling and internal. No entry text is changed. The version
returns to 26.3 in pyproject.toml and uv.lock.

`just release-check` reads correctly again. Before this it listed five src/
commits against an Unreleased section holding only two matching entries,
because the other three were covered by the closed 26.4 section.

uv.lock also bumps its own `revision` marker from 3 to 5, which my local uv
wrote when regenerating. That is incidental to this change.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
dyve added a commit to zostera/django-marina that referenced this pull request Oct 11, 2026
…ch (#693)

django-bootstrap4 and django-bootstrap5 both ended up with a version number on
main that was never published. The cause was the same in each: the propagation
PR was branched off the open release branch, so it carried the release commit,
and the dated heading and version bump merged with the workflow change. The
release PR was then closed as redundant because its content was already on
main. bootstrap4 also kept a uv.lock that still named the old version, because
the bump never went through a release PR that runs just build.

That was my doing, in zostera/django-bootstrap4#899 and
zostera/django-bootstrap5#878, and the stacking had a reason: branching off
main risks git merging a new Unreleased entry into a section the release has
since dated, which it does silently because the two sides touch different
lines. PACKAGING.md now names both hazards and says which one to prefer, so the
next person does not trade one for the other by accident.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants