Skip to content

feat: mirror installer binaries to DigitalOcean Spaces - #107

Merged
scott merged 2 commits into
mainfrom
feature/spaces-release-mirror
Sep 7, 2026
Merged

feat: mirror installer binaries to DigitalOcean Spaces#107
scott merged 2 commits into
mainfrom
feature/spaces-release-mirror

Conversation

@scott

@scott scott commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

Summary

Move the one-line installer and gander --upgrade off GitHub’s rate-limited download/API path onto https://release.gander.md (DigitalOcean Spaces). GitHub Releases stay the Homebrew source of truth and the fallback if the mirror is down.

  • Release workflow uploads gander-* binaries, checksums, install.sh, and latest.json after publishing the GitHub Release.
  • publish-spaces.yml re-uploads install.sh on main and supports workflow_dispatch to backfill an existing tag.
  • install.sh downloads from the mirror first, then GitHub, then source.
  • gander --upgrade reads latest.json first, then the GitHub Releases API.

After merge

  1. Confirm GitHub Actions secrets SPACES_ACCESS_KEY and SPACES_SECRET_KEY are set on gandermd/gander-cli.
  2. If the bucket is not gander-releases in nyc3, set Actions variables SPACES_BUCKET / SPACES_REGION / SPACES_ENDPOINT.
  3. Point release.gander.md at the Spaces CDN (custom subdomain + cert; a CNAME alone does not mint TLS).
  4. Run Actions → publish-spaces → Run workflow with the current v* tag (or empty for latest) so existing binaries are on the mirror before the next cut.

The cut-release skill does not upload; it already waits for the release workflow. scripts/release.sh now HEADs https://release.gander.md/latest.json after that wait.

Test plan

  • go test ./..., go vet ./..., go build ./...
  • shellcheck scripts/publish-spaces.sh scripts/release.sh
  • install.sh --dry-run prints https://release.gander.md/latest/gander-…
  • After secrets + CDN: workflow_dispatch backfill, then curl -fsSI https://release.gander.md/latest.json and a platform binary
  • curl -fsSL https://release.gander.md/install.sh | bash -s -- --dry-run

Serve the one-liner and gander --upgrade from https://release.gander.md
so GitHub rate limits no longer sit on the hot path. GitHub Releases
remain the Homebrew source and the fallback if the mirror is down.
DigitalOcean Spaces names are lowercase; the bucket is gander, not
gander-releases.
@scott
scott merged commit 08028a6 into main Sep 7, 2026
1 check passed
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