You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
flux2/docs/release/procedure.md

61 lines
2.8 KiB
Markdown

# Flux release procedure
## Shared packages release procedure
As a project maintainer, to release a package, tag the `main` branch using semver,
and push the signed tag to upstream:
```shell
git clone https://github.com/fluxcd/pkg.git
git switch main
git tag -s -m "runtime/v1.0.0" "runtime/v1.0.0"
git push origin "runtime/v1.0.0"
```
**Note** that the Git tags must be cryptographically signed with your private key
and your public key must be uploaded to GitHub.
Release candidates of a specific package can be cut from the `main` branch or from an `dev-<pkg-name>` branch:
```shell
git switch dev-runtime
git tag -s -m "runtime/v1.1.0-RC.1" "runtime/v1.1.0-RC.1"
git push origin "runtime/v1.1.0-RC.1"
```
Before cutting a release candidate, make sure the tests are passing on the `dev` branch.
## Controllers release procedure
As a project maintainer, to release a controller and its API:
1. Checkout the `main` branch and pull changes from remote.
2. Create a new branch from `main` i.e. `release-<next semver>`. This
will function as your release preparation branch.
3. Update the `github.com/fluxcd/<NAME>-controller/api` version in `go.mod`
4. Add an entry to the `CHANGELOG.md` for the new release and change the
`newTag` value in ` config/manager/kustomization.yaml` to that of the
semver release you are going to make. Commit and push your changes.
5. Create a PR for your release branch and get it merged into `main`.
6. Create a `api/<next semver>` tag for the merge commit in `main` and push it to remote.
7. Create a `<next semver>` tag for the merge commit in `main` and push it to remote.
8. Confirm CI builds and releases the newly tagged version.
**Note** that the Git tags must be cryptographically signed with your private key
and your public key must be uploaded to GitHub.
## Distribution release procedure
As a project maintainer, to release a new Flux version and its CLI:
- `v2.X.Y-RC.Z` (Branch: `release-2.X`)
- When the `main` branch is feature-complete for `v2.X`, we will cherrypick PRs essential to `v2.X` to the `release-2.X` branch.
- We will cut the first [release candidate](#release-candidates) by tagging the `release-2.X` as `v2.X.0-RC.0`.
- If we're not satisfied with `v2.X.0-RC.0`, we'll keep releasing RCs until all issues are solved.
- `v2.X.0` (Branch: `release-2.X`)
- The final release is cut from the `release-2.X` branch and tagged as `v2.X.0`.
- `v2.X.Y, Y > 0` (Branch: `release-2.X`)
- [Patch releases](#patch-releases) are released as we cherrypick commits from `main` into the `release-2.X` branch.
- Flux controller updates (patch versions of a controller minor release included in `v2.X.0`) PRs are merged directly into the `release-2.X` branch.
- A patch release is cut from the `release-2.X` branch and tagged as `v2.X.Y`.