Skip to content

Commit d1cf886

Browse files
committed
Keep prereleases out of stable package channels
1 parent 9a19631 commit d1cf886

3 files changed

Lines changed: 39 additions & 5 deletions

File tree

.github/workflows/release.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ jobs:
126126
environment: release
127127
permissions:
128128
contents: read
129-
if: startsWith(github.ref, 'refs/tags/v')
129+
# Only publish the normal AUR package for stable tags. Prereleases stay on GitHub Releases.
130+
if: startsWith(github.ref, 'refs/tags/v') && !contains(github.ref_name, '-')
130131
steps:
131132
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
132133
with:

.goreleaser.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,16 @@ notarize:
7373
changelog:
7474
use: github-native
7575

76+
release:
77+
prerelease: auto
78+
# Keep prerelease tags out of GitHub's latest release/install-script path.
79+
make_latest: "{{ if .Prerelease }}false{{ else }}true{{ end }}"
80+
7681
homebrew_casks:
7782
- name: fizzy
7883
ids: [default]
84+
# Do not update the normal tap for prerelease tags.
85+
skip_upload: auto
7986
repository:
8087
owner: basecamp
8188
name: homebrew-tap
@@ -92,6 +99,8 @@ homebrew_casks:
9299
scoops:
93100
- name: fizzy
94101
ids: [default]
102+
# Do not update the normal bucket manifest for prerelease tags.
103+
skip_upload: auto
95104
repository:
96105
owner: basecamp
97106
name: homebrew-tap

RELEASING.md

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,31 @@ Pushing the tag triggers the GitHub Actions release workflow, which:
2323

2424
## Versioning
2525

26-
Follow [semver](https://semver.org/). Use `v` prefix for tags: `v4.0.0`, `v4.1.0-rc.1`.
26+
Follow [semver](https://semver.org/). Use `v` prefix for tags: `v4.0.0`, `v4.0.0-beta1`, `v4.1.0-rc.1`.
27+
28+
Stable tags like `v4.0.0` publish to all normal distribution channels. Prerelease tags with a suffix like `-beta1`, `-beta.1`, or `-rc.1` are marked as GitHub prereleases and are not marked as the latest GitHub release.
29+
30+
## Beta / Prerelease Releases
31+
32+
Use a prerelease tag when technical testers need a build before the next stable version:
33+
34+
```bash
35+
make release VERSION=v4.0.0-beta1
36+
```
37+
38+
Prerelease behavior is intentionally conservative so existing package-manager users do not upgrade unless they explicitly opt in. Example behavior:
39+
40+
| Surface | Stable tag `v4.0.0` | Prerelease tag `v4.0.0-beta1` |
41+
|---------|----------------------|--------------------------------|
42+
| GitHub Releases | Published as a normal release and eligible to be GitHub's latest release. | Published as a GitHub prerelease and explicitly not marked latest. |
43+
| Release assets | Binaries, archives, checksums, SBOMs, `.deb`, and `.rpm` artifacts are uploaded. | Same artifacts are uploaded for explicit tester download/install. |
44+
| curl installer | Installs `v4.0.0` once GitHub marks it latest. | Does not install the prerelease via `releases/latest`; testers must download assets explicitly. |
45+
| Homebrew | Updates the normal `basecamp/tap/fizzy` cask. `brew upgrade fizzy` can move users to `v4.0.0`. | Does not update the normal cask (`skip_upload: auto`). Existing `brew upgrade fizzy` users stay on the latest stable cask. |
46+
| Scoop | Updates the normal `fizzy` manifest. `scoop update fizzy` can move users to `v4.0.0`. | Does not update the normal manifest (`skip_upload: auto`). Existing Scoop users stay on the latest stable manifest. |
47+
| AUR | Updates the normal `fizzy-cli` package if `AUR_KEY` is configured. | Skips the AUR publish job. Existing AUR users stay on the latest stable package. |
48+
| Go install | The git tag exists for users who explicitly request it. | The prerelease tag exists for users who explicitly request it; no package-manager manifest is updated. |
49+
50+
Technical testers can install prereleases explicitly from the GitHub release assets, for example by downloading the asset for their OS/architecture from `https://github.com/basecamp/fizzy-cli/releases/tag/v4.0.0-beta1`.
2751

2852
## CI Secrets
2953

@@ -50,9 +74,9 @@ Follow [semver](https://semver.org/). Use `v` prefix for tags: `v4.0.0`, `v4.1.0
5074
| Channel | Location | Updated by |
5175
|---------|----------|------------|
5276
| GitHub Releases | `basecamp/fizzy-cli/releases` | GoReleaser |
53-
| Homebrew | `basecamp/homebrew-tap` Casks/fizzy.rb | GoReleaser |
54-
| Scoop | `basecamp/homebrew-tap` fizzy.json | GoReleaser |
55-
| AUR | `aur.archlinux.org/packages/fizzy-cli` | `publish-aur.sh` |
77+
| Homebrew | `basecamp/homebrew-tap` Casks/fizzy.rb | GoReleaser (stable tags only) |
78+
| Scoop | `basecamp/homebrew-tap` fizzy.json | GoReleaser (stable tags only) |
79+
| AUR | `aur.archlinux.org/packages/fizzy-cli` | `publish-aur.sh` (stable tags only) |
5680
| Go install | `go install github.com/basecamp/fizzy-cli/cmd/fizzy@latest` | Go module proxy |
5781
| curl installer | `scripts/install.sh` | Manual |
5882

0 commit comments

Comments
 (0)