@@ -20,6 +20,7 @@ package main
20
20
21
21
import (
22
22
"bytes"
23
+ "flag"
23
24
"fmt"
24
25
"os"
25
26
"os/exec"
@@ -51,13 +52,19 @@ var (
51
52
other ,
52
53
unknown ,
53
54
}
55
+
56
+ fromTag = flag .String ("from" , "" , "The tag or commit to start from." )
54
57
)
55
58
56
59
func main () {
60
+ flag .Parse ()
57
61
os .Exit (run ())
58
62
}
59
63
60
64
func lastTag () string {
65
+ if fromTag != nil && * fromTag != "" {
66
+ return * fromTag
67
+ }
61
68
cmd := exec .Command ("git" , "describe" , "--tags" , "--abbrev=0" )
62
69
out , err := cmd .Output ()
63
70
if err != nil {
@@ -93,64 +100,77 @@ func run() int {
93
100
fmt .Println (string (out ))
94
101
return 1
95
102
}
96
- commits := []commit {}
103
+
104
+ commits := []* commit {}
97
105
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
101
109
switch {
102
110
case strings .HasPrefix (line , "commit" ):
103
- commits = append (commits , c )
104
- c = commit {}
111
+ commits = append (commits , & commit {})
105
112
case strings .HasPrefix (line , "Merge" ):
106
- c .merge = line
113
+ commits [ last ] .merge = line
107
114
continue
108
115
case line == "" :
109
116
default :
110
- c .body = line
117
+ commits [ last ] .body = line
111
118
}
112
119
}
120
+
113
121
for _ , c := range commits {
114
- firstWord := strings .Split (c .body , " " )[ 0 ]
122
+ body := strings .TrimSpace (c .body )
115
123
var key , prNumber , fork string
116
124
switch {
117
- case strings .HasPrefix (firstWord , ":sparkles:" ), strings .HasPrefix (firstWord , "✨" ):
125
+ case strings .HasPrefix (body , ":sparkles:" ), strings .HasPrefix (body , "✨" ):
118
126
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 , "🐛" ):
120
130
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 , "📖" ):
122
134
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 , "🏃" ):
124
138
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 , "⚠️" ):
126
142
key = warning
143
+ body = strings .TrimPrefix (body , ":warning:" )
144
+ body = strings .TrimPrefix (body , "⚠️" )
127
145
default :
128
146
key = unknown
129
147
}
130
148
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 == "" {
135
151
continue
136
152
}
137
- c . body = fmt .Sprintf ("- %s" , strings . TrimSpace ( c . body ) )
153
+ body = fmt .Sprintf ("- %s" , body )
138
154
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 ))
140
156
}
141
157
142
158
// TODO Turn this into a link (requires knowing the project name + organization)
143
159
fmt .Printf ("Changes since %v\n ---\n " , lastTag )
144
160
145
161
for _ , key := range outputOrder {
146
162
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 ()
150
169
}
151
- fmt .Println ()
152
170
}
153
171
172
+ fmt .Println ("The image for this release is: `<ADD_IMAGE_HERE>`." )
173
+ fmt .Println ("" )
154
174
fmt .Println ("_Thanks to all our contributors!_ 😊" )
155
175
156
176
return 0
0 commit comments