github.com/saucelabs/saucectl@v0.175.1/internal/cmd/ini/imagerunner.go (about)

     1  package ini
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  
     7  	"github.com/fatih/color"
     8  	"github.com/rs/zerolog/log"
     9  	cmds "github.com/saucelabs/saucectl/internal/cmd"
    10  	"github.com/saucelabs/saucectl/internal/config"
    11  	"github.com/saucelabs/saucectl/internal/imagerunner"
    12  	"github.com/saucelabs/saucectl/internal/segment"
    13  	"github.com/saucelabs/saucectl/internal/usage"
    14  	"github.com/spf13/cobra"
    15  	"golang.org/x/text/cases"
    16  	"golang.org/x/text/language"
    17  )
    18  
    19  func ImageRunnerCmd() *cobra.Command {
    20  	cfg := &initConfig{
    21  		frameworkName: imagerunner.Kind,
    22  	}
    23  
    24  	cmd := &cobra.Command{
    25  		Use:          "imagerunner",
    26  		Short:        "Bootstrap an Image Runner (Sauce Orchestrate) project.",
    27  		SilenceUsage: true,
    28  		Run: func(cmd *cobra.Command, args []string) {
    29  			tracker := segment.DefaultTracker
    30  
    31  			go func() {
    32  				tracker.Collect(
    33  					cases.Title(language.English).String(cmds.FullName(cmd)),
    34  					usage.Properties{}.SetFlags(cmd.Flags()),
    35  				)
    36  				_ = tracker.Close()
    37  			}()
    38  
    39  			err := Run(cmd, cfg)
    40  			if err != nil {
    41  				log.Err(err).Msg("failed to execute init command")
    42  				os.Exit(1)
    43  			}
    44  		},
    45  	}
    46  
    47  	cmd.Flags().StringVar(&cfg.dockerImage, "image", "", "Docker image to use.")
    48  	cmd.Flags().StringVar(&cfg.workload, "workload", "", "Type of work performed. Options: 'webdriver', 'other'.")
    49  	cmd.Flags().StringVar(&cfg.artifactWhenStr, "artifacts-when", "fail", "When to download artifacts.")
    50  
    51  	return cmd
    52  }
    53  
    54  func configureImageRunner(cfg *initConfig) interface{} {
    55  	return imagerunner.Project{
    56  		TypeDef: config.TypeDef{
    57  			APIVersion: imagerunner.APIVersion,
    58  			Kind:       imagerunner.Kind,
    59  		},
    60  		Sauce: config.SauceConfig{
    61  			Region: cfg.region,
    62  		},
    63  		Suites: []imagerunner.Suite{
    64  			{
    65  				Name:  fmt.Sprintf("imagerunner - %s", cfg.dockerImage),
    66  				Image: cfg.dockerImage,
    67  				ImagePullAuth: imagerunner.ImagePullAuth{
    68  					User:  "${DOCKER_USERNAME}",
    69  					Token: "${DOCKER_PASSWORD}",
    70  				},
    71  				Workload: cfg.workload,
    72  			},
    73  		},
    74  		Artifacts: config.Artifacts{
    75  			Download: config.ArtifactDownload{
    76  				When:      cfg.artifactWhen,
    77  				Directory: "./artifacts",
    78  				Match:     []string{"*"},
    79  			},
    80  		},
    81  	}
    82  }
    83  
    84  func displayExtraInfoImageRunner() {
    85  	fmt.Println()
    86  	color.HiGreen("Before running your tests, you need to set the following environment variables:")
    87  	color.Green("  - DOCKER_USERNAME")
    88  	color.Green("  - DOCKER_PASSWORD")
    89  	fmt.Println()
    90  }