Skip to content

Commit 071042a

Browse files
authored
unhide release create --required flag, update tests, docs (#667)
* unhide release create --required flag, update tests, docs * address cursor feedback, add test
1 parent e0650e0 commit 071042a

File tree

2 files changed

+70
-2
lines changed

2 files changed

+70
-2
lines changed

cli/cmd/release_create.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,10 @@ func (r *runners) InitReleaseCreate(parent *cobra.Command) error {
5151
- ./manifests/*.yaml
5252
5353
With this config, simply run:
54-
replicated release create --version 1.0.0 --promote Unstable`,
54+
replicated release create --version 1.0.0 --promote Unstable
55+
56+
To mark a release as required during upgrades:
57+
replicated release create --version 1.0.0 --promote Unstable --required`,
5558
SilenceUsage: false,
5659
SilenceErrors: true, // this command uses custom error printing
5760
}
@@ -78,7 +81,6 @@ func (r *runners) InitReleaseCreate(parent *cobra.Command) error {
7881
cmd.Flags().StringVarP(&r.outputFormat, "output", "o", "table", "The output format to use. One of: json|table")
7982

8083
// not supported for KOTS
81-
cmd.Flags().MarkHidden("required")
8284
cmd.Flags().MarkHidden("yaml-file")
8385
cmd.Flags().MarkHidden("yaml")
8486
cmd.Flags().MarkHidden("chart")
@@ -468,6 +470,11 @@ func (r *runners) validateReleaseCreateParams() error {
468470
}
469471
}
470472

473+
// can't mark a release as required if you didn't pass a promote channel
474+
if r.args.createReleasePromoteRequired && r.args.createReleasePromote == "" {
475+
return errors.New("--required can only be used with --promote <channel>")
476+
}
477+
471478
// If no sources specified, config-based flow will be used (validated elsewhere)
472479
if numSources == 0 {
473480
return nil

cli/cmd/release_create_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,64 @@ func TestSetKOTSDefaultReleaseParams_SetsEnsureChannelAndLint(t *testing.T) {
220220
assert.True(t, args.createReleasePromoteEnsureChannel, "ensure-channel should be set to true")
221221
assert.True(t, args.createReleaseLint, "lint should be set to true")
222222
}
223+
224+
// TestRequiredFlagRequiresPromote tests that --required fails without --promote
225+
func TestRequiredFlagRequiresPromote(t *testing.T) {
226+
r := &runners{
227+
args: runnerArgs{
228+
createReleasePromoteRequired: true,
229+
createReleasePromote: "", // No promote channel
230+
createReleaseYamlDir: "./manifests",
231+
},
232+
appType: "kots",
233+
}
234+
235+
err := r.validateReleaseCreateParams()
236+
assert.Error(t, err)
237+
assert.Contains(t, err.Error(), "--required can only be used with --promote")
238+
}
239+
240+
// TestRequiredFlagWithPromote tests that --required works with --promote
241+
func TestRequiredFlagWithPromote(t *testing.T) {
242+
r := &runners{
243+
args: runnerArgs{
244+
createReleasePromoteRequired: true,
245+
createReleasePromote: "Unstable",
246+
createReleaseYamlDir: "./manifests",
247+
},
248+
appType: "kots",
249+
}
250+
251+
err := r.validateReleaseCreateParams()
252+
assert.NoError(t, err)
253+
}
254+
255+
// TestRequiredFlagDefaultsFalse tests that --required defaults to false
256+
func TestRequiredFlagDefaultsFalse(t *testing.T) {
257+
r := &runners{
258+
args: runnerArgs{
259+
createReleasePromote: "Unstable",
260+
createReleaseYamlDir: "./manifests",
261+
},
262+
}
263+
264+
assert.False(t, r.args.createReleasePromoteRequired,
265+
"--required should default to false")
266+
}
267+
268+
// TestRequiredFlagRequiresPromoteInConfigBasedFlow tests that --required fails
269+
// without --promote even in config-based flow (no explicit yaml sources)
270+
func TestRequiredFlagRequiresPromoteInConfigBasedFlow(t *testing.T) {
271+
r := &runners{
272+
args: runnerArgs{
273+
createReleasePromoteRequired: true,
274+
createReleasePromote: "", // No promote channel
275+
// No yaml sources specified - simulates config-based flow
276+
},
277+
appType: "kots",
278+
}
279+
280+
err := r.validateReleaseCreateParams()
281+
assert.Error(t, err)
282+
assert.Contains(t, err.Error(), "--required can only be used with --promote")
283+
}

0 commit comments

Comments
 (0)