Install egglog with --locked and a pinned commit - #1628
Merged
pavpanchekha merged 1 commit intoJul 26, 2026
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR makes the egglog-herbie install step reproducible by ensuring cargo install honors the upstream Cargo.lock when installing egglog-experimental from Git.
Changes:
- Add
--lockedto thecargo installinvocation in theegglog-herbieMakefile target to prevent dependency re-resolution and drift.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
`cargo install` ignores the checked-in Cargo.lock unless `--locked` is
passed, so every CI run re-resolved egglog-experimental's dependency tree
to the newest compatible versions. That recently broke the build: egglog's
`add_primitive` proc macro parses full Rust expressions and needs syn's
"full" feature, but only got it via feature-unification from clap_derive
(pulled in through egglog's `bin` feature). When clap_derive 4.6 moved to
syn 3.x, its "full" feature stopped applying to egglog's syn 2.x, and the
proc macro failed to compile ("enable syn's features=[\"full\"]").
Two changes for a reproducible install:
- `--locked` makes cargo honor egglog-experimental's committed, tested
lockfile instead of re-resolving to latest.
- pin an exact `--rev` instead of floating `--branch main`, so the egglog
version only changes when we deliberately bump the pin. (Bump this rev
to pick up egglog updates.)
`--locked` is the part that fixes the break; the rev pin is good practice
for reproducibility.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
oflatt-claude
force-pushed
the
fix/egglog-install-locked
branch
from
July 25, 2026 01:31
91591bb to
c4391ea
Compare
Contributor
|
I don't want to lock the egglog revision—egglog isn't the default so I'd rather let it float. But of course it's annoying when CI breaks. Is |
Collaborator
|
Yeah totally, just --locked is fine |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
make install(theegglog-herbietarget) ran:cargo installignores the checked-inCargo.lockunless--lockedis passed, so every CI run re-resolved egglog-experimental's whole dependency tree to the newest compatible versions. One such re-resolution just broke us:add_primitiveproc macro parses full Rust expressions and needssyn'sfullfeature.full; it only got it becauseclap_derive(via egglog'sbinfeature) asked forsynwithfullon the samesyn 2.x(Cargo feature unification).clap_derive4.6 bumped tosyn 3.x, so itsfullnow lands on syn 3 and egglog'ssyn 2.xlost it, giving dozens oferror: unsupported expression; enable syn's features=["full"].(Failing run: #1627. This also affects
infra/nightly.sh, which runsmake install.)Fix
--locked→ honor egglog-experimental's committed, tested lockfile instead of re-resolving. This is the part that fixes the break.--rev <sha>→ pin an exact commit instead of floating--branch main, so the egglog version only moves when we deliberately bump the pin (good practice for reproducibility). Note: pinning the rev without--lockedwould not fix the bug, sincecargo installwould still re-resolve transitive deps.Verified locally: the old command reproduces the failure; this one installs cleanly.
Other install sites checked
.github/workflows/unit-test.ymlandinfra/nightly.shboth install egglog viamake install, so they inherit this fix. ✅Dockerfile:11is separate and stale:cargo install egglog --version 1.0.0installs the oldegglog1.0.0 from crates.io (the fallback binary inegglog-subprocess.rkt), notegglog-experimental2.0.0. Left untouched here — flagging for a follow-up to reconcile the production image with the current egglog.Upstream follow-ups (companion PRs)
add_primitivedeclaressyn'sfullfeature (the actual root-cause fix) + a--no-default-featuresCI guard.latest-depsCI job reproducing the lock-ignoringcargo installresolution so drift is caught upstream.🤖 Generated with Claude Code