Skip to content

CI re-resolves uv.lock instead of installing it as committed #677

Open

Description

@fgmacedo

uv sync --all-extras --dev in CI runs without --locked (or --frozen):

  • .github/workflows/python-package.yml:37
  • .github/workflows/release.yml:30

So every CI run (including the release build) is free to re-resolve dependencies instead of installing exactly what uv.lock pins. A stale or inconsistent lock never fails CI, and a release can be tested against versions different from the committed lock. .readthedocs.yaml:19 already uses --frozen.

Found while preparing #676: locally the upgrade was resolved with a 7-day exclude-newer cooldown that lives only in a global uv config, not in the project. CI ignores it and re-resolves; the versions happened to come out identical this time, but nothing guarantees it.

Proposed fix

  • Use uv sync --locked --all-extras --dev in both workflows (fails if uv.lock is out of date with pyproject.toml), and keep uv run from re-locking (UV_LOCKED=1 or --locked).
  • Optionally move the exclude-newer cooldown into [tool.uv] in pyproject.toml, so local upgrades and CI share the same resolution policy.

Acceptance: CI fails on a PR whose uv.lock does not match pyproject.toml, and passes otherwise.

Activity

  1. added this to the 3.2.2 milestone on Oct 13, 2026
  2. added 2 commits that reference this issue on Oct 13, 2026
    56ff13f
    4072311
  3. removed this from the 3.2.2 milestone on Oct 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions