func BuildTaskRunCmd()

in internal/pkg/cli/task_run.go [1166:1307]


func BuildTaskRunCmd() *cobra.Command {
	vars := runTaskVars{}
	cmd := &cobra.Command{
		Use:   "run",
		Short: "Run a one-off task on Amazon ECS.",
		Example: `
  Run a task using your local Dockerfile and display log streams after the task is running.
  You will be prompted to specify an environment for the tasks to run in.
  /code $ copilot task run
  Run a task named "db-migrate" in the "test" environment under the current workspace.
  /code $ copilot task run -n db-migrate --env test
  Run 4 tasks with 2GB memory, an existing image, and a custom task role.
  /code $ copilot task run --count 4 --memory 2048 --image=rds-migrate --task-role migrate-role
  Run a task with environment variables.
  /code $ copilot task run --env-vars name=myName,user=myUser
  Run a task using the current workspace with specific subnets and security groups.
  /code $ copilot task run --subnets subnet-123,subnet-456 --security-groups sg-123,sg-456
  Run a task with a command.
  /code $ copilot task run --command "python migrate-script.py"
  Run a task with Docker build args.
  /code $ copilot task run --build-args GO_VERSION=1.19"`,
		RunE: runCmdE(func(cmd *cobra.Command, args []string) error {
			opts, err := newTaskRunOpts(vars)
			if err != nil {
				return err
			}
			opts.nFlag = cmd.Flags().NFlag()
			if cmd.Flags().Changed(dockerFileFlag) {
				opts.isDockerfileSet = true
			}
			return run(opts)
		}),
	}

	// add flags to comments.
	cmd.Flags().StringVarP(&vars.groupName, taskGroupNameFlag, nameFlagShort, "", taskGroupFlagDescription)

	cmd.Flags().StringVar(&vars.dockerfilePath, dockerFileFlag, defaultDockerfilePath, dockerFileFlagDescription)
	cmd.Flags().StringToStringVar(&vars.dockerfileBuildArgs, dockerFileBuildArgsFlag, nil, dockerFileBuildArgsFlagDescription)
	cmd.Flags().StringVar(&vars.dockerfileContextPath, dockerFileContextFlag, "", dockerFileContextFlagDescription)
	cmd.Flags().StringVarP(&vars.image, imageFlag, imageFlagShort, "", imageFlagDescription)
	cmd.Flags().StringVar(&vars.imageTag, imageTagFlag, "", taskImageTagFlagDescription)

	cmd.Flags().StringVar(&vars.appName, appFlag, "", taskAppFlagDescription)
	cmd.Flags().StringVar(&vars.env, envFlag, "", taskEnvFlagDescription)
	cmd.Flags().StringVar(&vars.cluster, clusterFlag, "", clusterFlagDescription)
	cmd.Flags().BoolVar(&vars.acknowledgeSecretsAccess, acknowledgeSecretsAccessFlag, false, acknowledgeSecretsAccessDescription)
	cmd.Flags().StringSliceVar(&vars.subnets, subnetsFlag, nil, subnetsFlagDescription)
	cmd.Flags().StringSliceVar(&vars.securityGroups, securityGroupsFlag, nil, securityGroupsFlagDescription)
	cmd.Flags().BoolVar(&vars.useDefaultSubnetsAndCluster, taskDefaultFlag, false, taskRunDefaultFlagDescription)

	cmd.Flags().IntVar(&vars.count, countFlag, 1, countFlagDescription)
	cmd.Flags().IntVar(&vars.cpu, cpuFlag, 256, cpuFlagDescription)
	cmd.Flags().IntVar(&vars.memory, memoryFlag, 512, memoryFlagDescription)
	cmd.Flags().StringVar(&vars.taskRole, taskRoleFlag, "", taskRoleFlagDescription)
	cmd.Flags().StringVar(&vars.executionRole, executionRoleFlag, "", executionRoleFlagDescription)
	cmd.Flags().StringVar(&vars.os, osFlag, "", osFlagDescription)
	cmd.Flags().StringVar(&vars.arch, archFlag, "", archFlagDescription)
	cmd.Flags().StringToStringVar(&vars.envVars, envVarsFlag, nil, envVarsFlagDescription)
	cmd.Flags().StringVar(&vars.envFile, envFileFlag, "", envFileFlagDescription)
	cmd.Flags().StringToStringVar(&vars.secrets, secretsFlag, nil, secretsFlagDescription)
	cmd.Flags().StringVar(&vars.command, commandFlag, "", runCommandFlagDescription)
	cmd.Flags().StringVar(&vars.entrypoint, entrypointFlag, "", entrypointFlagDescription)
	cmd.Flags().StringToStringVar(&vars.resourceTags, resourceTagsFlag, nil, resourceTagsFlagDescription)

	cmd.Flags().BoolVar(&vars.follow, followFlag, false, followFlagDescription)
	cmd.Flags().StringVar(&vars.generateCommandTarget, generateCommandFlag, "", generateCommandFlagDescription)

	// group flags.
	nameFlags := pflag.NewFlagSet("Name", pflag.ContinueOnError)
	nameFlags.AddFlag(cmd.Flags().Lookup(taskGroupNameFlag))

	buildFlags := pflag.NewFlagSet("Build", pflag.ContinueOnError)
	buildFlags.AddFlag(cmd.Flags().Lookup(dockerFileFlag))
	buildFlags.AddFlag(cmd.Flags().Lookup(dockerFileBuildArgsFlag))
	buildFlags.AddFlag(cmd.Flags().Lookup(dockerFileContextFlag))
	buildFlags.AddFlag(cmd.Flags().Lookup(imageFlag))
	buildFlags.AddFlag(cmd.Flags().Lookup(imageTagFlag))

	placementFlags := pflag.NewFlagSet("Placement", pflag.ContinueOnError)
	placementFlags.AddFlag(cmd.Flags().Lookup(appFlag))
	placementFlags.AddFlag(cmd.Flags().Lookup(envFlag))
	placementFlags.AddFlag(cmd.Flags().Lookup(clusterFlag))
	placementFlags.AddFlag(cmd.Flags().Lookup(subnetsFlag))
	placementFlags.AddFlag(cmd.Flags().Lookup(securityGroupsFlag))
	placementFlags.AddFlag(cmd.Flags().Lookup(taskDefaultFlag))

	taskFlags := pflag.NewFlagSet("Task", pflag.ContinueOnError)
	taskFlags.AddFlag(cmd.Flags().Lookup(countFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(cpuFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(memoryFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(taskRoleFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(executionRoleFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(osFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(archFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(envVarsFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(envFileFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(secretsFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(commandFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(entrypointFlag))
	taskFlags.AddFlag(cmd.Flags().Lookup(resourceTagsFlag))

	utilityFlags := pflag.NewFlagSet("Utility", pflag.ContinueOnError)
	utilityFlags.AddFlag(cmd.Flags().Lookup(followFlag))
	utilityFlags.AddFlag(cmd.Flags().Lookup(generateCommandFlag))
	utilityFlags.AddFlag(cmd.Flags().Lookup(acknowledgeSecretsAccessFlag))

	// prettify help menu.
	cmd.Annotations = map[string]string{
		"name":      nameFlags.FlagUsages(),
		"build":     buildFlags.FlagUsages(),
		"placement": placementFlags.FlagUsages(),
		"task":      taskFlags.FlagUsages(),
		"utility":   utilityFlags.FlagUsages(),
	}
	cmd.SetUsageTemplate(`{{h1 "Usage"}}
{{- if .Runnable}}
{{.UseLine}}
{{- end }}

{{h1 "Name Flags"}}
{{(index .Annotations "name") | trimTrailingWhitespaces}}

{{h1 "Build Flags"}}
{{(index .Annotations "build") | trimTrailingWhitespaces}}

{{h1 "Placement Flags"}}
{{(index .Annotations "placement") | trimTrailingWhitespaces}}

{{h1 "Task Configuration Flags"}}
{{(index .Annotations "task") | trimTrailingWhitespaces}}

{{h1 "Utility Flags"}}
{{(index .Annotations "utility") | trimTrailingWhitespaces}}

{{if .HasExample }}
{{- h1 "Examples"}}
{{- code .Example}}
{{- end}}
`)
	return cmd
}