pages.yml: retry stable release asset download instead of failing hard - #21
Merged
Merged
Conversation
runs 33912509081/33912608422 (v1.0.7, 2026-09-04) both failed at
"gh release download v1.0.7 ... no assets to download". Cross-checked
against the release object: v1.0.7 was published (draft -> non-draft)
at 19:41:54, but release.yml's build job didn't finish uploading its
four .bin assets until 19:43:50-51 -- about 2 minutes later. The
`release: released` trigger fired as soon as the draft was manually
published, well before the still-running build/upload job attached
anything.
The pages.yml header comment claimed this was safe ("release.yml's own
job has long since finished, so its assets are already attached") --
that assumption doesn't hold when a maintainer publishes an
already-created-but-still-empty draft before the CI build finishes.
Rather than rely on that timing, the stable-assets download step now
retries up to 6 times over 2 minutes before failing, matching how long
the real build took. dev-latest's download is unaffected: its ordering
guarantee (asset upload happens inside Build's own job, before the job
completes) held in both failing runs.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YR639KWW77CszwJYKjmNa2
d3mocide
marked this pull request as ready for review
September 4, 2026 19:53
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
The two red "Deploy web flasher" runs (#20, #21) both failed at the same
step:
gh release download "v1.0.7" ... no assets to download.Cross-checking against the release object explains why: v1.0.7 went
draft → published at
19:41:54, butrelease.yml's build job didn'tfinish uploading its four
.binassets until19:43:50–51— about twominutes later.
release.ymlalways creates the release as a draft on atag push; here the draft existed (empty) before the build even started,
and was manually published from the GitHub UI while the build was still
running.
pages.yml'srelease: releasedtrigger fired the instant itwas published, well before any assets existed to download.
pages.yml's own header comment claimed this ordering was safe ("by thetime this fires, release.yml's own job has long since finished, so its
assets are already attached") — that assumption doesn't hold once a
draft can be published independently of the build finishing.
Changes
.github/workflows/pages.yml: "Download stable release assets" nowretries up to 6 times, 20s apart (~2 minutes total, matching how long
the real v1.0.7 build took) instead of failing on the first empty
response.
cited the actual failing run IDs.
CHANGELOG.md: terse entry for the fix.dev-latest's download is untouched — its ordering guarantee (Builduploads its own assets inside its own job, before the job completes)
held in both failing runs; only the manually-published stable-release
path was affected.
Test plan
python3 -c "import yaml; yaml.safe_load(open('.github/workflows/pages.yml'))"— YAML parsesworkflow_dispatchrun of Deploy web flasher against a draft published early)🤖 Generated with Claude Code
https://claude.ai/code/session_01YR639KWW77CszwJYKjmNa2
Generated by Claude Code