github.com/saucelabs/saucectl@v0.175.1/internal/cmd/imagerunner/stop.go (about) 1 package imagerunner 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 8 cmds "github.com/saucelabs/saucectl/internal/cmd" 9 "github.com/saucelabs/saucectl/internal/http" 10 "github.com/saucelabs/saucectl/internal/segment" 11 "github.com/saucelabs/saucectl/internal/usage" 12 "github.com/spf13/cobra" 13 "golang.org/x/text/cases" 14 "golang.org/x/text/language" 15 ) 16 17 func StopCommand() *cobra.Command { 18 cmd := &cobra.Command{ 19 Use: "stop <runID>", 20 Short: "Stop the running container", 21 SilenceUsage: true, 22 Args: func(cmd *cobra.Command, args []string) error { 23 if len(args) == 0 || args[0] == "" { 24 return errors.New("no run ID specified") 25 } 26 return nil 27 }, 28 PreRunE: func(cmd *cobra.Command, args []string) error { 29 err := http.CheckProxy() 30 if err != nil { 31 return fmt.Errorf("invalid HTTP_PROXY value") 32 } 33 34 tracker := segment.DefaultTracker 35 36 go func() { 37 tracker.Collect( 38 cases.Title(language.English).String(cmds.FullName(cmd)), 39 usage.Properties{}.SetFlags(cmd.Flags()), 40 ) 41 _ = tracker.Close() 42 }() 43 return nil 44 }, 45 RunE: func(cmd *cobra.Command, args []string) error { 46 ID := args[0] 47 fmt.Printf("Stopping container %s...\n", ID) 48 if err := imagerunnerClient.StopRun(context.Background(), ID); err != nil { 49 return fmt.Errorf("failed to stop the container: %v", err) 50 } 51 return nil 52 }, 53 } 54 55 return cmd 56 }