Releases are tag-driven. Pushing a v* tag runs
.github/workflows/release.yml, which:
- Runs goreleaser to cross-compile all six targets,
create the GitHub Release with archives + checksums, and update the Homebrew
cask in
meabed/homebrew-tap. - Generates the per-platform npm packages from the release archives
(
npm/build-platform-packages.mjs) and publishes them. - Publishes the npm launcher package (
tailscale-proxy) with itsoptionalDependenciespinned to the release version.
Distribution channels: npx / npm and Homebrew (both pull from the GitHub Release artifacts).
| What | Where | Notes |
|---|---|---|
NPM_TOKEN |
repo secret | npm automation token with publish rights |
HOMEBREW_TAP_GITHUB_TOKEN |
repo secret | PAT with contents:write for the tap repo |
meabed/homebrew-tap |
a repo | empty public repo; goreleaser writes Casks/tsp.rb |
GITHUB_TOKEN is provided automatically by Actions.
gh secret set NPM_TOKEN --repo meabed/tailscale-proxy
gh secret set HOMEBREW_TAP_GITHUB_TOKEN --repo meabed/tailscale-proxy
gh repo create meabed/homebrew-tap --public --description "Homebrew tap"git tag v0.1.0
git push origin v0.1.0Watch it:
gh run watch --repo meabed/tailscale-proxy
gh release view v0.1.0 --repo meabed/tailscale-proxy
npm view tailscale-proxy versionNo tag, no publish — just prove the matrix compiles and archives:
goreleaser release --snapshot --clean --skip=publish,announce
ls dist/ # archives + checksums
node npm/build-platform-packages.mjs 0.0.0-test
ls npm/dist/ # per-platform npm packagesAfter a release, users update with tsp update (self-update for standalone
binaries; prints brew upgrade tsp / npm i -g tailscale-proxy@latest for managed
installs).