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