Repository navigation
nuxt-cloudflare: Required reuse on by default; a blocking dependency audit is never skipped - #231
Merged
Merged
Conversation
…ion handoff) workflows#229 made a main push reuse a green PR's Required result with no store, and favicon-checker (no R2 secrets) proved it live: its main CI went from 266-877 s to 25 s (run 41142752580). 43 of the 67 callers never turned reuse on. With it on by default, every caller gets it with its next pin bump, with no per-repo change. - required-reuse-pr-results defaults to true. A push repeats the gate only when its tree, caller workflow or inputs differ from a green pull request's full run. A PR that ran fast-only publishes no proof, so its push runs in full as before. - Reuse never applies with production-output-directory: a main push must build the artifact it hands off (stonx's runner-upload.yml; #4795's rollout). - The E2E key no longer includes required-reuse-pr-results. That input never changes what E2E tested, and leaving it in would have re-keyed every caller's E2E proof. - The opted-out graph tests now pin reuse false, and new tests cover the default and the handoff exclusion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ff guard follows Opus verify on this branch, 2 blockers: - B1 (already live for opted-in callers): the dependency audit warns on a pull request and blocks on the default branch, but the Required key has no event in it. A PR whose audit found a fixable high/critical minted a proof, and the push reused it, skipping the one run that blocks. Seen live: borderwaitstat-us 41012462435 and clawdle 40960642515/40925403234, each promoted. The PR audit now records `would-block=true` when it suppressed a block (findings, or no report). Build exports `audit-would-block`, and `Compute Required proof key` refuses to mint for that run, so its push runs in full. - B2: the production-handoff step still threw unless required-reuse-pr-results=false. Reuse never applies beside the handoff now, so the guard checks only build-script. Tests: the audit marks would-block only on a PR's suppressed block (findings or no report), never on a clean or unfixable-only tree, and a blocking event still fails the step. The proof key refuses an audit-would-block run, and the handoff test drops REUSE. Co-Authored-By: Claude Opus 5.5 <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.
This PR has two parts: required-reuse is now on by default, and a dependency audit that would block can no longer be skipped by reuse.
Why
The goal is one shared CI where every speedup reaches every repo.
required-reuse-pr-resultslets a default-branch push reuse a green PR's fullRequiredresult. 43 of the 67nuxt-cloudflare.ymlcallers never turned it on, and 36 of those had no R2 secrets, so it could not work for them. workflows#229 removed the need for the store. favicon-checker, which has no R2 secrets, proved it live: its main CI went from 266–877 s to 25 s (run 41142752580). With the default on, every caller gets reuse on its next pin bump.Change
required-reuse-pr-resultsnow defaults totrue. A push repeats the gate only when its tree, caller workflow or inputs differ from a green PR's full run. A PR that ran fast-only publishes no proof, so its push runs in full as before. Set the input tofalsefor a gate whose behaviour intentionally differs between PR and push.production-output-directoryset, reuse never applies, in bothreuse-planand Required'sREUSE_APPLIES, because the main push must build the artifact it hands off. That covers stonx'srunner-upload.ymland the #4795 rollout. The handoff guard that demandedrequired-reuse-pr-results=falsenow checks onlybuild-script.would-block=truewhen it suppressed a block (findings, or no report). Build exportsaudit-would-block, andCompute Required proof keymints nothing for that run, so its push runs the full gate, audit included.required-reuse-pr-results. The input never changes what E2E tested, and leaving it in would have re-keyed every caller's E2E proof.Known side effects (not blockers, per the verify)
checks-in-buildlose the Required-into-Build fold, because the fold requires reuse off: favicon-checker and sanitize-data. That's one extra job per run until they set reusefalseor the fold learns about reuse.pr-fast-onlycallers with noe2e-full-pathsnever mint a proof, so their pushes pay about 10–30 s ofReuse planfor nothing.test:changedis targeted on PRs.Tests
test_dependency_audit.py:would-blockis set only on a PR's suppressed block (fixable high, no report), never on a clean or unfixable-only tree. A blocking event still fails the step.test_fast_path.py:audit-would-blockrun;test_production_upload.py: the guard needs onlybuild-script.Review
One Opus
verify(loosening a gate default) found two blockers, B1 (the audit) and B2 (the handoff guard). Both are fixed above with tests.Gates
scripts/precheckon 58f6c88: exit 0, 40/40 commands passed. Its timed lines:PASS 12.86s bash scripts/install-actionlint-native-alerts.sh actionlint
PASS 0.97s actionlint -no-color -oneline .github/workflows/*.yml
PASS 0.39s python3 scripts/lint_callables.py
PASS 0.75s python3 scripts/test_actionlint_native_permissions.py
PASS 20.10s python3 scripts/test_apple_gate.py
PASS 1.25s python3 scripts/test_artifact_budget.py
PASS 0.78s python3 scripts/test_cache_paths.py
PASS 5.19s python3 scripts/test_ci_admission.py
PASS 5.23s python3 scripts/test_ci_artifact_store.py
PASS 7.67s python3 scripts/test_dependency_audit.py
PASS 1.36s python3 scripts/test_design_ledger.py
PASS 0.26s python3 scripts/test_design_publish.py
PASS 3.32s python3 scripts/test_e2e_build_artifact.py
PASS 6.53s python3 scripts/test_e2e_mode.py
PASS 7.04s python3 scripts/test_e2e_pr_subset.py
PASS 1.28s python3 scripts/test_e2e_quarantine.py
PASS 23.20s python3 scripts/test_e2e_reuse.py
PASS 21.82s python3 scripts/test_e2e_skip_paths.py
PASS 2.22s python3 scripts/test_eslint_cache.py
PASS 1.09s python3 scripts/test_exact_candidate.py
PASS 0.72s python3 scripts/test_extra_env.py
PASS 40.22s python3 scripts/test_fast_path.py
PASS 0.70s python3 scripts/test_flake_digest.py
PASS 4.35s python3 scripts/test_foundation_check.py
PASS 5.53s python3 scripts/test_package_auth_cleanup.py
PASS 0.78s python3 scripts/test_package_batch_metadata.py
PASS 0.93s python3 scripts/test_permission_ceiling.py
PASS 1.49s python3 scripts/test_playwright_toolchain.py
PASS 13.61s python3 scripts/test_preview_gate.py
PASS 2.57s python3 scripts/test_production_upload.py
PASS 0.10s python3 scripts/test_python_static_gate.py
PASS 1.07s python3 scripts/test_quality_gates.py
PASS 2.12s python3 scripts/test_red_main_listener.py
PASS 0.08s python3 scripts/test_required_gate.py
PASS 0.72s python3 scripts/test_reusable_browser_tests.py
PASS 8.24s python3 scripts/test_runner_default.py
PASS 19.80s python3 scripts/test_script_gates.py
PASS 1.41s python3 scripts/test_store_placement.py
PASS 18.32s python3 scripts/test_taskgraph.py
PASS 0.07s python3 scripts/test_tee_pipefail.py
🤖 Generated with Claude Code