mirror of https://github.com/fluxcd/flux2.git
Add shared packages release spec
Signed-off-by: Stefan Prodan <stefan.prodan@gmail.com>pull/3254/head
parent
a4d7e35cdd
commit
f09616e780
@ -0,0 +1,99 @@
|
||||
# Flux shared packages release spec
|
||||
|
||||
The Go packages in [github.com/fluxcd/pkg](https://github.com/fluxcd/pkg) are dedicated Go modules,
|
||||
each module has its own set of dependencies and release cycle.
|
||||
|
||||
These packages are primary meant for internal use in Flux controllers and
|
||||
for projects which integrate and/or extend Flux.
|
||||
|
||||
## Release versioning
|
||||
|
||||
The Flux packages are released by following the
|
||||
[Go module version numbering](https://go.dev/doc/modules/version-numbers) conventions:
|
||||
|
||||
- `NAME/vX.Y.Z-RC.W` release candidates e.g. `runtime/v1.0.0-RC.1`
|
||||
- `NAME/vX.Y.Z` stable releases e.g. `runtime/v1.0.0`
|
||||
|
||||
To import or update a Flux package in a Go project:
|
||||
|
||||
```shell
|
||||
go get github.com/fluxcd/pkg/runtime@v1.0.0
|
||||
```
|
||||
|
||||
### Release candidates
|
||||
|
||||
Release candidates are intended for testing new features or improvements.
|
||||
|
||||
In most cases, a maintainer will cut a release candidate of a package to include it
|
||||
in a Flux controller release candidate.
|
||||
|
||||
Release candidates are not meant to be included in Flux stable releases.
|
||||
Before cutting a stable release of a controller, all imported Flux packages must be pinned to a stable version.
|
||||
|
||||
### Patch releases
|
||||
|
||||
Patch releases are intended for critical bug fixes to the latest minor version, such as addressing security
|
||||
vulnerabilities or fixes to severe problems with no workaround.
|
||||
|
||||
Patch releases should not contain breaking changes, feature additions or any type of improvements.
|
||||
|
||||
Patch releases should be used when updating dependencies such as `k8s.io/api` from one patch version to another.
|
||||
|
||||
### Minor releases
|
||||
|
||||
Minor releases are intended for backwards compatible feature additions and improvements.
|
||||
|
||||
Minor releases should be used when updating dependencies such as `k8s.io/api` from one minor version to another.
|
||||
|
||||
Given that Kubernetes does not follow semver, a Kubernetes package minor version bump may introduce breaking changes.
|
||||
If a Kubernetes update requires a breaking change in a Flux package public API, then a major version release is necessary.
|
||||
|
||||
### Major releases
|
||||
|
||||
Major releases are intended for backwards incompatible feature additions and improvements.
|
||||
|
||||
Any change to a package public API, such as a change to a Go function signature, requires a new major release.
|
||||
|
||||
## Supported releases
|
||||
|
||||
For Flux Go packages we only support the latest stable release. We expect for projects that depend on
|
||||
Flux packages to stay up-to-date by automating the Go modules updates with tools like Dependabot.
|
||||
|
||||
In effect, this means we'll not backport CVE fixes to an older minor or major version of a package.
|
||||
|
||||
## Deprecation policy
|
||||
|
||||
A Flux Go package can be deprecated at any time. Usually a deprecated package may be replaced a
|
||||
different one, but there are no guarantees to always have a suitable replacement.
|
||||
|
||||
A deprecated package is marked as so in its `go.mod` e.g.
|
||||
|
||||
```go
|
||||
// Deprecated: use github.com/fluxcd/pkg/tar instead.
|
||||
module github.com/fluxcd/pkg/untar
|
||||
```
|
||||
|
||||
## 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.
|
Loading…
Reference in New Issue