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

     1  package ini
     2  
     3  import (
     4  	// imports embed to load .sauceignore
     5  	_ "embed"
     6  	"fmt"
     7  	"os"
     8  
     9  	"github.com/rs/zerolog/log"
    10  	cmds "github.com/saucelabs/saucectl/internal/cmd"
    11  	"github.com/saucelabs/saucectl/internal/config"
    12  	"github.com/saucelabs/saucectl/internal/segment"
    13  	"github.com/saucelabs/saucectl/internal/testcafe"
    14  	"github.com/saucelabs/saucectl/internal/usage"
    15  	"github.com/spf13/cobra"
    16  	"golang.org/x/text/cases"
    17  	"golang.org/x/text/language"
    18  )
    19  
    20  func TestCafeCmd() *cobra.Command {
    21  	cfg := &initConfig{
    22  		frameworkName: testcafe.Kind,
    23  	}
    24  
    25  	cmd := &cobra.Command{
    26  		Use:          "testcafe",
    27  		Short:        "Bootstrap a TestCafe project.",
    28  		SilenceUsage: true,
    29  		Run: func(cmd *cobra.Command, args []string) {
    30  			tracker := segment.DefaultTracker
    31  
    32  			go func() {
    33  				tracker.Collect(
    34  					cases.Title(language.English).String(cmds.FullName(cmd)),
    35  					usage.Properties{}.SetFlags(cmd.Flags()),
    36  				)
    37  				_ = tracker.Close()
    38  			}()
    39  
    40  			err := Run(cmd, cfg)
    41  			if err != nil {
    42  				log.Err(err).Msg("failed to execute init command")
    43  				os.Exit(1)
    44  			}
    45  		},
    46  	}
    47  
    48  	cmd.Flags().StringVar(&cfg.frameworkVersion, "version", "", "TestCafe version.")
    49  	cmd.Flags().StringVar(&cfg.platformName, "platform", "", "OS name and version, such as 'Windows 11' or 'macOS 13'.")
    50  	cmd.Flags().StringVar(&cfg.browserName, "browser", "", "Browser name.")
    51  	cmd.Flags().StringVar(&cfg.artifactWhenStr, "artifacts-when", "fail", "When to download artifacts.")
    52  
    53  	return cmd
    54  }
    55  
    56  func configureTestcafe(cfg *initConfig) interface{} {
    57  	return testcafe.Project{
    58  		TypeDef: config.TypeDef{
    59  			APIVersion: testcafe.APIVersion,
    60  			Kind:       testcafe.Kind,
    61  		},
    62  		Sauce: config.SauceConfig{
    63  			Region:      cfg.region,
    64  			Sauceignore: ".sauceignore",
    65  			Concurrency: cfg.concurrency,
    66  		},
    67  		RootDir: ".",
    68  		Testcafe: testcafe.Testcafe{
    69  			Version: cfg.frameworkVersion,
    70  		},
    71  		Suites: []testcafe.Suite{
    72  			{
    73  				Name:         fmt.Sprintf("testcafe - %s - %s", cfg.platformName, cfg.browserName),
    74  				PlatformName: cfg.platformName,
    75  				BrowserName:  cfg.browserName,
    76  			},
    77  		},
    78  		Artifacts: config.Artifacts{
    79  			Download: config.ArtifactDownload{
    80  				When:      cfg.artifactWhen,
    81  				Directory: "./artifacts",
    82  				Match:     []string{"*"},
    83  			},
    84  		},
    85  	}
    86  }
    87  
    88  //go:embed sauceignore/testcafe.sauceignore
    89  var sauceignoreTestcafe string