Skip to content

feat: add Windows binary to release pipeline and self-updater#246

Merged
CalebisGross merged 2 commits intomainfrom
feat/windows-self-update
Mar 20, 2026
Merged

feat: add Windows binary to release pipeline and self-updater#246
CalebisGross merged 2 commits intomainfrom
feat/windows-self-update

Conversation

@jkbennitt
Copy link
Copy Markdown
Member

Summary

  • Add windows/amd64 to the release workflow build matrix and goreleaser config
  • Windows releases use .zip format (vs .tar.gz for macOS/Linux)
  • Update self-updater to detect platform and extract from the correct archive format (extractBinaryFromZip for Windows, extractBinaryFromTarGz for others)
  • Release checksums now cover both .tar.gz and .zip assets

Context

The dashboard "Click to update" button returned no release asset found for windows/amd64 because no Windows binary was included in GitHub Releases. This PR adds Windows to the release pipeline so the self-updater works end-to-end.

Test plan

  • go test ./... — all 19 packages pass
  • go vet ./... — clean
  • make build — compiles on Windows
  • Verified update-check API returns correct response on Windows
  • Verified dashboard update button no longer errors (tested via Playwright)

🤖 Generated with Claude Code

The release workflow, goreleaser config, and self-updater now support
Windows amd64. Releases produce a .zip archive for Windows alongside
.tar.gz for macOS/Linux. The updater detects the platform and extracts
from the correct archive format.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@jkbennitt jkbennitt requested a review from CalebisGross March 20, 2026 13:47
@jkbennitt
Copy link
Copy Markdown
Member Author

@CalebisGross — this adds Windows to the release pipeline so the dashboard self-update button works on Windows. The updater now handles .zip extraction. Ready for review.

@CalebisGross
Copy link
Copy Markdown
Collaborator

Nice work — clean PR, well-scoped. Two things to address:

1. Add test coverage for extractBinaryFromZip

TestExtractBinary and TestExtractBinaryNotFound only exercise the tar.gz path. The new zip extraction has no tests. Should be straightforward — mirror the existing tests but build a zip archive instead.

2. Checksum glob is fragile

run: sha256sum *.tar.gz *.zip > checksums.txt

If either glob matches nothing (e.g. a matrix entry is skipped or fails), sha256sum gets a literal *.zip as an argument and errors out, which breaks the release job. Quick fix:

run: |
  shopt -s nullglob
  sha256sum *.tar.gz *.zip > checksums.txt

Everything else looks good — archiveExt() helper, the shell: bash additions, zip bomb limit carried over, goreleaser ignoring windows/arm64.

Add TestExtractBinaryFromZip and TestExtractBinaryFromZipNotFound to
cover the new zip extraction path. Use shopt nullglob in the release
checksum step so sha256sum doesn't error if a glob matches nothing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@CalebisGross CalebisGross merged commit 27fbb1a into main Mar 20, 2026
7 checks passed
@CalebisGross CalebisGross deleted the feat/windows-self-update branch March 20, 2026 14:05
@CalebisGross
Copy link
Copy Markdown
Collaborator

Both items addressed, looks good. Thanks Jason!

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.

2 participants