github.com/saucelabs/saucectl@v0.175.1/internal/cmd/artifacts/cmd.go (about) 1 package artifacts 2 3 import ( 4 "errors" 5 "time" 6 7 "github.com/saucelabs/saucectl/internal/artifacts" 8 "github.com/saucelabs/saucectl/internal/config" 9 "github.com/saucelabs/saucectl/internal/credentials" 10 "github.com/saucelabs/saucectl/internal/http" 11 "github.com/saucelabs/saucectl/internal/region" 12 "github.com/saucelabs/saucectl/internal/saucecloud" 13 "github.com/saucelabs/saucectl/internal/segment" 14 "github.com/spf13/cobra" 15 ) 16 17 var ( 18 artifactSvc artifacts.Service 19 rdcTimeout = 1 * time.Minute 20 restoTimeout = 1 * time.Minute 21 testComposerTimeout = 1 * time.Minute 22 ) 23 24 func Command(preRun func(cmd *cobra.Command, args []string)) *cobra.Command { 25 var regio string 26 27 cmd := &cobra.Command{ 28 Use: "artifacts", 29 Short: "Interact with job artifacts", 30 SilenceUsage: true, 31 TraverseChildren: true, 32 PersistentPreRunE: func(cmd *cobra.Command, args []string) error { 33 if preRun != nil { 34 preRun(cmd, args) 35 } 36 37 reg := region.FromString(regio) 38 if reg == region.None { 39 return errors.New("invalid region") 40 } 41 if reg == region.Staging { 42 segment.DefaultTracker.Enabled = false 43 } 44 45 creds := credentials.Get() 46 url := reg.APIBaseURL() 47 restoClient := http.NewResto(url, creds.Username, creds.AccessKey, restoTimeout) 48 rdcClient := http.NewRDCService(url, creds.Username, creds.AccessKey, rdcTimeout, config.ArtifactDownload{}) 49 testcompClient := http.NewTestComposer(url, creds, testComposerTimeout) 50 51 artifactSvc = saucecloud.NewArtifactService(&restoClient, &rdcClient, &testcompClient) 52 53 return nil 54 }, 55 } 56 57 flags := cmd.PersistentFlags() 58 flags.StringVarP(®io, "region", "r", "us-west-1", "The Sauce Labs region. Options: us-west-1, eu-central-1.") 59 60 cmd.AddCommand( 61 DownloadCommand(), 62 ListCommand(), 63 UploadCommand(), 64 ) 65 66 return cmd 67 }