Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🌱 Determine release type from tag to also handle beta releases #10324

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions docs/release/release-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -364,15 +364,10 @@ The goal of this task is to keep the CAPI community updated on recent PRs that h

```bash
# RELEASE_TAG should be the new desired tag (note: at this point the tag does not yet exist).
# Can be also used for pre-releases. The warning banner for RC and beta releases will be determined automatically.
RELEASE_TAG=v1.6.x make release-notes
```

If this is a beta or RC release, add the --pre-release-version flag
```bash
make release-notes-tool
./bin/notes --release=${RELEASE_TAG} --pre-release-version > CHANGELOG/${RELEASE_TAG}.md
```

1. This will generate a new release notes file at `CHANGELOG/<RELEASE_TAG>.md`. Finalize the release notes:
- [ ] Update the `Kubernetes version support section`. If this is a patch release you can most probably copy the same values from the previous patch release notes. Except if this is the release where a new Kubernetes version support is added.
<br>**Note**: Check our [Kubernetes support policy](https://cluster-api.sigs.k8s.io/reference/versions.html#supported-kubernetes-versions) in the CAPI book. In case of doubt, reach out to the current release lead.
Expand Down
26 changes: 23 additions & 3 deletions hack/tools/release/notes/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ type notesCmdConfig struct {
newTag string
branch string
prefixAreaLabel bool
preReleaseVersion bool
deprecation bool
addKubernetesVersionSupport bool
}
Expand All @@ -67,7 +66,6 @@ func readCmdConfig() *notesCmdConfig {
flag.StringVar(&config.newTag, "release", "", "The tag for the new release.")

flag.BoolVar(&config.prefixAreaLabel, "prefix-area-label", true, "If enabled, will prefix the area label.")
flag.BoolVar(&config.preReleaseVersion, "pre-release-version", false, "If enabled, will add a pre-release warning header. (default false)")
flag.BoolVar(&config.deprecation, "deprecation", true, "If enabled, will add a templated deprecation warning header.")
flag.BoolVar(&config.addKubernetesVersionSupport, "add-kubernetes-version-support", true, "If enabled, will add the Kubernetes version support header.")

Expand Down Expand Up @@ -103,7 +101,7 @@ func (cmd *notesCmd) run() error {
from, to := parseRef(cmd.config.fromRef), parseRef(cmd.config.toRef)

printer := newReleaseNotesPrinter(cmd.config.repo, from.value)
printer.isPreRelease = cmd.config.preReleaseVersion
printer.releaseType = releaseTypeFromNewTag(cmd.config.newTag)
printer.printDeprecation = cmd.config.deprecation
printer.printKubernetesSupport = cmd.config.addKubernetesVersionSupport

Expand All @@ -117,6 +115,28 @@ func (cmd *notesCmd) run() error {
return generator.run()
}

func releaseTypeFromNewTag(newTagConfig string) string {
// Error handling can be ignored as the version has been validated in computeConfigDefaults already.
newTag, _ := semver.ParseTolerant(newTagConfig)
Comment on lines +119 to +120
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One last question: is it fair to ignore the error handling here? Or should we handle it anyway?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Talked to @chrischdi, totally fair to do it like this. It will not panic if the version cannot be parsed.


// Ensures version format includes exactly two dot-separated pre-release identifiers (e.g., v1.7.0-beta.1).
// Versions with a single pre-release identifier (e.g., v1.7.0-beta or v1.7.0-beta1) are NOT supported.
// Return early if the count of pre-release identifiers is not 2.
if len(newTag.Pre) != 2 {
return ""
}

// Only allow RC and beta releases. More types must be defined here.
// If a new type is not defined, no warning banner will be printed.
switch newTag.Pre[0].VersionStr {
case "rc":
return "RELEASE CANDIDATE"
case "beta":
return "BETA RELEASE"
}
return ""
}

func ensureInstalledDependencies() error {
if !commandExists("gh") {
return errors.New("gh GitHub CLI not available. GitHub CLI is required to be present in the PATH. Refer to https://cli.github.com/ for installation")
Expand Down
6 changes: 3 additions & 3 deletions hack/tools/release/notes/print.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ var defaultOutputOrder = []string{
// the right format for the release notes.
type releaseNotesPrinter struct {
outputOrder []string
isPreRelease bool
releaseType string
printKubernetesSupport bool
printDeprecation bool
fromTag string
Expand Down Expand Up @@ -75,8 +75,8 @@ func (p *releaseNotesPrinter) print(entries []notesEntry, commitsInRelease int,
}
}

if p.isPreRelease {
fmt.Printf("🚨 This is a RELEASE CANDIDATE. Use it only for testing purposes. If you find any bugs, file an [issue](https://github.com/%s/issues/new).\n", p.repo)
if p.releaseType != "" {
fmt.Printf("🚨 This is a %s. Use it only for testing purposes. If you find any bugs, file an [issue](https://github.com/%s/issues/new).\n", p.releaseType, p.repo)
}

if p.printKubernetesSupport {
Expand Down
Loading