ci: pin pixi-version in setup-pixi for deterministic lock validation - #334
Conversation
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.
|
Warning Review limit reached
Next review available in: 44 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughCI workflows now explicitly install Pixi ChangesCI toolchain pinning
Estimated code review effort: 1 (Trivial) | ~5 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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 |
There was a problem hiding this comment.
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.0forprefix-dev/setup-pixiin the main CI workflow (all three Pixi install steps). - Pinned
pixi-version: v0.73.0forprefix-dev/setup-pixiin 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.
| @@ -52,6 +52,7 @@ jobs: | |||
| - name: Install pixi | |||
| uses: prefix-dev/setup-pixi@v0.8.8 | |||
| @@ -79,6 +80,7 @@ jobs: | |||
| - name: Install pixi | |||
| uses: prefix-dev/setup-pixi@v0.8.8 | |||
| @@ -103,6 +105,7 @@ jobs: | |||
| - name: Install pixi | |||
| uses: prefix-dev/setup-pixi@v0.8.8 | |||
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
left a comment
There was a problem hiding this comment.
I'm curious how the relock workflow is used.
Problem
CI validates the lockfile with
pixi install --locked(strict — it fails rather than re-solving ifpixi.lockdoesn't matchpyproject.toml). Butsetup-pixi@v0.8.8pins 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 workspacefailures 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.0on everysetup-pixistep (ci.yml x3, gpu-tests.yml). v0.73.0 is the version that generated the current green lock onmain. 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.0or install that version), runpixi lock, and commitpyproject.toml+pixi.locktogether. Bumping pixi later is a one-line change here plus a relock.Summary by CodeRabbit