Skip to content

Commit

Permalink
📖 Add documentation for release process (ionos-cloud#159)
Browse files Browse the repository at this point in the history
**What is the purpose of this pull request/Why do we need it?**

Add intermediate release docs for the current process. Also removes the
kubebuilder release tools as they are not needed anymore

**Checklist:**
- [x] Documentation updated
- [x] Includes
[emojis](https://github.com/kubernetes-sigs/kubebuilder-release-tools?tab=readme-ov-file#kubebuilder-project-versioning)
  • Loading branch information
lubedacht authored and Mattes83 committed Jun 27, 2024
1 parent 869c983 commit d78e0c1
Show file tree
Hide file tree
Showing 5 changed files with 196 additions and 119 deletions.
11 changes: 7 additions & 4 deletions .github/ISSUE_TEMPLATE/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,14 @@ Release vX.X.X

## Checklist

- [ ] Update metadata & clusterctl-settings.
- [ ] Update version in e2e config.
- [ ] (Minor Release) Update metadata & clusterctl-settings.
- [ ] (Minor Release) Update version in e2e config.
- [ ] Update docs (compatibility table; usage etc).
- [ ] Create release branch `release-X.Y`
- [ ] (Minor Release) Create release branch `release-X.Y`
- [ ] (Patch Release) Cherry-pick all relevant changes into the release branch.
- [ ] Create tag `vX.Y.Z`.
- [ ] Update the draft release notes with generated release notes from `sigs.k8s.io/cluster-api/hack/tools/release/notes`
- [ ] Update the created draft release to include things like breaking changes or important notes.
- [ ] Update the draft release notes with generated release notes from `sigs.k8s.io/kubebuilder-release-tools/notes`
- [ ] Check that the release contains the relevant artifacts.
- [ ] Publish the release.
- [ ] Test provider installation/upgrade with clusterctl
77 changes: 77 additions & 0 deletions docs/release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Release

> [!NOTE]
> This document is based on the initial learnings from the release process and is therefore subject to change.
## Preparing the release

For each release, a milestone needs to be in place. All PRs that are part of the release need to be assigned to
the milestone.

This will also make it easier to filter for the correct commits, that should be cherry-picked later.

### Create an issue

To track the progress of the release, we need to create an issue. Make use of the `Release` issue template.

### Patch release

A patch release can only include bug fixes, documentation updates, and other trivial changes.

New features and breaking changes must be part of a minor release.

### Minor release

A minor release includes all changes from the last minor version to the next one.
This also includes new features and breaking changes.

The following tasks need to be done before creating a new release:

- Update metadata & clusterctl-settings.
- Update version in e2e config.
- Update docs (compatibility table; usage etc).

### Milestones

With `Milestones` we want to make it easier to track the progress of a release.

### Cherry-Picking

> [!NOTE]
> As we do not yet have `Prow`, we need to do the cherry-picking manually.
> Refer to the [git cherry-pick docs](https://git-scm.com/docs/git-cherry-pick)
#### Patch release

For each release, we need to cherry-pick all the relevant changes. For patch releases, we already
have a release branch in place. All changes, that should go into the next patch version, need to be merged into
the corresponding release branch.

After this is done, we need to create a new tag for the release.

#### Minor release

A minor release requires the creation of a new release branch. We will include all changes from the mainline
into the release branch. This includes new features and breaking changes.

In this case we do not have to `cherry-pick` the changes.

### Generate release notes

Cluster API provides a tool to generate release notes. The tool can be found in the `hack/tools/release/notes` directory
within the Cluster API repository.

An example for creating release notes with the tool could be:
```bash
# make sure you are in the cluster-api repository
cd ../cluster-api
# run the release notes tool and provide correct Github repository
go run -tags=tools sigs.k8s.io/cluster-api/hack/tools/release/notes \
--from tags/v0.Y.Z \
--to tags/v0.X.0 \
--branch release-0.X \
--repository ionos-cloud/cluster-api-provider-ionoscloud
```

The terminal output can then be copied into the draft release notes. There might be some manual work left to do.

66 changes: 34 additions & 32 deletions tools/go.mod
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
module tools

go 1.22
go 1.22.0

require (
github.com/golangci/golangci-lint v1.57.1
github.com/google/yamlfmt v0.10.0
github.com/vektra/mockery/v2 v2.42.1
sigs.k8s.io/kubebuilder-release-tools/notes v0.3.0
)

require (
Expand All @@ -31,7 +30,6 @@ require (
github.com/ashanbrown/makezero v1.1.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bkielbasa/cyclop v1.2.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/blizzy78/varnamelen v0.8.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.0 // indirect
github.com/bombsimon/wsl/v4 v4.2.1 // indirect
Expand All @@ -41,20 +39,20 @@ require (
github.com/butuzov/mirror v1.1.0 // indirect
github.com/catenacyber/perfsprint v0.7.1 // indirect
github.com/ccojocar/zxcvbn-go v1.0.2 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/charithe/durationcheck v0.0.10 // indirect
github.com/chavacava/garif v0.1.0 // indirect
github.com/chigopher/pathlib v0.19.1 // indirect
github.com/ckaznocha/intrange v0.1.0 // indirect
github.com/curioswitch/go-reassign v0.2.0 // indirect
github.com/daixiang0/gci v0.12.3 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/denis-tingaikin/go-header v0.5.0 // indirect
github.com/ettle/strcase v0.2.0 // indirect
github.com/fatih/color v1.16.0 // indirect
github.com/fatih/color v1.17.0 // indirect
github.com/fatih/structtag v1.2.0 // indirect
github.com/firefart/nonamedreturns v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fzipp/gocyclo v0.6.0 // indirect
github.com/ghostiam/protogetter v0.3.5 // indirect
github.com/go-critic/go-critic v0.11.2 // indirect
Expand All @@ -69,7 +67,6 @@ require (
github.com/go-xmlfmt/xmlfmt v1.1.2 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/gofrs/flock v0.8.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a // indirect
github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e // indirect
github.com/golangci/misspell v0.4.1 // indirect
Expand All @@ -83,7 +80,7 @@ require (
github.com/gostaticanalysis/forcetypeassert v0.1.0 // indirect
github.com/gostaticanalysis/nilerr v0.1.1 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/hashicorp/hcl v1.0.1-vault-5 // indirect
github.com/hexops/gotextdiff v1.0.3 // indirect
github.com/huandu/xstrings v1.4.0 // indirect
github.com/iancoleman/strcase v0.2.0 // indirect
Expand Down Expand Up @@ -111,8 +108,8 @@ require (
github.com/matoous/godox v0.0.0-20230222163458-006bad1f9d26 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mgechev/revive v1.3.7 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
Expand All @@ -122,20 +119,25 @@ require (
github.com/nishanths/predeclared v0.2.2 // indirect
github.com/nunnatsa/ginkgolinter v0.16.1 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/pelletier/go-toml/v2 v2.2.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/onsi/ginkgo/v2 v2.17.2 // indirect
github.com/onsi/gomega v1.33.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.2 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/polyfloyd/go-errorlint v1.4.8 // indirect
github.com/prometheus/client_golang v1.12.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.32.1 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/prometheus/client_golang v1.18.0 // indirect
github.com/prometheus/client_model v0.6.0 // indirect
github.com/prometheus/common v0.45.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/quasilyte/go-ruleguard v0.4.2 // indirect
github.com/quasilyte/gogrep v0.5.0 // indirect
github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect
github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
github.com/rs/zerolog v1.29.0 // indirect
github.com/ryancurrah/gomodguard v1.3.1 // indirect
github.com/ryanrolds/sqlclosecheck v0.5.1 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sanposhiho/wastedassign/v2 v2.0.7 // indirect
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 // indirect
github.com/sashamelentyev/interfacebloat v1.1.0 // indirect
Expand All @@ -146,18 +148,18 @@ require (
github.com/sivchari/containedctx v1.0.3 // indirect
github.com/sivchari/tenv v1.7.1 // indirect
github.com/sonatard/noctx v0.0.2 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/sourcegraph/go-diff v0.7.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/cobra v1.7.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.15.0 // indirect
github.com/spf13/viper v1.19.0 // indirect
github.com/ssgreg/nlreturn/v2 v2.2.1 // indirect
github.com/stbenjam/no-sprintf-host-port v0.1.1 // indirect
github.com/stretchr/objx v0.5.2 // indirect
github.com/stretchr/testify v1.9.0 // indirect
github.com/subosito/gotenv v1.4.2 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/t-yuki/gocover-cobertura v0.0.0-20180217150009-aaee18c8195c // indirect
github.com/tdakkota/asciicheck v0.2.0 // indirect
github.com/tetafro/godot v1.4.16 // indirect
Expand All @@ -175,19 +177,19 @@ require (
gitlab.com/bosi/decorder v0.4.1 // indirect
go-simpler.org/musttag v0.9.0 // indirect
go-simpler.org/sloglint v0.5.0 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/automaxprocs v1.5.3 // indirect
go.uber.org/multierr v1.8.0 // indirect
go.uber.org/zap v1.24.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.26.0 // indirect
golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect
golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect
golang.org/x/mod v0.16.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.18.0 // indirect
golang.org/x/term v0.5.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.19.0 // indirect
google.golang.org/protobuf v1.33.0 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/net v0.26.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/term v0.21.0 // indirect
golang.org/x/text v0.16.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
google.golang.org/protobuf v1.34.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
Expand Down
Loading

0 comments on commit d78e0c1

Please sign in to comment.