github.com/saucelabs/saucectl@v0.175.1/internal/cmd/apit/getsnippet.go (about)

     1  package apit
     2  
     3  import (
     4  	"context"
     5  	"errors"
     6  	"fmt"
     7  
     8  	cmds "github.com/saucelabs/saucectl/internal/cmd"
     9  	"github.com/saucelabs/saucectl/internal/http"
    10  	"github.com/saucelabs/saucectl/internal/segment"
    11  	"github.com/saucelabs/saucectl/internal/usage"
    12  	"github.com/spf13/cobra"
    13  	"golang.org/x/text/cases"
    14  	"golang.org/x/text/language"
    15  )
    16  
    17  func GetSnippetCommand() *cobra.Command {
    18  	cmd := &cobra.Command{
    19  		Use:   "get-snippet NAME [--project PROJECT_NAME]",
    20  		Short: "Get a vault snippet",
    21  		Long: `Get a snippet from a project's vault. 
    22  
    23  Use [--project] to specify the project by its name or run without [--project] to choose from a list of projects.
    24  `,
    25  		SilenceUsage: true,
    26  		Args: func(cmd *cobra.Command, args []string) error {
    27  			if len(args) == 0 || args[0] == "" {
    28  				return errors.New("no snippet name specified")
    29  			}
    30  			return nil
    31  		},
    32  		PreRunE: func(cmd *cobra.Command, args []string) error {
    33  			err := http.CheckProxy()
    34  			if err != nil {
    35  				return fmt.Errorf("invalid HTTP_PROXY value")
    36  			}
    37  
    38  			tracker := segment.DefaultTracker
    39  
    40  			go func() {
    41  				tracker.Collect(
    42  					cases.Title(language.English).String(cmds.FullName(cmd)),
    43  					usage.Properties{}.SetFlags(cmd.Flags()),
    44  				)
    45  				_ = tracker.Close()
    46  			}()
    47  			return nil
    48  		},
    49  		RunE: func(cmd *cobra.Command, args []string) error {
    50  			name := args[0]
    51  			vault, err := apitesterClient.GetVault(context.Background(), selectedProject.Hooks[0].Identifier)
    52  			if err != nil {
    53  				return err
    54  			}
    55  
    56  			v, ok := vault.Snippets[name]
    57  			if !ok {
    58  				return fmt.Errorf("project %q has no vault snippet with name %q", selectedProject.ProjectMeta.Name, name)
    59  			}
    60  
    61  			fmt.Printf("%s", v)
    62  			return nil
    63  		},
    64  	}
    65  	return cmd
    66  }