ci(gate): build app-shipped binaries with required-features#203
Merged
Conversation
…eatures cargo build --workspace skips bins that declare required-features, so chat_metal, train_grad_full, generate_lora and friends can stop compiling without tripping fmt/clippy/test/build CI — the break only shows at app-packaging time. Two regressions slipped through this gap this cycle. Adds scripts/build-app-bins.sh (mirrors package-app.sh's binary list) and an app-binaries workflow on macos-latest that compiles every shipped binary with the features the app builds it with. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
What
CI regression gate: build every binary the macOS Studio app ships, each with its
required-features.Why
cargo build --workspace(even with--all-targets) silently skips any[[bin]]that declaresrequired-featuresunless those features are explicitly enabled. So a required-features binary can stop compiling and never trip fmt / clippy / test / build CI — the break only surfaces at app-packaging time.Two real regressions slipped through exactly this gap this session and were caught only by hand:
train_grad_full— E0063, missing GDN gradient fields undertrain-backwardgenerate_lora— E0599,generate_streamingnot in scopeThis gate closes that hole.
scripts/build-app-bins.shbuilds all 9 app-shipped binaries with their real feature sets;app-binaries.ymlruns it on macOS for every PR/push touchingcrates/**. It is a build gate (not-D warnings), so it catches compile regressions without tripping on pre-existing metal clippy debt.Files
scripts/build-app-bins.sh(+57).github/workflows/app-binaries.yml(+40)Verification
Ran against the integrated tree (main + all 8 engine slices): all 9 binaries built green —
quantize_q4,quantize_quarot,lattice,qwen35_generate,train_grad_full(train-backward),generate_lora(safetensors,inference-hook),eval_perplexity(f16,metal-gpu),chat_metal(f16,metal-gpu),embed.This gate's CI will FAIL on origin/main until the engine binaries it builds exist there (e.g.
embed.rsis PR-3). Merge this LAST, after PR-1..6 land, so the gate goes green immediately and starts protecting every subsequent change.Series
Part of the PR #193 engine-slice (finest split). The "regression tests implemented" gate Ocean asked for.