Summary
Portal currently ships through a single channel — a curl | bash (or PowerShell iex) one-liner that pulls from GitHub Releases. This roughly covers Linux and Windows, but macOS users expect brew, Go users expect go install, and cross-platform users expect npm. We discussed diversifying install channels (like tauri does) in portal-space on 2026-04-17.
This issue tracks the work to adopt goreleaser for a unified release pipeline and expand distribution to five channels.
Current State
| Channel |
Status |
Notes |
Linux install.sh |
✅ Shipped |
cmd/portal-tunnel/installer/install.sh |
Windows install.ps1 |
✅ Shipped |
cmd/portal-tunnel/installer/install.ps1 |
| Homebrew |
❌ Missing |
Expected by macOS users |
| npm |
❌ Missing |
Cross-platform fallback |
go install |
⚠️ Unverified |
Module path needs verification |
| goreleaser config |
❌ Missing |
.github/workflows/cd.yml releases manually |
Decision
Adopt goreleaser for the entire release pipeline. Keep the existing install.sh / install.ps1 (they are the de facto standard on Linux/Windows now). apk, deb, and rpm are out of scope.
Scope
P0 — goreleaser foundation
P1 — new channels
P2 — docs
Depends on
- In-progress tunnel TUI (bubble tea) work — release changes land after that
Out of Scope
apk / deb / rpm — no demand
- Scoop / Chocolatey / AUR — separate issue, later discussion
Done When
Summary
Portal currently ships through a single channel — a
curl | bash(or PowerShelliex) one-liner that pulls from GitHub Releases. This roughly covers Linux and Windows, but macOS users expectbrew, Go users expectgo install, and cross-platform users expectnpm. We discussed diversifying install channels (like tauri does) in portal-space on 2026-04-17.This issue tracks the work to adopt goreleaser for a unified release pipeline and expand distribution to five channels.
Current State
install.shcmd/portal-tunnel/installer/install.shinstall.ps1cmd/portal-tunnel/installer/install.ps1go install.github/workflows/cd.ymlreleases manuallyDecision
Adopt goreleaser for the entire release pipeline. Keep the existing
install.sh/install.ps1(they are the de facto standard on Linux/Windows now).apk,deb, andrpmare out of scope.Scope
P0 — goreleaser foundation
.goreleaser.yaml— multi-platform/arch build, archive, checksum, changelog.github/workflows/cd.ymlwithgoreleaser/goreleaser-actioninstall.sh/install.ps1asset naming with goreleaser conventionsgo install github.com/gosuda/portal-tunnel/cmd/portal-tunnel@latestworksP1 — new channels
brewsblock in goreleaser, set uphomebrew-portaltappostinstallscript that downloads the platform binary from GitHub ReleasesHOMEBREW_TAP_GITHUB_TOKEN,NPM_TOKENP2 — docs
README.mdQuick Start with all 5 install methodsDepends on
Out of Scope
apk/deb/rpm— no demandDone When
install.sh/install.ps1paths remain backward-compatible