github.com/saucelabs/saucectl@v0.175.1/internal/cmd/ini/playwright.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/playwright" 13 "github.com/saucelabs/saucectl/internal/segment" 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 PlaywrightCmd() *cobra.Command { 21 cfg := &initConfig{ 22 frameworkName: playwright.Kind, 23 } 24 25 cmd := &cobra.Command{ 26 Use: "playwright", 27 Short: "Bootstrap a Playwright 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", "", "Playwright 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.playwrightProject, "project", "", "Playwright project name.") 52 cmd.Flags().StringSliceVar(&cfg.testMatch, "test-match", []string{".*.spec.js"}, "Test file pattern to match against.") 53 cmd.Flags().StringVar(&cfg.artifactWhenStr, "artifacts-when", "fail", "When to download artifacts.") 54 55 return cmd 56 } 57 58 func configurePlaywright(cfg *initConfig) interface{} { 59 return playwright.Project{ 60 TypeDef: config.TypeDef{ 61 APIVersion: playwright.APIVersion, 62 Kind: playwright.Kind, 63 }, 64 Sauce: config.SauceConfig{ 65 Region: cfg.region, 66 Sauceignore: ".sauceignore", 67 Concurrency: cfg.concurrency, 68 }, 69 RootDir: ".", 70 Playwright: playwright.Playwright{ 71 Version: cfg.frameworkVersion, 72 }, 73 Suites: []playwright.Suite{ 74 { 75 Name: fmt.Sprintf("playwright - %s - %s", cfg.platformName, cfg.browserName), 76 PlatformName: cfg.platformName, 77 Params: playwright.SuiteConfig{ 78 BrowserName: cfg.browserName, 79 Project: cfg.playwrightProject, 80 }, 81 TestMatch: cfg.testMatch, 82 }, 83 }, 84 Artifacts: config.Artifacts{ 85 Download: config.ArtifactDownload{ 86 When: cfg.artifactWhen, 87 Directory: "./artifacts", 88 Match: []string{"*"}, 89 }, 90 }, 91 } 92 } 93 94 //go:embed sauceignore/playwright.sauceignore 95 var sauceignorePlaywright string