Repository navigation
Retry setup-deno once so release 504s can't fail Deno legs - #2042
Conversation
denoland/setup-deno downloads Deno from a github.com release and gives up after three tries in about 30 seconds. On 2026-11-09 a release-CDN 504 blip failed the e2e_vex_build leg that way (run 42571326428) and turned ci-ok red on a PR whose code was fine. Run the step capped at 4 minutes with continue-on-error, and repeat it once in the very next step without tolerance, the same shape the other retried setup steps use and test_merge_queue_fail_fast.py enforces. A second failure still fails the leg. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011f9aeQRBCggTZw6AjQX6MY
|
bugbot run Generated by Claude Code |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 899f9f5. Configure here.
|
Ready for review at
Generated by Claude Code |
Final review briefWhat it does: Splits the e2e job's Risk: low. CI-only, one step in Look here:
Verified: read the full diff (17 lines, one file); attempt 2 is the very next step and has no Changes I made: none. Auto-merge (squash) is armed, so approving sends it straight to the merge queue. Generated by Claude Code |
Problem
denoland/setup-denodownloads Deno from a github.com release and gives up after three tries in about 30 s. On 2026-11-09 the same release-CDN 504 outage that failed the nightly (run 42568829044) also failed thee2e (ubuntu-latest, e2e_vex_build, ... deno:: --ignored)leg on #2018 (run 42571326428, job 129009602302): threeUnexpected HTTP response: 504between 06:12:05 and 06:12:47, then##[error]. That turnedci-okred on a PR whose code had nothing to do with it. In the merge queue the same thing would evict the entry.The other 504-exposed steps from that outage are already handled in open PRs: setup-ruby (#2041), the lint-ecosystems installers (#2040) and vexctl (#2039). None of them touch setup-deno.
Root cause
setup-deno retries only briefly, so a release-CDN outage of a few minutes fails the step.
Fix
Run
Setup Deno (attempt 1)capped at 4 min withcontinue-on-error: true. Then runSetup Deno (attempt 2)as the very next step, with no tolerance, only when attempt 1 failed. This is the same shape as the other retried setup steps.scripts/tests/test_merge_queue_fail_fast.pyenforces it: sameuses:SHA,steps.<id>.outcome != 'success'guard, and nocontinue-on-erroron the retry. If the second attempt also fails, the leg still fails.Both
matrix.denolegs (the PR-tier2.9.7row and the full-tier1.46.3row) use this step.Proof
python3 -m unittest discover -s scripts/tests: 411 tests pass, including theCiWorkflowContractchecks on attempt-1/attempt-2 pairs.scripts/check-tool-pins.py .github/workflows/ci.ymlreports no ci.yml violations. The 7 it reports in*-compatibility.ymlwere already on main.Tests moved or removed
None. The diff is one file (
ci.yml) and its hunk doesn't overlap #2039, #2040 or #2041.Generated by Claude Code
Note
Low Risk
CI workflow-only hardening for flaky Deno downloads; no product code, auth, or data paths change.
Overview
Adds a two-step Deno install in the e2e job template so transient GitHub release 504s no longer fail Deno matrix legs after
denoland/setup-denoexhausts its short internal retries.Setup Deno (attempt 1) gets a 4-minute cap and
continue-on-error: true; Setup Deno (attempt 2) runs immediately afterward only when attempt 1 did not succeed, with the same pinned action and version but no tolerance on failure. This matches the existing retry shape used for steps likeSetup Pythonand is whattest_merge_queue_fail_fast.pyexpects for attempt pairs.Reviewed by Cursor Bugbot for commit 899f9f5. Configure here.
Generated by Claude Code