Skip to content

Retry setup-deno once so release 504s can't fail Deno legs - #2042

Merged
Mikola Lysenko (mikolalysenko) merged 1 commit into
mainfrom
ci-janitor/setup-deno-retry
Nov 9, 2026
Merged

Mikola Lysenko (mikolalysenko) merged 1 commit into
mainfrom
ci-janitor/setup-deno-retry

Conversation

@mikolalysenko

@mikolalysenko Mikola Lysenko (mikolalysenko) commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

denoland/setup-deno downloads 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 the e2e (ubuntu-latest, e2e_vex_build, ... deno:: --ignored) leg on #2018 (run 42571326428, job 129009602302): three Unexpected HTTP response: 504 between 06:12:05 and 06:12:47, then ##[error]. That turned ci-ok red 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 with continue-on-error: true. Then run Setup 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.py enforces it: same uses: SHA, steps.<id>.outcome != 'success' guard, and no continue-on-error on the retry. If the second attempt also fails, the leg still fails.

Both matrix.deno legs (the PR-tier 2.9.7 row and the full-tier 1.46.3 row) use this step.

Proof

  • python3 -m unittest discover -s scripts/tests: 411 tests pass, including the CiWorkflowContract checks on attempt-1/attempt-2 pairs.
  • scripts/check-tool-pins.py .github/workflows/ci.yml reports no ci.yml violations. The 7 it reports in *-compatibility.yml were already on main.
  • The YAML parses. actionlint and zizmor aren't installed in this environment.

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-deno exhausts 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 like Setup Python and is what test_merge_queue_fail_fast.py expects for attempt pairs.

Reviewed by Cursor Bugbot for commit 899f9f5. Configure here.


Generated by Claude Code

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
@mikolalysenko Mikola Lysenko (mikolalysenko) added the ci-janitor Opened by the CI janitor routine (flakes, redundant tests, CI perf) label Nov 9, 2026
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

bugbot run


Generated by Claude Code

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ 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.

@mikolalysenko Mikola Lysenko (mikolalysenko) added the Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review label Nov 9, 2026
@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

Ready for review at 899f9f5.


Generated by Claude Code

@mikolalysenko

Copy link
Copy Markdown
Collaborator Author

Final review brief

What it does: Splits the e2e job's Setup Deno step into two attempts. Attempt 1 is capped at 4 min and continue-on-error; attempt 2 runs only if attempt 1 didn't succeed, so a short github.com release-CDN 504 can't fail a Deno leg, while a second failure still fails the leg.

Risk: low. CI-only, one step in ci.yml; same pattern as #2039/#2040/#2041. If Deno setup really is broken, attempt 2 fails the leg as before (plus up to 4 min).

Look here:

  • ci.yml:1796: attempt 1 (id, timeout-minutes: 4, continue-on-error)
  • ci.yml:1810: attempt 2 guard, keeps matrix.deno != '' so non-Deno legs still skip both

Verified: read the full diff (17 lines, one file); attempt 2 is the very next step and has no continue-on-error; no other step references the old step name; branch is up to date with main; CHANGELOG.md untouched; scripts/tests/test_merge_queue_fail_fast.py 11/11 pass locally. CI: ci-ok and clippy green on 899f9f5; Bugbot reviewed, no findings; no open review threads.

Changes I made: none.

Auto-merge (squash) is armed, so approving sends it straight to the merge queue.


Generated by Claude Code

@mikolalysenko
Mikola Lysenko (mikolalysenko) added this pull request to the merge queue Nov 9, 2026
Merged via the queue into main with commit efdef91 Nov 9, 2026
51 checks passed
@mikolalysenko
Mikola Lysenko (mikolalysenko) deleted the ci-janitor/setup-deno-retry branch November 9, 2026 19:45
Mikola Lysenko (mikolalysenko) pushed a commit that referenced this pull request Nov 9, 2026
All three merged to main while #2038 was in the merge queue and ship
in 5.1.0.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci-janitor Opened by the CI janitor routine (flakes, redundant tests, CI perf) Ready for review Agent-verified: mergeable, CI green, Bugbot clean — awaiting human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants