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 }