Fix installer pointing at an unpublished release (WAX-605) - #76
Merged
Conversation
wasix.cc served an install.sh pinned to v0.4.5 while that GitHub release was still a draft. Draft assets 404 for anonymous downloads, so the installer piped a 9-byte "Not Found" body into tar and died with "Unrecognized archive format". Three fixes, none of which alone is sufficient: - release.yml no longer creates draft releases. The manual publish step was a standing outage waiting to happen, and everything gating that job (version consistency, build, crates.io publish) has already passed by the time the release is cut. - install.sh downloads to a file with curl --fail instead of piping into tar, so an HTTP error reports the URL that failed rather than a bogus archive-format error. - deploy-website.yml no longer ships install.sh on merge to main. It raced ahead of the release build by design, so wasix.cc advertised a version that did not exist yet on every single release. install.sh now deploys after Release succeeds; other installer changes still deploy immediately. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR prevents curl -fsSL https://wasix.cc | sh from breaking due to the installer pointing at a GitHub Release asset that isn’t publicly downloadable yet (draft releases and/or deploy timing), and improves installer failure behavior when downloads fail.
Changes:
- Updates
install.shto download release tarballs to a file withcurl -fL/wgetand fail loudly before extraction on HTTP errors. - Updates
release.ymlto stop creating draft releases so release assets are anonymously downloadable immediately. - Updates
deploy-website.ymlto avoid deployinginstall.shahead of a successful Release by movinginstall.shdeployment to aworkflow_runtrigger.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| installer/public/install.sh | Avoids piping HTTP error bodies into tar; fails clearly on download failures. |
| .github/workflows/release.yml | Publishes non-draft GitHub releases so assets are publicly accessible. |
| .github/workflows/deploy-website.yml | Adjusts deployment triggers/checkout behavior to better align install.sh deployment with successful releases. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
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.
Fixes WAX-605.
What was broken
curl -fsSL https://wasix.cc | shfailed withtar: Error opening archive: Unrecognized archive format.wasix.cc served an
install.shpinned toVERSION="0.4.5", but the v0.4.5 GitHub release was still a draft. Draft release assets 404 for anonymous downloads, so the asset URL returned the 9-byte bodyNot Found— matching the100 9 100 9in the report.curl -Lwithout-fpiped those 9 bytes straight intotar, which blamed the archive format instead of the 404.The release itself built fine and published to crates.io, which is why
cargo install wasixccworked as a workaround.The draft has since been published manually, so installs work again. This PR stops it recurring.
Changes
release.yml— stop creating draft releases.draft: truemeant every release needed a manual "Publish release" click; 0.4.4 got one, 0.4.5 did not. Everything gating that job (version consistency, build, crates.io publish) has already passed by the time the release is cut, so the draft state bought nothing and silently broke the installer.install.sh— fail loudly on HTTP errors. Downloads to a file withcurl -fL/wgetand checks the exit status before extracting, instead of piping the response intotar. A missing asset now says:deploy-website.yml— stop deploying install.sh ahead of the release. The website deployed on any push tomaintouchinginstaller/**, so it went live pinning 0.4.5 37 seconds before the release workflow even started (11:58:17Zvs11:58:54Z). That window existed on every release, draft or not.install.shis now excluded from the push trigger and ships viaworkflow_runonce Release succeeds; other installer changes (landing page,server.py) still deploy immediately, andworkflow_dispatchremains as a manual escape hatch.Testing
Ran the real
download_wasixccagainst an isolated$HOME:wasixccenv,--versionreportswasixcc 0.4.5, no leftover tarballError: Failed to download <url>Error: Failed to download <url>Also confirmed
sh -n install.shpasses and both workflow YAMLs parse.🤖 Generated with Claude Code