ci: add non-blocking nightly-canary for early toolchain-regression warning#317
Merged
Conversation
…rning
Adds a weekly (Mon 02:00 UTC) + on-demand canary that builds and
clippies the workspace against the LATEST floating nightly on both
Linux and Windows — deliberately deviating from the pinned toolchain in
rust-toolchain.toml. "Pin the gate; float the canary": it surfaces an
upcoming-nightly regression *before* a `just toolchain-sync` pin bump
hits it, rather than during one (the pain that produced the ethnum
1.5.2 E0512 episode).
Design:
- Non-blocking by construction: schedule/workflow_dispatch only, never
in the main-protection required checks, so a red canary cannot block
a merge. It does NOT use continue-on-error — the job fails honestly so
ci-failure-notify.yml (which fires only on conclusion == failure)
catches it. Same model tier-2 uses.
- Linux + Windows matrix (fail-fast: false) so cfg(target_os)-gated code
is probed on both; macOS omitted (local dev already exercises newest
nightly there). Mirrors the PR-path clippy flag stack
(--workspace --all-targets --all-features --locked --no-deps -D warnings)
plus cargo check, with --locked so it isolates compiler/std
regressions from dependency drift.
- Hook into ci-failure-notify.yml: watch "🐤 Nightly Canary" and map it
to label ci-failure-nightly-canary with an early-warning issue body
(advisory, not a broken main; fix is usually a dep bump not a
toolchain downgrade).
Outside gen-workflow's scope (it validates pr-fast.yml only); gates-drift
and workflow-drift both pass unchanged.
Addresses uffs-products OSS sync report §4 ("confirm a nightly canary
exists").
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Close the macOS gap: maintainers' Macs run the *pinned* toolchain, not the floating nightly, so local dev does not actually exercise tomorrow's compiler on Darwin — and macOS-gated paths (e.g. the ~/Library/Logs/uffs log-dir branch) would otherwise escape the probe. Add a macos-14 (Apple Silicon) leg running the same cargo check + strict clippy as the Linux/Windows legs. The Linux-only disk-cleanup step is already gated by `if: matrix.os == 'linux'`, so macOS skips it. Now all three target OSes get an early-warning floating-nightly probe, matching the §6 "lint every platform" principle symmetrically. 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.
Summary
Implements the "pin the gate, float the canary" idea from the
uffs-productsOSS sync report (§4). Adds a weekly + on-demand canary that builds & clippies the workspace against the latest floating nightly — deliberately deviating from the pin inrust-toolchain.toml— so an upcoming-nightly regression is caught before ajust toolchain-syncpin bump runs into it, not during one.This is the automation the now-corrected
rust-toolchain.tomlcomment (PR #316) used to track manually.Design choices
Non-blocking by construction (not by swallowing failures):
schedule(Mon 02:00 UTC) +workflow_dispatchonly — never on the PR path, never added to themain-protectionrequired checks. A red canary cannot block a merge.continue-on-error. The job fails honestly so the existingci-failure-notify.yml(which fires only onconclusion == 'failure') catches it and files a tracking issue. Non-blocking comes from not being a required check — the same modeltier-2.ymluses.Linux + Windows matrix (
fail-fast: false):#[cfg(target_os = "…")]-gated code is probed on each platform (the gap §6 of the report flagged).Flag parity with the PR gate:
cargo +nightly clippy --workspace --all-targets --all-features --locked --no-deps -- -D warnings, plus acargo check.--lockedisolates compiler/std regressions from dependency drift.Notify hook:
ci-failure-notify.ymlnow watches🐤 Nightly Canaryand maps it to labelci-failure-nightly-canarywith an early-warning issue body (advisory —mainstill builds on the pin; the fix is usually a dep bump à la ethnum 1.5.2→1.5.3, not a toolchain downgrade).Validation
gen-workflow --check(validatespr-fast.ymlonly — canary is out of scope) passes.gates-driftpasses (27 gates, unchanged).Note
Independent of PR #316 (the
rust-toolchain.tomlcomment fix). Both came from the same OSS sync report; this one addresses §4, that one §1.🤖 Generated with Claude Code