feat: add -y|--yes flag for 'us deploy' to auto-confirm deployment plan

This commit is contained in:
Pasha Sviderski
2025-09-12 22:52:06 +10:00
parent 8a273dbf63
commit bc078472d4
4 changed files with 46 additions and 43 deletions
+23 -11
View File
@@ -22,6 +22,7 @@ type deployOptions struct {
services []string
noBuild bool
recreate bool
yes bool
context string
}
@@ -43,16 +44,19 @@ func NewDeployCommand() *cobra.Command {
},
}
cmd.Flags().StringSliceVarP(&opts.files, "file", "f", nil,
"One or more Compose files to deploy services from. (default compose.yaml)")
cmd.Flags().StringSliceVarP(&opts.profiles, "profile", "p", nil,
"One or more Compose profiles to enable.")
cmd.Flags().StringVarP(&opts.context, "context", "c", "",
"Name of the cluster context to deploy to (default is the current context)")
cmd.Flags().StringSliceVarP(&opts.files, "file", "f", nil,
"One or more Compose files to deploy services from. (default compose.yaml)")
cmd.Flags().BoolVarP(&opts.noBuild, "no-build", "n", false,
"Do not build images before deploying services. (default false)")
cmd.Flags().StringSliceVarP(&opts.profiles, "profile", "p", nil,
"One or more Compose profiles to enable.")
cmd.Flags().BoolVar(&opts.recreate, "recreate", false,
"Recreate containers even if their configuration and image haven't changed.")
cmd.Flags().BoolVarP(&opts.yes, "yes", "y", false,
"Auto-confirm deployment plan. Enabled by default when running non-interactively,\n"+
"e.g., in CI/CD pipelines.")
// TODO: Consider adding a filter flag to specify which machines to deploy to but keep the rest running.
// Could be useful to test a new version on a subset of machines before rolling out to all.
@@ -136,13 +140,21 @@ func runDeploy(ctx context.Context, uncli *cli.CLI, opts deployOptions) error {
}
fmt.Println()
confirmed, err := cli.Confirm()
if err != nil {
return fmt.Errorf("confirm deployment: %w", err)
}
if !confirmed {
fmt.Println("Cancelled. No changes were made.")
return nil
// Ask for plan confirmation before proceeding with the deployment unless running in non-interactive mode
// or --yes is specified.
if !opts.yes {
if cli.IsStdinTerminal() {
confirmed, err := cli.Confirm()
if err != nil {
return fmt.Errorf("confirm deployment: %w", err)
}
if !confirmed {
fmt.Println("Cancelled. No changes were made.")
return nil
}
} else {
fmt.Println("Auto-confirming deployment plan in non-interactive mode.")
}
}
return progress.RunWithTitle(ctx, func(ctx context.Context) error {