Skip to content

fix(deploy): download release artifacts one at a time, by name - #48

Merged
semics-tech merged 1 commit into
mainfrom
fix/release-artifact-download
Jul 30, 2026
Merged

fix(deploy): download release artifacts one at a time, by name#48
semics-tech merged 1 commit into
mainfrom
fix/release-artifact-download

Conversation

@semics-tech

Copy link
Copy Markdown
Owner

The GitHub release job failed on v0.1.0-rc.1, and failed again identically on a re-run:

Unable to download artifact(s): Unable to download and extract artifact: Artifact download failed after 5 retries.

Not flakiness. A single unfiltered download-artifact with merge-multiple: true fetched five artifacts totalling ~168 MB concurrently, extracting them all into one shared directory. The log shows some completing before the batch gave up. Each is now named and lands in its own directory — nothing concurrent, nothing shared.

A second bug it was hiding

Naming the artifacts also keeps out buildx's *.dockerbuild build trace, which the unfiltered download swept in. It would have been published as a release asset and listed in SHA256SUMS beside the binaries, as though it were something to install.

A guard now fails the job if anything other than rsagent-worker-* is staged, rather than publishing it. Verified it trips on a planted .dockerbuild file.

SHA256SUMS is also now generated from the rsagent-worker-* prefix rather than *, so it can't list itself depending on when the shell creates the redirect target.

Context

npm and both container registries published correctly on rc.1 — trusted publishing works. This job was the only part of the pipeline still unproven, because it's gated on github.ref_type == 'tag' and so is skipped on every dry run.

🤖 Generated with Claude Code

https://claude.ai/code/session_01AyYg2j8FVkLjiaVcj5HCkj

The GitHub release job failed on v0.1.0-rc.1 and failed again identically
on a re-run:

  Unable to download artifact(s): Unable to download and extract artifact:
  Artifact download failed after 5 retries.

Not flakiness. A single unfiltered download with merge-multiple fetched five
artifacts totalling ~168 MB concurrently and extracted them all into one
shared directory; the log shows some completing before the batch gave up.
Now each is named and lands in its own directory, so nothing is concurrent
and nothing is shared.

Naming them also fixes a bug nobody had hit yet: buildx uploads a
*.dockerbuild build trace, and the unfiltered download swept it in. It would
have been published as a release asset and listed in SHA256SUMS beside the
binaries, as though it were something to install. A guard now fails the job
if anything other than rsagent-worker-* is staged, rather than publishing
it.

SHA256SUMS is generated from the rsagent-worker-* prefix rather than *, so
it cannot list itself whichever order the shell performs expansion and
redirection in.

npm and both container registries published correctly on rc.1, so this was
the only part of the pipeline still unproven — the release job is skipped on
a dry run, because it is gated on a tag.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AyYg2j8FVkLjiaVcj5HCkj
@semics-tech
semics-tech merged commit 55cc035 into main Jul 30, 2026
9 checks passed
@semics-tech
semics-tech deleted the fix/release-artifact-download branch July 30, 2026 19:01
semics-tech added a commit that referenced this pull request Jul 30, 2026
Promotes the release candidate.

rc.1 published correctly to npm and both container registries —
**trusted publishing works**. The two bugs it surfaced (concurrent
artifact download, and buildx's `.dockerbuild` trace being swept into
the release assets) are fixed in #48.

`prerelease=false`, so this moves npm's `latest` off the `0.0.0`
bootstrap placeholder and gives Docker Hub its `latest` and `0.1` tags —
the thing that makes plain `npm install` and `docker pull` work.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

https://claude.ai/code/session_01AyYg2j8FVkLjiaVcj5HCkj

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant