Skip to content

Sync: main → develop - #1552

Merged
RonnyPfannschmidt merged 26 commits into
developfrom
main
Oct 9, 2026
Merged

RonnyPfannschmidt merged 26 commits into
developfrom
main

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Branch Synchronization

Syncs release changes from main back to develop after merging Release: setuptools-scm v10.3.4, vcs-versioning v2.5.0.

This is an automated PR created by the branch-sync workflow.
Review and merge to keep develop up to date with main.

RonnyPfannschmidt and others added 9 commits September 17, 2026 09:57
A project whose pyproject.toml sits in a subdirectory of a checkout still
shipped an sdist and a wheel with none of its tracked files. root defaults
to the project directory, which is not the checkout root, so version
inference correctly found no SCM there and answered from
SETUPTOOLS_SCM_PRETEND_VERSION or fallback_version. The egg_info mixin read
that no-workdir as "there is no checkout" and suppressed the file finders,
so every file setuptools' own package discovery does not find was dropped.

This is the same shape as #1540 and survived its fix in 10.3.3. That fix
stopped "never looked" from aliasing "looked and found nothing"; what is
left is that "found nothing at root" is not "there is no checkout". The
finders that 10.2.3 fell through to were never scoped by root -- they walk
up from the working directory -- which is why the layout worked before
10.3.0 and why the suppression is what broke it.

Which checkout defines the version and which checkout holds the files are
different questions. root and search_parent_directories scope the first on
purpose; the second follows the checkout the project physically sits in.
discover_file_workdir answers it: parents are always searched, only live
SCM checkouts qualify, IGNORE_VCS_ROOTS still excludes a root, and the
listing is scoped to project_root so a monorepo sibling's files stay out.

project_path is deliberately not verified there. config.project_path is
measured from the declared root and a workdir's from the real checkout,
and this discovery only runs when those differ -- so the two disagree by
construction. Verifying would raise on a layout that built fine in 10.2.3,
or discard a correct file list, over a value file listing never reads.

VersionInferenceData.file_workdir caches it next to the lazy workdir, so
the two consumers (find_sources and the egg-info metadata writer) share
one discovery instead of probing twice.

Routing these projects through the deprecated setuptools.file_finders
entry point would also have restored the files, and more cheaply. It was
rejected for shipping a worse sdist: that path writes no
scm_file_list.json, so a rebuild from the sdist has no file list to fall
back on, and it parks the fix on a path already slated for removal.

Fixes #1543

Co-Authored-By: Claude Opus 5 (1M context) via Claude Code <noreply@anthropic.com>
…llows-the-checkout

fix(file-discovery): follow the checkout, not the versioning root
The floor check imported every setuptools_scm submodule and called that a
compatibility claim. It is not: the integration hooks reach for
vcs-versioning internals from inside function bodies, and a deferred import
is invisible to an import probe. setuptools-scm 10.3.4.dev imports
vcs_versioning._worktree_discovery.discover_file_workdir inside
build_py._file_workdir, added after 2.4.1 and in no published release, while
declaring >=2.4.0.dev0 -- the probe stayed green.

Install the test requirements alongside the wheel, before the core is pinned
so they cannot drag it back up, and run setuptools-scm/testing_scm from the
workspace root. Root is where the other jobs run pytest; run from
setuptools-scm/ the suite picks up ambient repository state and fails on
tests that have nothing to do with the floor.

The testsuite is the checkout's, so it loads vcs_versioning.test_api from the
pinned floor release: a test helper added to the core after the floor also
fails here. That is not the floor claim proper, but it reads the same way --
this tree needs a newer core than it declares.

Co-Authored-By: Claude Opus 5 (1M context) via Claude Code <noreply@anthropic.com>
#1544 made build_py._file_workdir import
vcs_versioning._worktree_discovery.discover_file_workdir, added to the core in
that same change and in no published release, while the declared floor stayed
at 2.4.0.dev0. An install that resolves a published vcs-versioning raises
ImportError from the file-discovery path -- the one #1543 was about.

2.5.0 is what the core's towncrier-fragments scheme computes for the pending
feature fragment, so the workspace build satisfies the new floor. A checkout
synced before this needs `uv sync --reinstall-package vcs-versioning`: uv
caches the editable metadata, and a stale 2.4.0.dev version fails the builds
the testsuite runs.

Co-Authored-By: Claude Opus 5 (1M context) via Claude Code <noreply@anthropic.com>
…runs-the-testsuite

ci: the vcs-versioning floor check runs the testsuite
setuptools-scm 10.1.0 through 10.2.3 call
_version_missing(config, tool=env.tool_names[0]) and allow any
vcs-versioning<3. 78e3451 dropped the keyword in the 2.4.1 patch release,
so with 10.2.3 (the newest non-yanked setuptools-scm on PyPI) a build
without a detectable version fails with

    TypeError: _version_missing() got an unexpected keyword argument 'tool'

instead of the LookupError that tells the user how to set a version.

Accept the keyword and ignore it: those callers passed
config.env.tool_names[0], which is what the function reads now. With this
change setuptools-scm 10.2.3's testing_scm passes against vcs-versioning
(181 passed; 1 failed against 2.4.1).

Fixes #1550

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
…ccepts-tool

fix(vcs-versioning): accept tool= in _version_missing again
Release: setuptools-scm v10.3.4, vcs-versioning v2.5.0
@github-actions github-actions Bot added the sync label Sep 23, 2026
RonnyPfannschmidt and others added 17 commits September 23, 2026 21:11
…lure

