commands/ci/retry/retry.go (69 lines of code) (raw):

package retry import ( "fmt" "gitlab.com/gitlab-org/cli/api" "gitlab.com/gitlab-org/cli/commands/ci/ciutils" "gitlab.com/gitlab-org/cli/commands/cmdutils" "github.com/MakeNowJust/heredoc/v2" "github.com/spf13/cobra" ) func NewCmdRetry(f *cmdutils.Factory) *cobra.Command { pipelineRetryCmd := &cobra.Command{ Use: "retry <job-id>", Short: `Retry a CI/CD job.`, Aliases: []string{}, Example: heredoc.Doc(` # Interactively select a job to retry $ glab ci retry # Retry job with ID 224356863 $ glab ci retry 224356863 # Retry job with the name 'lint' $ glab ci retry lint `), Long: ``, RunE: func(cmd *cobra.Command, args []string) error { var err error repo, err := f.BaseRepo() if err != nil { return err } apiClient, err := f.HttpClient() if err != nil { return err } jobName := "" if len(args) != 0 { jobName = args[0] } branch, _ := cmd.Flags().GetString("branch") pipelineId, _ := cmd.Flags().GetInt("pipeline-id") jobID, err := ciutils.GetJobId(&ciutils.JobInputs{ JobName: jobName, Branch: branch, PipelineId: pipelineId, SelectionPrompt: "Select pipeline job to retry:", }, &ciutils.JobOptions{ ApiClient: apiClient, IO: f.IO, Repo: repo, }) if err != nil { fmt.Fprintln(f.IO.StdErr, "invalid job ID:", args[0]) return err } if jobID == 0 { return nil } job, err := api.RetryPipelineJob(apiClient, jobID, repo.FullName()) if err != nil { return cmdutils.WrapError(err, fmt.Sprintf("Could not retry job with ID: %d", jobID)) } output := fmt.Sprintf("Retried job (ID: %d), status: %s, ref: %s, weburl: %s", job.ID, job.Status, job.Ref, job.WebURL) fmt.Fprintln(f.IO.StdOut, output) return nil }, } pipelineRetryCmd.Flags().StringP("branch", "b", "", "The branch to search for the job. (default current branch)") pipelineRetryCmd.Flags().IntP("pipeline-id", "p", 0, "The pipeline ID to search for the job.") return pipelineRetryCmd }