Skip to content

Commit 0f62f83

Browse files
authored
Merge pull request #2053 from vincepri/release-notes
🏃 Improve release notes utility / add -from flag
2 parents 7b2ad21 + 4e471a6 commit 0f62f83

File tree

2 files changed

+45
-25
lines changed

2 files changed

+45
-25
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,7 @@ release-alias-tag: ## Adds the tag to the last build tag.
440440
gcloud container images add-tag $(KUBEADM_CONTROL_PLANE_CONTROLLER_IMG):$(TAG) $(KUBEADM_CONTROL_PLANE_CONTROLLER_IMG):$(RELEASE_ALIAS_TAG)
441441

442442
.PHONY: release-notes
443-
release-notes: ## Generates a release notes template to be used with a release.
443+
release-notes: $(RELEASE_NOTES) ## Generates a release notes template to be used with a release.
444444
$(RELEASE_NOTES)
445445

446446
## --------------------------------------

hack/tools/release/notes.go

Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ package main
2020

2121
import (
2222
"bytes"
23+
"flag"
2324
"fmt"
2425
"os"
2526
"os/exec"
@@ -51,13 +52,19 @@ var (
5152
other,
5253
unknown,
5354
}
55+
56+
fromTag = flag.String("from", "", "The tag or commit to start from.")
5457
)
5558

5659
func main() {
60+
flag.Parse()
5761
os.Exit(run())
5862
}
5963

6064
func lastTag() string {
65+
if fromTag != nil && *fromTag != "" {
66+
return *fromTag
67+
}
6168
cmd := exec.Command("git", "describe", "--tags", "--abbrev=0")
6269
out, err := cmd.Output()
6370
if err != nil {
@@ -93,64 +100,77 @@ func run() int {
93100
fmt.Println(string(out))
94101
return 1
95102
}
96-
commits := []commit{}
103+
104+
commits := []*commit{}
97105
outLines := strings.Split(string(out), "\n")
98-
c := commit{}
99-
for i := 0; i < len(outLines); i++ {
100-
line := strings.TrimSpace(outLines[i])
106+
for _, line := range outLines {
107+
line = strings.TrimSpace(line)
108+
last := len(commits) - 1
101109
switch {
102110
case strings.HasPrefix(line, "commit"):
103-
commits = append(commits, c)
104-
c = commit{}
111+
commits = append(commits, &commit{})
105112
case strings.HasPrefix(line, "Merge"):
106-
c.merge = line
113+
commits[last].merge = line
107114
continue
108115
case line == "":
109116
default:
110-
c.body = line
117+
commits[last].body = line
111118
}
112119
}
120+
113121
for _, c := range commits {
114-
firstWord := strings.Split(c.body, " ")[0]
122+
body := strings.TrimSpace(c.body)
115123
var key, prNumber, fork string
116124
switch {
117-
case strings.HasPrefix(firstWord, ":sparkles:"), strings.HasPrefix(firstWord, "✨"):
125+
case strings.HasPrefix(body, ":sparkles:"), strings.HasPrefix(body, "✨"):
118126
key = features
119-
case strings.HasPrefix(firstWord, ":bug:"), strings.HasPrefix(firstWord, "🐛"):
127+
body = strings.TrimPrefix(body, ":sparkles:")
128+
body = strings.TrimPrefix(body, "✨")
129+
case strings.HasPrefix(body, ":bug:"), strings.HasPrefix(body, "🐛"):
120130
key = bugs
121-
case strings.HasPrefix(firstWord, ":book:"), strings.HasPrefix(firstWord, "📖"):
131+
body = strings.TrimPrefix(body, ":bug:")
132+
body = strings.TrimPrefix(body, "🐛")
133+
case strings.HasPrefix(body, ":book:"), strings.HasPrefix(body, "📖"):
122134
key = documentation
123-
case strings.HasPrefix(firstWord, ":running:"), strings.HasPrefix(firstWord, "🏃"):
135+
body = strings.TrimPrefix(body, ":book:")
136+
body = strings.TrimPrefix(body, "📖")
137+
case strings.HasPrefix(body, ":running:"), strings.HasPrefix(body, "🏃"):
124138
key = other
125-
case strings.HasPrefix(firstWord, ":warning:"), strings.HasPrefix(firstWord, "⚠️"):
139+
body = strings.TrimPrefix(body, ":running:")
140+
body = strings.TrimPrefix(body, "🏃")
141+
case strings.HasPrefix(body, ":warning:"), strings.HasPrefix(body, "⚠️"):
126142
key = warning
143+
body = strings.TrimPrefix(body, ":warning:")
144+
body = strings.TrimPrefix(body, "⚠️")
127145
default:
128146
key = unknown
129147
}
130148

131-
if key != unknown {
132-
c.body = c.body[len(firstWord):]
133-
}
134-
if strings.TrimSpace(c.body) == "" {
149+
body = strings.TrimSpace(body)
150+
if body == "" {
135151
continue
136152
}
137-
c.body = fmt.Sprintf("- %s", strings.TrimSpace(c.body))
153+
body = fmt.Sprintf("- %s", body)
138154
fmt.Sscanf(c.merge, "Merge pull request %s from %s", &prNumber, &fork)
139-
merges[key] = append(merges[key], formatMerge(c.body, prNumber))
155+
merges[key] = append(merges[key], formatMerge(body, prNumber))
140156
}
141157

142158
// TODO Turn this into a link (requires knowing the project name + organization)
143159
fmt.Printf("Changes since %v\n---\n", lastTag)
144160

145161
for _, key := range outputOrder {
146162
mergeslice := merges[key]
147-
fmt.Println("## " + key)
148-
for _, merge := range mergeslice {
149-
fmt.Println(merge)
163+
if len(mergeslice) > 0 {
164+
fmt.Println("## " + key)
165+
for _, merge := range mergeslice {
166+
fmt.Println(merge)
167+
}
168+
fmt.Println()
150169
}
151-
fmt.Println()
152170
}
153171

172+
fmt.Println("The image for this release is: `<ADD_IMAGE_HERE>`.")
173+
fmt.Println("")
154174
fmt.Println("_Thanks to all our contributors!_ 😊")
155175

156176
return 0

0 commit comments

Comments
 (0)