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(&regio, "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  }