github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/cli/create_repo.go (about)

     1  package cli
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  
     7  	"github.com/spf13/cobra"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  	"k8s.io/cli-runtime/pkg/genericclioptions"
    10  
    11  	"github.com/tilt-dev/tilt/internal/analytics"
    12  	engineanalytics "github.com/tilt-dev/tilt/internal/engine/analytics"
    13  	"github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"
    14  	"github.com/tilt-dev/tilt/pkg/model"
    15  )
    16  
    17  // A human-friendly CLI for creating extension repos.
    18  type createRepoCmd struct {
    19  	helper *createHelper
    20  
    21  	ref string
    22  }
    23  
    24  var _ tiltCmd = &createRepoCmd{}
    25  
    26  func newCreateRepoCmd(streams genericclioptions.IOStreams) *createRepoCmd {
    27  	helper := newCreateHelper(streams)
    28  	return &createRepoCmd{
    29  		helper: helper,
    30  	}
    31  }
    32  
    33  func (c *createRepoCmd) name() model.TiltSubcommand { return "create" }
    34  
    35  func (c *createRepoCmd) register() *cobra.Command {
    36  	cmd := &cobra.Command{
    37  		Use:                   "repo NAME URL [ARG...]",
    38  		DisableFlagsInUseLine: true,
    39  		Short:                 "Register an extension repository.",
    40  		Long: `Register a repository for loading Tilt extensions.
    41  
    42  Tilt supports both git-hosted and local filesystem repositories.
    43  `,
    44  		Args: cobra.MinimumNArgs(2),
    45  		Example: `
    46  tilt create repo default https://github.com/tilt-dev/tilt-extensions
    47  tilt create repo default file:///home/user/src/tilt-extensions
    48  tilt create repo default https://github.com/tilt-dev/tilt-extensions --ref=SHA
    49  `,
    50  	}
    51  
    52  	cmd.Flags().StringVar(&c.ref, "ref", "",
    53  		"Git reference to sync the repository to.")
    54  
    55  	c.helper.addFlags(cmd)
    56  
    57  	return cmd
    58  }
    59  
    60  func (c *createRepoCmd) run(ctx context.Context, args []string) error {
    61  	a := analytics.Get(ctx)
    62  	cmdTags := engineanalytics.CmdTags(map[string]string{})
    63  	a.Incr("cmd.create-repo", cmdTags.AsMap())
    64  	defer a.Flush(time.Second)
    65  
    66  	err := c.helper.interpretFlags(ctx)
    67  	if err != nil {
    68  		return err
    69  	}
    70  
    71  	return c.helper.create(ctx, c.object(args))
    72  }
    73  
    74  func (c *createRepoCmd) object(args []string) *v1alpha1.ExtensionRepo {
    75  	name := args[0]
    76  	url := args[1]
    77  	return &v1alpha1.ExtensionRepo{
    78  		ObjectMeta: metav1.ObjectMeta{
    79  			Name: name,
    80  		},
    81  		Spec: v1alpha1.ExtensionRepoSpec{
    82  			URL: url,
    83  			Ref: c.ref,
    84  		},
    85  	}
    86  }