Repository navigation
chore(sync): merge main into new-resolver-config - #1367
LalatenduMohanty merged 46 commits into
Conversation
The default_build_sdist function was constructing sdist filenames using req.name directly, which could contain uppercase letters, dots, or hyphens that were not normalized per PEP 625. This caused filenames to disagree with upstream artifacts and broke filename-keyed comparison operations. Apply PEP 503 canonicalization (lowercase, replace [._-] with _) when constructing sdist filenames, ensuring compliance with PEP 625. Fixes python-wheel-build#1317 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Signed-off-by: Justin Larkin <jlarkin@redhat.com>
`_write_requirements_file()` wrote requirement sets in iteration order so rebuilds of identical sources could produced different files even though the content was the same. Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Martin Prpič <mprpic@redhat.com>
…rements-files fix(dependencies): sort requirements files
Extract the normalized package name to a variable to keep lines within the project's configured line length limit of 88 characters. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Signed-off-by: Justin Larkin <jlarkin@redhat.com>
…ep625-normalization-1317 fix(sources): sdist filenames are not PEP 625 normalized
Log a warning when a candidate version is filtered out because it has no sdist (wheel-only release). Previously this was gated behind DEBUG_RESOLVER and invisible at default verbosity. Fixes python-wheel-build#1332 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Ryan Petrello <ryan@ryanpetrello.com>
…sing-sdist fix(resolver): warn when a version is skipped due to missing sdist
In multiple-versions mode a failed version is removed from the graph together with every descendant that becomes orphaned, including ones that already completed bootstrap with their build-system edges. Only the failed package's own seen-markers were cleared, so when an orphaned descendant was encountered again it was re-added as a bare node by Start and skipped as already seen. graph.json then carried the node with no build edges and build-parallel scheduled it in round 1 before its build backend was available. Make remove_dependency return the removed nodes and clear the seen-markers for every one of them, so a re-encountered orphan goes through PrepareSource again. Closes python-wheel-build#1335 Co-Authored-By: Claude Opus <noreply@anthropic.com> Signed-off-by: Andre Lustosa <alustosa@redhat.com>
Top-level requirements were resolved and recorded in the dependency graph one rule at a time. A later rule for the same package, such as an exact pin that bypasses the release-age cooldown, widens the resolver's shared per-package cache, so the Resolve phase then returned a different version than the one already written to the graph. Because Start skips graph insertion for top-level requirements, the stale node stayed in graph.json with no build-system edges and build-parallel scheduled it in round 1 before its build backend was available. Resolve every top-level rule once before any of them is added to the graph, so the recorded version matches what the Resolve phase uses. Each warm-up call runs inside req_ctxvar_context() so log messages carry the package name, and deferred errors are logged at debug level instead of silently swallowed. Closes python-wheel-build#1334 Co-Authored-By: Claude Opus <noreply@anthropic.com> Signed-off-by: Andre Lustosa <alustosa@redhat.com>
…n-seen-keys fix(bootstrap): forget seen-markers of cascade-removed dependencies
…vel-stale-node fix(bootstrap): warm the resolver cache before adding top-level nodes
The `test_multiple_versions_forgets_cascade_removed_descendants` test used example.com URLs, inconsistent with the rest of the file which uses the .test TLD per project convention. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Signed-off-by: Lalatendu Mohanty <lmohanty@redhat.com>
…test-url-convention fix(tests): use .test TLD instead of example.com in bootstrapper test
Localhost simple indexes never provide PEP 691 upload timestamps. Override `is_blocked_by_cooldown` in `PyPIProvider` to silently skip the check when the server is localhost, instead of emitting a noisy warning for every package. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Ryan Petrello <ryan@ryanpetrello.com>
…ress-localhost-cooldown-warning fix(resolver): suppress cooldown warning for localhost indexes
Promote the "cooldown blocked N version(s)" log message from INFO to WARNING. When the release-age cooldown actively rejects versions, this is a significant event that should be visible at default verbosity. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> Signed-off-by: Ryan Petrello <ryan@ryanpetrello.com>
…ldown-blocked fix(resolver): warn when cooldown blocks versions
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 to 02cb101ec7c40f2c49e1d9714d64511d8e1b74de. - [Release notes](https://github.com/dtolnay/rust-toolchain/releases) - [Commits](dtolnay/rust-toolchain@6c977a6...02cb101) --- updated-dependencies: - dependency-name: dtolnay/rust-toolchain dependency-version: 02cb101ec7c40f2c49e1d9714d64511d8e1b74de dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
Tests replacing PrepareSource.run() do not consume background results. Disable background work too so placeholder URLs never trigger requests. This becomes important in sandboxed environments where network requests don't quickly return an error but instead go into a backoff retry loop. Co-Authored-By: OpenAI Codex <codex@openai.com> Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
Parallel pytest workers can share the default repository paths. Test
runs may fail with:
<Result FileExistsError(17, 'File exists')>
Two workers may both observe a missing directory before one creates it,
causing the other worker's mkdir() call to fail.
Use `exist_ok=True` so `WorkContext.setup()` tolerates that race.
Co-Authored-By: OpenAI Codex <codex@openai.com>
Signed-off-by: Ihar Hrachyshka <ihar.hrachyshka@gmail.com>
…retries test(bootstrapper): prevent unintended background downloads
Name the archive root from the normalized package name and version. Test the returned sdist archive and the tar helper. Fixes python-wheel-build#1315 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com> Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Justin Larkin <jlarkin@redhat.com>
The local wheel server and --cache-wheel-server-url only hold wheels Fromager already built. Cooldown was applied when the sdist was resolved. The cache upload-time is when we uploaded the wheel, not when the package was published, so --min-release-age rejects a wheel we should reuse. A package wheel_server_url is an upstream pre-built index, so that lookup stays on the pre-built path and cooldown still applies. Follows up on python-wheel-build#1143 and closes python-wheel-build#1140. Co-Authored-By: Claude <claude@anthropic.com> Co-Authored-By: Cursor Grok 4.7 <noreply@x.ai> Signed-off-by: Shanmukh Pawan <smoparth@redhat.com>
…x/disable-cooldown-cache-server fix(wheels): disable cooldown for local and cache wheel servers by having separate cache wheel resolution from pre-built path
…pendabot/github_actions/dtolnay/rust-toolchain-02cb101ec7c40f2c49e1d9714d64511d8e1b74de build(deps): bump dtolnay/rust-toolchain from 6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 to 02cb101ec7c40f2c49e1d9714d64511d8e1b74de
Add the global wheels.build_tag_hook setting to append validated environment suffixes to wheel build tags. Apply the hook consistently when building wheels and checking local or remote caches. Document the hook configuration and explain how its settings import string differs from process hooks discovered through entry points. Closes: python-wheel-build#1181 Co-Authored-By: GPT Sol <codex@openai.com> Signed-off-by: Justin Larkin <jlarkin@redhat.com>
…build-tag-hook-1181 feat(wheels): add configurable build tag hook for wheel filenames
…-race-mkdir fix(context): handle concurrent directory creation
Keep routine candidate skips in CI logs without sending WARNING telemetry events. Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Ryan Petrello <rpetrell@redhat.com>
…l-only-log-level fix(resolver): log wheel-only candidate skips at INFO
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 02cb101ec7c40f2c49e1d9714d64511d8e1b74de to 7e38f4b43b4db5c8dd498af069a4f6196df1d067. - [Release notes](https://github.com/dtolnay/rust-toolchain/releases) - [Commits](dtolnay/rust-toolchain@02cb101...7e38f4b) --- updated-dependencies: - dependency-name: dtolnay/rust-toolchain dependency-version: 7e38f4b43b4db5c8dd498af069a4f6196df1d067 dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
get_pyproject_contents() only reads [build-system], so it does not need tomlkit's format-preserving parser. tomlkit (0.15.1) rejects some spec-valid files that re-open a super-table out of order, failing builds for affected packages (e.g. geventhttpclient). stdlib tomllib parses them correctly and is always available (Python >= 3.12). Co-Authored-By: Claude <claude@anthropic.com> Closes: python-wheel-build#1356 Signed-off-by: Christian Heimes <cheimes@redhat.com>
…omllib-read fix(deps): read pyproject.toml with tomllib instead of tomlkit
Pre-built packages have an empty changelog build tag, which the reuse check treated as 0. A publisher build number higher than 0 then failed the job instead of downloading the wheel. Skip that comparison for pre-built packages and keep it for wheels Fromager builds. Co-Authored-By: Grok <grok@x.ai> Signed-off-by: Shanmukh Pawan <smoparth@redhat.com>
…x/prebuilt-ignore-changelog-build-tag fix(build): reuse pre-built wheels that carry a build number
…pendabot/github_actions/dtolnay/rust-toolchain-7e38f4b43b4db5c8dd498af069a4f6196df1d067 build(deps): bump dtolnay/rust-toolchain from 02cb101ec7c40f2c49e1d9714d64511d8e1b74de to 7e38f4b43b4db5c8dd498af069a4f6196df1d067
fix(bootstrap): AIPCC-29282 remove dead cache-server fallback
…oplevel-directory-1315 fix(tarballs): use correct top-level directory name in sdists
Use INFO for expected stub creation in `ensure_pkg_info()`. Co-Authored-By: Codex <codex@openai.com> Signed-off-by: Ryan Petrello <rpetrell@redhat.com>
…info-log-level fix(sources): log PKG-INFO stub creation at INFO
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 7e38f4b43b4db5c8dd498af069a4f6196df1d067 to e2a55d2ffb04f378e9626c28d38b36d230d1e12f. - [Release notes](https://github.com/dtolnay/rust-toolchain/releases) - [Commits](dtolnay/rust-toolchain@7e38f4b...e2a55d2) --- updated-dependencies: - dependency-name: dtolnay/rust-toolchain dependency-version: e2a55d2ffb04f378e9626c28d38b36d230d1e12f dependency-type: direct:production ... Signed-off-by: dependabot[bot] <support@github.com>
…pendabot/github_actions/dtolnay/rust-toolchain-e2a55d2ffb04f378e9626c28d38b36d230d1e12f build(deps): bump dtolnay/rust-toolchain from 7e38f4b43b4db5c8dd498af069a4f6196df1d067 to e2a55d2ffb04f378e9626c28d38b36d230d1e12f
Bring the feature branch up to date with main. Preserve the source resolver and wheel settings tests, and keep the bootstrap tests free of network requests. Co-Authored-By: Codex <noreply@openai.com> Signed-off-by: Lalatendu Mohanty <lmohanty@redhat.com>
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configuration
You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Queued — the merge queue status continues in this comment ↓. |
Merge Queue Status
This pull request spent 15 seconds in the queue, including 1 second running CI. ReasonPull request #1367 has been dequeued GitHub refused to merge the pull request. You're not authorized to push to this branch. Visit https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches for more information. This is usually enforced by a branch protection or ruleset rule. HintYou should look at the reason for the failure and decide if the pull request needs to be fixed or if you want to requeue it. Required conditions to merge
Requeued — the merge queue status continues in this comment ↓. |
Merge Queue Status
This pull request spent 16 seconds in the queue, including 2 seconds running CI. ReasonPull request #1367 has been dequeued GitHub refused to merge the pull request. You're not authorized to push to this branch. Visit https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches for more information. This is usually enforced by a branch protection or ruleset rule. HintYou should look at the reason for the failure and decide if the pull request needs to be fixed or if you want to requeue it. Required conditions to merge
Tick the box to put this pull request back in the merge queue (same as
|
6537698
into
python-wheel-build:new-resolver-config
Create resolver branch backports after each main PR merge using the installed Mergify app. Keep generated backports for maintainer review and manual merging, and document recovery from conflicts or missed events. Remove the superseded sync workflow and limit backports to changes after the baseline sync in python-wheel-build#1367. Co-Authored-By: Codex <noreply@openai.com> Signed-off-by: Lalatendu Mohanty <lmohanty@redhat.com>
Why
Bring
new-resolver-configup to date withmainso resolver work can continue on the latest code.What changed
mainand kept both branches' tests when resolving the two conflicts.Checks
Replaces #1366.