setuptools-scm 10.3.3 was tagged on 2026-09-16 and reached PyPI a week
later (#1549). One flaky Windows test failed in its release run, which
skips dist_upload_setuptools_scm, and nobody noticed because every
release run was red anyway: create-release-tags.yml created published,
immutable releases, so upload-release-assets-* failed every time.

- create-release-tags.yml pushes the tag itself and creates the release
  as a draft (a draft does not create its tag, and the dispatch needs it).
- publish-github-release-* replace upload-release-assets-*: after the
  PyPI upload they attach the wheel and sdist to the draft and publish it.
  A release left in draft never reached PyPI.
- release-failed opens a "Release <tag> did not publish" issue when a
  tag run fails or is cancelled, or comments on the open one.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
python-tests.yml reports failures of the release runs it is dispatched
for, but when create-release-tags.yml itself fails those runs never
start and nothing reported it. Its release-failed job opens (or comments
on) a "Release from #<PR> did not start" issue.

Workflow-level write permissions move onto create-tags, since the file
now has a second job that only needs issues: write.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
The release-failed jobs used gh in bash. create-release-tags.yml already
runs on github-script, and gh issue list --search goes through the
search index, which lags behind newly created issues, so a quick second
failure could miss the open issue and file a duplicate. Listing open
issues and matching the title exactly avoids that, and the PR title and
tag no longer pass through a shell.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
The last gh calls in the workflows. getReleaseByTag does not return
drafts, so the draft is found through listReleases, stopping at the
first page that has it. Assets already attached are skipped, so a re-run
after a partial upload publishes instead of failing on the duplicate;
a release that is missing or already published fails with a message
naming the tag.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.2.3 to 2.8.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](urllib3/urllib3@2.2.3...2.8.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.8.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
chore(deps): Bump urllib3 from 2.2.3 to 2.8.0
…eme (#1556)

* feat(vcs-versioning): add the towncrier-fragments-zerover version scheme

towncrier-fragments proposes the next major for any major, breaking or
removal fragment, so a 0.x project with one removal fragment proposes
1.0.0. The zerover variant keeps 0.x on 0.x: while the last tag's major
is 0, breaking and removal bump the minor version and only an explicit
major fragment proposes 1.0.0. towncrier-fragments is unchanged.

Also documents both towncrier schemes in docs/extending.md, where
towncrier-fragments was not listed.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>

* chore: number the changelog fragment after the PR

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
…nnable

release-failed reported test-dependency-floor and
test-standalone-vcs-versioning failures as "did not publish", but the
upload only waited for `test`, so a floor failure in a vcs-versioning
release opened that issue for a package already on PyPI. The uploads now
wait for every job release-failed reports on, and check that the built
files carry the tag's version before publishing.

create-release-tags.yml created both tags and drafts before dispatching,
so a failure on the second package stranded the first, and a re-run
failed on the existing tag. It now reuses a tag already at the merge
commit and an existing release, skips releases already published, and
does not dispatch a tag that already has a release run: a second dispatch
would share its concurrency group and cancel a run that may be uploading.

Publishing a release closes its "did not publish" issue, and a successful
re-run of the tagging closes its "did not start" issue.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
ci(release): publish GitHub releases after PyPI, open an issue on failure
Release: vcs-versioning v2.6.0
Read the Docs serves the project as multiple_versions_without_translations,
so /en/... URLs returned 404 until a redirect was added (#1547). The
error messages in vcs-versioning and the setuptools-scm README, which is
also the PyPI project page, now link the paths Read the Docs serves.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
Merging #1553 and then #1557 48 seconds apart raced: the proposal run for
#1553's merge commit still saw the 2.6.0 fragment, force-pushed
release/main three seconds after #1557 was merged, found no open release
PR and opened #1558, a duplicate of the release that had just shipped.
Merging it would have re-run the 2.6.0 tagging.

The push step now stops when the source branch no longer points at the
run's commit; the run for the newer commit proposes the release. A push
that finds no fragments in either package closes any release PR still
open for its branch, unless the branch has moved on, so a duplicate that
slips through anyway does not linger.

Co-Authored-By: Claude Opus 5.5 via Claude Code <noreply@anthropic.com>
…ut-language-prefix

docs: link the docs without the /en/ language prefix
ci(release-proposal): do not propose from a superseded commit
…updates

Bumps the github-actions group with 2 updates in the / directory: [astral-sh/setup-uv](https://github.com/astral-sh/setup-uv) and [msys2/setup-msys2](https://github.com/msys2/setup-msys2).


Updates `astral-sh/setup-uv` from 10.0.1 to 10.2.0
- [Release notes](https://github.com/astral-sh/setup-uv/releases)
- [Commits](astral-sh/setup-uv@20cfd1b...c18668a)

Updates `msys2/setup-msys2` from 2.32.0 to 2.33.0
- [Release notes](https://github.com/msys2/setup-msys2/releases)
- [Changelog](https://github.com/msys2/setup-msys2/blob/main/CHANGELOG.md)
- [Commits](msys2/setup-msys2@66cd2cc...ec48f7c)

---
updated-dependencies:
- dependency-name: astral-sh/setup-uv
  dependency-version: 10.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
- dependency-name: msys2/setup-msys2
  dependency-version: 2.33.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
…ctions-3ebff4a8e7

chore(deps): Bump the github-actions group across 1 directory with 2 updates
@RonnyPfannschmidt
RonnyPfannschmidt merged commit 5e66b41 into develop Oct 9, 2026
56 of 57 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant