Skip to content

ci: pin pixi-version in setup-pixi for deterministic lock validation - #334

Merged
marcuscollins merged 2 commits into
mainfrom
ci/pin-pixi-version
Jul 22, 2026
Merged

ci: pin pixi-version in setup-pixi for deterministic lock validation#334
marcuscollins merged 2 commits into
mainfrom
ci/pin-pixi-version

Conversation

@xraymemory

@xraymemory xraymemory commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Problem

CI validates the lockfile with pixi install --locked (strict — it fails rather than re-solving if pixi.lock doesn't match pyproject.toml). But setup-pixi@v0.8.8 pins the action, not the pixi binary — it installs whatever pixi is "latest" at run time.

So the pixi that generates a lock locally can differ from the pixi that validates it in CI, and two versions can disagree on the manifest hash. The symptom is intermittent lock file not up-to-date with the workspace failures on PRs that didn't touch dependencies (seen on #300), and CI that can start failing with no code change when a new pixi ships.

Fix

Pin pixi-version: v0.73.0 on every setup-pixi step (ci.yml x3, gpu-tests.yml). v0.73.0 is the version that generated the current green lock on main. Lock validation is now deterministic and matches the committed lock's generator.

Follow-up

Contributors regenerating the lock should use the same pinned pixi (pixi self-update --version 0.73.0 or install that version), run pixi lock, and commit pyproject.toml + pixi.lock together. Bumping pixi later is a one-line change here plus a relock.

Summary by CodeRabbit

  • Chores
    • Standardized the Pixi toolchain version used by automated linting, type checks, CPU tests, and GPU tests.
    • Improved consistency and reproducibility across continuous integration workflows.

setup-pixi@v0.8.8 pins the action, not the pixi binary — it installs the
latest pixi on every run. Because CI validates the lockfile with
'pixi install --locked' (strict), a newer pixi released between runs can
reject a lockfile an earlier pixi accepted, failing CI with 'lock file
not up-to-date with the workspace' on unrelated PRs. Pin the pixi binary
so lock validation is deterministic and matches the version used to
generate the committed lock.
@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@xraymemory, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 44 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 7cb0357d-a411-4ee3-8b24-8720bc71386d

📥 Commits

Reviewing files that changed from the base of the PR and between de8d18b and dc9a2ac.

📒 Files selected for processing (1)
  • .github/workflows/relock.yml
📝 Walkthrough

Walkthrough

CI workflows now explicitly install Pixi v0.73.0 for linting, type checking, CPU tests, and GPU tests.

Changes

CI toolchain pinning

Layer / File(s) Summary
Pin Pixi across CI jobs
.github/workflows/ci.yml, .github/workflows/gpu-tests.yml
Lint, typecheck, CPU-test, and GPU-test setup steps specify Pixi v0.73.0.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested reviewers: marcuscollins

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: pinning pixi-version in setup-pixi to make lock validation deterministic.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch ci/pin-pixi-version

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Pins the Pixi binary version used in GitHub Actions so pixi install --locked validation is deterministic and doesn’t start failing due to upstream Pixi releases changing lockfile hashing/validation behavior.

Changes:

  • Pinned pixi-version: v0.73.0 for prefix-dev/setup-pixi in the main CI workflow (all three Pixi install steps).
  • Pinned pixi-version: v0.73.0 for prefix-dev/setup-pixi in the GPU test workflow.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
.github/workflows/ci.yml Pins the Pixi binary version used across lint/typecheck/test jobs to make lock validation reproducible.
.github/workflows/gpu-tests.yml Pins the Pixi binary version on the self-hosted GPU runner for consistent environment/lock behavior.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread .github/workflows/ci.yml
@@ -52,6 +52,7 @@ jobs:
- name: Install pixi
uses: prefix-dev/setup-pixi@v0.8.8
Comment thread .github/workflows/ci.yml
@@ -79,6 +80,7 @@ jobs:
- name: Install pixi
uses: prefix-dev/setup-pixi@v0.8.8
Comment thread .github/workflows/ci.yml
@@ -103,6 +105,7 @@ jobs:
- name: Install pixi
uses: prefix-dev/setup-pixi@v0.8.8
xraymemory added a commit that referenced this pull request Jul 22, 2026
The 'lock file not up-to-date' failures are a pixi version skew: setup-pixi
installs the latest pixi each run, and a newer pixi than the one that
generated pixi.lock rejects it under 'pixi install --locked'. Pin the pixi
binary to v0.73.0 (the version the committed lock was solved with) so CI
validation is deterministic. The lockfile itself is already consistent and
is left unchanged. Mirrors #334 on main.
Regenerates pixi.lock on linux with pinned pixi v0.73.0 and commits it
back. macOS cannot solve this workspace from scratch (system-requirements
cuda + git/editable deps must build for linux-64), so contributors on Mac
can dispatch this instead of hand-editing the lock.

@marcuscollins marcuscollins left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious how the relock workflow is used.

@marcuscollins
marcuscollins merged commit 8bf5b06 into main Jul 22, 2026
16 of 20 checks passed
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.

3 participants