docs/prerelease-builds.md
MCPProxy supports automated prerelease builds from the next branch with signed and notarized macOS installers.
main branch: Stable releases (hotfixes and production builds)next branch: Prerelease builds with latest featuresdmg-darwin-arm64 (Apple Silicon Macs)dmg-darwin-amd64 (Intel Macs)versioned-linux-amd64, versioned-windows-amd64, etc. (other platforms)# List recent prerelease runs
gh run list --workflow="Prerelease" --limit 5
# Download specific artifacts from a run
gh run download <RUN_ID> --name dmg-darwin-arm64 # Apple Silicon
gh run download <RUN_ID> --name dmg-darwin-amd64 # Intel Mac
gh run download <RUN_ID> --name versioned-linux-amd64 # Linux
{last_git_tag}-next.{commit_hash}v0.8.4-next.5b63e2dmcpproxy and mcpproxy-tray binariesRelease candidates are opt-in, fully-built prereleases published to the GitHub pre-release channel for testers who want to validate an upcoming version before it ships to stable.
vMAJOR.MINOR.PATCH-rc.N — e.g. v0.37.0-rc.1, v0.37.0-rc.2.-rc.N suffix (hyphen + dot before the number) is required. It is what keeps RC tags off the stable channels: the Homebrew, Linux-repo, docs, marketing, MCP-registry, and core build/release jobs in release.yml are gated on !contains(github.ref_name, '-').v0.37.0.RC1 or v0.37.0RC1 — without the hyphen they read as stable tags and would bypass those guards.A v*-rc.* tag runs only prerelease.yml, which mirrors the full stable build matrix:
| Platform | Artifacts | Signing |
|---|---|---|
| macOS (arm64, amd64) | DMG + PKG installers, tar.gz | Apple Developer ID signed and notarized |
| Linux (arm64, amd64) | tar.gz, .deb, .rpm | — |
| Windows (arm64, amd64) | .zip, installer (.exe) | Not SignPath-signed (see note below) |
The GitHub release is created with prerelease: true, so it does not become releases/latest.
Windows signing: stable releases are Authenticode-signed via a dedicated SignPath job (
sign-windows) inrelease.yml.prerelease.ymlintentionally omits that step (SignPath signing adds ~1h per arch), so RC Windows installers are unsigned and will trigger a SmartScreen prompt. If signed Windows RCs become a requirement, port thesign-windowsjob intoprerelease.yml.
update-homebrew guarded).publish-linux-repos guarded).mcp-registry guarded).deploy-docs, trigger-marketing-update guarded).releases/latest, which excludes prereleases (native/macos/MCPProxy/MCPProxy/Services/UpdateService.swift), plus a semver downgrade guard so an -rc is never treated as "newer" than the matching stable.internal/tray/tray.go → releases/latest). Set MCPPROXY_ALLOW_PRERELEASE_UPDATES=true to opt in to RC update offers.Download the assets directly from the pre-release on the Releases page, or with the CLI:
gh release list --repo smart-mcp-proxy/mcpproxy-go # pre-releases are tagged "Pre-release"
gh release download v0.37.0-rc.1 --repo smart-mcp-proxy/mcpproxy-go
prerelease.yml): Triggered on next branch pushes and on v*-rc.* / v*-next.* tags. Publishes a GitHub pre-release.release.yml): Triggered on v* tags, but every job is gated on !contains(github.ref_name, '-') so RC/prerelease tags are skipped — a v*-rc.* tag therefore fires only prerelease.yml, never the stable release pipeline.