Skip to content

Surface the Forge API response in the tag_deploy Forge step#44

Open
silug wants to merge 3 commits into
mainfrom
robust-forge-deploy
Open

Surface the Forge API response in the tag_deploy Forge step#44
silug wants to merge 3 commits into
mainfrom
robust-forge-deploy

Conversation

@silug

@silug silug commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

curl --fail discards the response body, so a failed Forge publish reports only a bare HTTP status — the simp-gpasswd 2.0.0 release died with an unexplained 403 (valid token, new-module creation refused; the Forge's JSON error would have said why outright).

The deploy step now captures the response body and status via --write-out/--output, prints both, and fails on any non-2xx result. Same upload semantics otherwise (also quotes the find properly, replacing the odd ''*.tar.gz'' quoting).

Note for #42: that branch rewrites tag_deploy.yml wholesale — I've applied the same step change there so the two merge cleanly in either order.

🤖 Generated with Claude Code

https://claude.ai/code/session_01XCnDsYaJDLiP8z8tafz9Tp

curl --fail discards the response body, so a failed publish reports
only an HTTP status (the simp-gpasswd 2.0.0 release died with a bare
403). Capture the body and status, print both, and fail on any
non-2xx result so the Forge's own error message lands in the job log.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCnDsYaJDLiP8z8tafz9Tp
silug added a commit that referenced this pull request Jul 24, 2026
Mirrors #44 so the two branches merge cleanly in
either order.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCnDsYaJDLiP8z8tafz9Tp
A failed Forge upload previously left nothing to download - the
tarball existed only on the runner and the GitHub release carries no
assets. Upload it before attempting the Forge POST so every tag run,
pass or fail, leaves the exact archive available from the run page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCnDsYaJDLiP8z8tafz9Tp
@silug

silug commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

Added a second robustness improvement prompted by the gpasswd post-mortem: the built module archive is now uploaded as a workflow artifact before the Forge POST, so every tag run — pass or fail — leaves the exact tarball downloadable from the run page (previously a failed upload left nothing: no artifact, and the GitHub release carries no assets). Mirrored to #42 as before.

Release assets are permanent and publicly downloadable, unlike
workflow artifacts (authenticated, expiring). Uploaded before the
Forge POST so a failed publish still leaves the exact archive on the
release. --clobber keeps job re-runs idempotent.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XCnDsYaJDLiP8z8tafz9Tp
@silug

silug commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

Third improvement: the module archive is now also attached to the GitHub release (gh release upload --clobber, default GITHUB_TOKEN — same token the release-creation job already uses). Assets are permanent and public, unlike workflow artifacts (authenticated, 90-day expiry), and the upload happens before the Forge POST so a failed publish still leaves the exact archive on the release page. Note: prerelease tags skip this whole job (existing if:), so prereleases get neither Forge nor assets — unchanged behavior. Mirrored to #42.

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