@@ -88,19 +88,42 @@ func (r *runners) gitSHABranch() (sha string, branch string, dirty bool, err err
8888 return h .String ()[0 :6 ], head .Name ().Short (), ! status .IsClean (), nil
8989}
9090
91- func (r * runners ) setKOTSDefaults () error {
91+ func (r * runners ) setKOTSDefaultReleaseParams () error {
92+
93+ if r .args .createReleaseYamlDir == "" {
94+ r .args .createReleaseYamlDir = "./manifests"
95+ }
96+
9297 rev , branch , isDirty , err := r .gitSHABranch ()
9398 if err != nil {
9499 return errors .Wrapf (err , "get git properties" )
95100 }
96-
97- if r . args . createReleaseYamlDir == "" {
98- r . args . createReleaseYamlDir = "./manifests "
101+ dirtyStatus := ""
102+ if isDirty {
103+ dirtyStatus = "-dirty "
99104 }
100105
101106 if r .args .createReleasePromoteNotes == "" {
107+ // set some default release notes
102108 r .args .createReleasePromoteNotes = fmt .Sprintf (
103- `CLI release by %s on %s` , os .Getenv ("USER" ), time .Now ().Format (time .RFC822 ))
109+ `CLI release of %s triggered by %s [SHA: %s%s] [%s]` ,
110+ branch ,
111+ os .Getenv ("USER" ),
112+ rev ,
113+ dirtyStatus ,
114+ time .Now ().Format (time .RFC822 ),
115+ )
116+ // unless it's GH actions, then we can link to the commit! yay!
117+ if os .Getenv ("GITHUB_ACTIONS" ) != "" {
118+ r .args .createReleasePromoteNotes = fmt .Sprintf (
119+ `GitHub Action release of %s triggered by %s: [%s](https://github.com/%s/commit/%s)` ,
120+ os .Getenv ("GITHUB_REF" ),
121+ os .Getenv ("GITHUB_ACTOR" ),
122+ os .Getenv ("GITHUB_SHA" )[0 :7 ],
123+ os .Getenv ("GITHUB_REPOSITORY" ),
124+ os .Getenv ("GITHUB_SHA" ),
125+ )
126+ }
104127 }
105128
106129 if r .args .createReleasePromote == "" {
@@ -111,10 +134,6 @@ func (r *runners) setKOTSDefaults() error {
111134 }
112135
113136 if r .args .createReleasePromoteVersion == "" {
114- dirtyStatus := ""
115- if isDirty {
116- dirtyStatus = "-dirty"
117- }
118137 r .args .createReleasePromoteVersion = fmt .Sprintf ("%s-%s%s" , r .args .createReleasePromote , rev , dirtyStatus )
119138 }
120139
@@ -129,7 +148,7 @@ func (r *runners) releaseCreate(_ *cobra.Command, _ []string) error {
129148
130149 if r .appType == "kots" && r .args .createReleaseAutoDefaults {
131150 log .ActionWithSpinner ("Reading Environment" )
132- err := r .setKOTSDefaults ()
151+ err := r .setKOTSDefaultReleaseParams ()
133152 if err != nil {
134153 log .FinishSpinnerWithError ()
135154 return errors .Wrap (err , "resolve kots defaults" )
@@ -159,38 +178,9 @@ Prepared to create release with defaults:
159178 }
160179 }
161180
162- if r .args .createReleaseYaml == "" && r .args .createReleaseYamlFile == "" && r .appType != "kots" {
163- return errors .New ("one of --yaml, --yaml-file must be provided" )
164- }
165-
166- if r .args .createReleaseYaml != "" && r .args .createReleaseYamlFile != "" {
167- return errors .New ("only one of --yaml or --yaml-file may be specified" )
168- }
169-
170- if r .args .createReleaseYamlDir == "" && r .appType == "kots" {
171- return errors .New ("--yaml-dir flag must be provided for KOTS applications" )
172- }
173-
174- // can't ensure a channel if you didn't pass one
175- if r .args .createReleasePromoteEnsureChannel && r .args .createReleasePromote == "" {
176- return errors .New ("cannot use the flag --ensure-channel without also using --promote <channel> " )
177- }
178-
179- // we check this again below, but lets be explicit and fail fast
180- if r .args .createReleasePromoteEnsureChannel && ! (r .appType == "ship" || r .appType == "kots" ) {
181- return errors .Errorf ("the flag --ensure-channel is only supported for KOTS and Ship applications, app %q is of type %q" , r .appID , r .appType )
182- }
183-
184- if r .args .createReleasePromoteRequired && r .appType == "kots" {
185- return errors .Errorf ("the --required flag is not supported for KOTS applications" )
186- }
187-
188- if r .args .createReleaseYamlFile != "" && r .appType == "kots" {
189- return errors .Errorf ("the --yaml-file flag is not supported for KOTS applications, use --yaml-dir instead" )
190- }
191-
192- if r .args .createReleaseYaml != "" && r .appType == "kots" {
193- return errors .Errorf ("the --yaml flag is not supported for KOTS applications, use --yaml-dir instead" )
181+ err := r .validateReleaseCreateParams ()
182+ if err != nil {
183+ return errors .Wrap (err , "validate params" )
194184 }
195185
196186 if r .args .createReleaseYaml == "-" {
@@ -268,6 +258,43 @@ Prepared to create release with defaults:
268258 return nil
269259}
270260
261+ func (r * runners ) validateReleaseCreateParams () error {
262+ if r .args .createReleaseYaml == "" && r .args .createReleaseYamlFile == "" && r .appType != "kots" {
263+ return errors .New ("one of --yaml, --yaml-file must be provided" )
264+ }
265+
266+ if r .args .createReleaseYaml != "" && r .args .createReleaseYamlFile != "" {
267+ return errors .New ("only one of --yaml or --yaml-file may be specified" )
268+ }
269+
270+ if r .args .createReleaseYamlDir == "" && r .appType == "kots" {
271+ return errors .New ("--yaml-dir flag must be provided for KOTS applications" )
272+ }
273+
274+ // can't ensure a channel if you didn't pass one
275+ if r .args .createReleasePromoteEnsureChannel && r .args .createReleasePromote == "" {
276+ return errors .New ("cannot use the flag --ensure-channel without also using --promote <channel> " )
277+ }
278+
279+ // we check this again below, but lets be explicit and fail fast
280+ if r .args .createReleasePromoteEnsureChannel && ! (r .appType == "ship" || r .appType == "kots" ) {
281+ return errors .Errorf ("the flag --ensure-channel is only supported for KOTS and Ship applications, app %q is of type %q" , r .appID , r .appType )
282+ }
283+
284+ if r .args .createReleasePromoteRequired && r .appType == "kots" {
285+ return errors .Errorf ("the --required flag is not supported for KOTS applications" )
286+ }
287+
288+ if r .args .createReleaseYamlFile != "" && r .appType == "kots" {
289+ return errors .Errorf ("the --yaml-file flag is not supported for KOTS applications, use --yaml-dir instead" )
290+ }
291+
292+ if r .args .createReleaseYaml != "" && r .appType == "kots" {
293+ return errors .Errorf ("the --yaml flag is not supported for KOTS applications, use --yaml-dir instead" )
294+ }
295+ return nil
296+ }
297+
271298func (r * runners ) getOrCreateChannelForPromotion (channelName string , createIfAbsent bool ) (string , error ) {
272299
273300 description := "" // todo: do we want a flag for the desired channel description
@@ -363,7 +390,7 @@ func promptForConfirm() (string, error) {
363390 }
364391
365392 prompt := promptui.Prompt {
366- Label : "Create release with these properties? [Y/n]" ,
393+ Label : "Create with these properties? [Y/n]" ,
367394 Templates : templates ,
368395 Default : "y" ,
369396 Validate : func (input string ) error {
0 commit comments