Back to Frp

Release Process

doc/agents/release.md

0.69.12.9 KB
Original Source

Release Process

1. Update Release Notes

Edit Release.md in the project root with the changes for this version:

markdown
## Features
* ...

## Improvements
* ...

## Fixes
* ...

This file is used by GoReleaser as the GitHub Release body.

2. Bump Version

Update the version string in pkg/util/version/version.go:

go
var version = "0.X.0"

Commit and push to dev:

bash
git add pkg/util/version/version.go Release.md
git commit -m "bump version to vX.Y.Z"
git push origin dev

3. Pre-release Validation

Run the standard e2e suite locally:

bash
make e2e

For releases that touch compatibility-sensitive areas such as login, control connections, work connections, visitors, transport, or wire protocol handling, also run the manual compatibility e2e suite:

bash
make e2e-compatibility
make e2e-compatibility-floor

make e2e-compatibility builds the current frps and frpc, resolves the recent stable release baselines from GitHub, downloads or reuses their binaries, and tests current binaries against those historical releases. The default number of recent baselines is controlled by FRP_COMPAT_BASELINE_COUNT in the Makefile.

Downloaded release binaries are cached under:

text
.cache/e2e-compat/<version>/<os>_<arch>/

For a release validation run that must be exactly reproducible, pass an explicit baseline matrix instead of using the floating recent-release list:

bash
FRP_COMPAT_BASELINE_VERSIONS="0.X.0 0.Y.0" make e2e-compatibility

Use make e2e-compatibility-smoke for a quick single-baseline check while iterating locally. If GitHub release metadata requests are rate-limited, set GITHUB_TOKEN or use FRP_COMPAT_BASELINE_VERSIONS.

The compatibility floor is a support-policy decision, not a value that should change every release. Update FRP_COMPAT_FLOOR_VERSION only when the declared compatibility window changes.

4. Merge dev → master

Create a PR from dev to master:

bash
gh pr create --base master --head dev --title "bump version"

Wait for CI to pass, then merge using merge commit (not squash).

5. Tag the Release

bash
git checkout master
git pull origin master
git tag -a vX.Y.Z -m "bump version"
git push origin vX.Y.Z

6. Trigger GoReleaser

Manually trigger the goreleaser workflow in GitHub Actions:

bash
gh workflow run goreleaser --ref master

GoReleaser will:

  1. Run package.sh to cross-compile all platforms and create archives
  2. Create a GitHub Release with all packages, using Release.md as release notes

Key Files

FilePurpose
pkg/util/version/version.goVersion string
Release.mdRelease notes (read by GoReleaser)
.goreleaser.ymlGoReleaser config
package.shCross-compile and packaging script
.github/workflows/goreleaser.ymlGitHub Actions workflow (manual trigger)

Versioning

  • Minor release: v0.X.0
  • Patch release: v0.X.Y (e.g., v0.62.1)