Repository navigation
nuxt-cloudflare: Required and E2E proofs reuse with no store, from GitHub's record - #229
Merged
Merged
Conversation
…tHub's record 36 of the 43 nuxt-cloudflare callers that do not reuse a PR's Required on main pass no CI_ARTIFACTS_R2_* secrets. Some are in the clients org, which never receives them. Without a pointer, a main push ran the full gate. The PR's `Publish ... proof <key>` step already runs, and passes, without credentials (it just records nothing), and #227 bound it to the callable's own runner header. So on a push with no pointer, Reuse plan and E2E plan now find the merged pull request's run on GitHub. The PR comes from the push's subject (a merge commit names its branch; a squash subject is the PR title, i.e. the run's display_title), or from a PR head that already held the pushed tree. The run must pass the same rules as a pointer's run (attestedRun). It needs only actions: read. Opt-in is unchanged (required-reuse-pr-results / e2e-reuse-pr-results). taskgraph.yml's byte-equal store-client copy follows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e texts Opus verify (no blockers) on this branch: - A Dependabot pull request gets no NVAULT_TOKEN or store secrets, so it never vouches in findProofOnGitHub (actor or triggering actor). - Texts and log messages that said a run without the store publishes no proof and that the push runs in full now say what happens. A store error still throws and runs the full gate; the comment no longer says it falls back. - e2e-reuse-pr-results (default true) now reuses E2E on a store-less caller's push too; its description says so. - Tests: Dependabot actor and triggering actor, a tree the run did not test, and attempt 2. 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 makes
nuxt-cloudflare.ymlreuse a PR's Required or E2E result on the default-branch push without the R2 store. GitHub's own record is enough.Why this, not "run the taskgraph engine inside nuxt-cloudflare.yml"
nuxt-cloudflare.ymlalready has two of taskgraph's three wins: parallel fast lanes, and whole-run main-push reuse (required-reuse-pr-results). Taskgraph's per-task keys only beat whole-run reuse once a repo narrows itsinputs, and that is per-repo config.The count across the 67 callers: 24 reuse today and 43 don't. Of those 43, 36 pass no
CI_ARTIFACTS_R2_*secrets, including thenarduk-enterprises-clientsrepos that call this callable, and they can never receive them. So the gap is the store, and this closes it for every caller on its next pin bump.Change
Publish Required proof <key>/Publish full E2E proof <key>step already runs, and succeeds, without credentials. It only skips writing a pointer. workflows#227 bound that step's job to the callable's own runner header, so the step itself is the proof.findProofOnGitHub. It runs whenfindProoffinds no pointer, for no credentials or no pointer stored. A store error still throws and runs the full gate.display_title. A PR head that already held the pushed tree also counts.attestedRun): a successful same-repositorypull_requestrun of the caller workflow, a green<job> / Requiredthat this callable wrote, and the step with this key.NVAULT_TOKENor store secrets.e2e-reuse-pr-resultsdefaults totrue, so after a repin a store-less caller also reuses E2E on its push when the PR ran the full E2E. Its description now says so.required-reuse-pr-resultsstays opt-in.taskgraph.yml's byte-equal store-client copy follows.Proof
test_e2e_reuse.pycovers store-free reuse through a squash title, a merge branch, a matching head tree, and attempt 2. It refuses:test_fast_path.pycovers the Required path the same way.required-reuse-pr-results, merge, and read the push.Review
verifyfound no blockers. It found that the key covers the tested tree, and every job checks out that tree, so the candidate search only affects speed.Gates
scripts/precheckon 3532e88: exit 0, 40/40 commands passed. Its timed lines:PASS 15.05s bash scripts/install-actionlint-native-alerts.sh actionlint
PASS 0.94s actionlint -no-color -oneline .github/workflows/*.yml
PASS 0.30s python3 scripts/lint_callables.py
PASS 0.71s python3 scripts/test_actionlint_native_permissions.py
PASS 20.62s python3 scripts/test_apple_gate.py
PASS 1.35s python3 scripts/test_artifact_budget.py
PASS 0.90s python3 scripts/test_cache_paths.py
PASS 6.11s python3 scripts/test_ci_admission.py
PASS 7.13s python3 scripts/test_ci_artifact_store.py
PASS 6.62s python3 scripts/test_dependency_audit.py
PASS 1.40s python3 scripts/test_design_ledger.py
PASS 0.26s python3 scripts/test_design_publish.py
PASS 2.36s python3 scripts/test_e2e_build_artifact.py
PASS 5.40s python3 scripts/test_e2e_mode.py
PASS 7.66s python3 scripts/test_e2e_pr_subset.py
PASS 1.12s python3 scripts/test_e2e_quarantine.py
PASS 27.00s python3 scripts/test_e2e_reuse.py
PASS 40.85s python3 scripts/test_e2e_skip_paths.py
PASS 1.82s python3 scripts/test_eslint_cache.py
PASS 1.11s python3 scripts/test_exact_candidate.py
PASS 0.80s python3 scripts/test_extra_env.py
PASS 54.75s python3 scripts/test_fast_path.py
PASS 1.30s python3 scripts/test_flake_digest.py
PASS 6.73s python3 scripts/test_foundation_check.py
PASS 9.64s python3 scripts/test_package_auth_cleanup.py
PASS 1.74s python3 scripts/test_package_batch_metadata.py
PASS 1.72s python3 scripts/test_permission_ceiling.py
PASS 3.05s python3 scripts/test_playwright_toolchain.py
PASS 13.50s python3 scripts/test_preview_gate.py
PASS 1.57s python3 scripts/test_production_upload.py
PASS 0.09s python3 scripts/test_python_static_gate.py
PASS 1.32s python3 scripts/test_quality_gates.py
PASS 2.70s python3 scripts/test_red_main_listener.py
PASS 0.09s python3 scripts/test_required_gate.py
PASS 0.72s python3 scripts/test_reusable_browser_tests.py
PASS 8.57s python3 scripts/test_runner_default.py
PASS 17.48s python3 scripts/test_script_gates.py
PASS 1.36s python3 scripts/test_store_placement.py
PASS 24.88s python3 scripts/test_taskgraph.py
PASS 0.22s python3 scripts/test_tee_pipefail.py
Refs fleet#1180
🤖 Generated with Claude Code