github.com/saucelabs/saucectl@v0.175.1/internal/cmd/apit/uploadfile.go (about) 1 package apit 2 3 import ( 4 "context" 5 "errors" 6 "fmt" 7 "os" 8 9 "github.com/spf13/cobra" 10 "golang.org/x/text/cases" 11 "golang.org/x/text/language" 12 13 cmds "github.com/saucelabs/saucectl/internal/cmd" 14 "github.com/saucelabs/saucectl/internal/http" 15 "github.com/saucelabs/saucectl/internal/segment" 16 "github.com/saucelabs/saucectl/internal/usage" 17 ) 18 19 func UploadFileCommand() *cobra.Command { 20 cmd := &cobra.Command{ 21 Use: "upload-file FILENAME [--project PROJECT_NAME]", 22 Short: "Upload a file in vault", 23 Long: `Upload a file in a project's vault. 24 25 Use [--project] to specify the project by its name or run without [--project] to choose from a list of projects. 26 `, 27 SilenceUsage: true, 28 Args: func(cmd *cobra.Command, args []string) error { 29 if len(args) == 0 || args[0] == "" { 30 return errors.New("no file name specified") 31 } 32 return nil 33 }, 34 PreRunE: func(cmd *cobra.Command, args []string) error { 35 err := http.CheckProxy() 36 if err != nil { 37 return fmt.Errorf("invalid HTTP_PROXY value") 38 } 39 40 tracker := segment.DefaultTracker 41 42 go func() { 43 tracker.Collect( 44 cases.Title(language.English).String(cmds.FullName(cmd)), 45 usage.Properties{}.SetFlags(cmd.Flags()), 46 ) 47 _ = tracker.Close() 48 }() 49 return nil 50 }, 51 RunE: func(cmd *cobra.Command, args []string) error { 52 name := args[0] 53 54 fd, err := os.Open(name) 55 if err != nil { 56 return err 57 } 58 _, err = apitesterClient.PutVaultFile(context.Background(), selectedProject.ID, name, fd) 59 if err != nil { 60 return err 61 } 62 fmt.Printf("File %q has been successfully stored.\n", name) 63 return nil 64 }, 65 } 66 return cmd 67 }