|
| 1 | +package cli |
| 2 | + |
| 3 | +import ( |
| 4 | + "fmt" |
| 5 | + "os" |
| 6 | + |
| 7 | + "github.com/google/go-containerregistry/pkg/authn" |
| 8 | + "github.com/spf13/cobra" |
| 9 | + |
| 10 | + "github.com/anotherjesse/r8im/pkg/auth" |
| 11 | + "github.com/anotherjesse/r8im/pkg/images" |
| 12 | +) |
| 13 | + |
| 14 | +func newCloneCommand() *cobra.Command { |
| 15 | + cmd := &cobra.Command{ |
| 16 | + Use: "clone", |
| 17 | + Short: "copy existing image to a new image", |
| 18 | + Hidden: false, |
| 19 | + RunE: cloneCommmand, |
| 20 | + } |
| 21 | + |
| 22 | + cmd.Flags().StringVarP(&sToken, "token", "t", "", "replicate cog token") |
| 23 | + cmd.Flags().StringVarP(&sRegistry, "registry", "r", "r8.im", "registry host") |
| 24 | + cmd.Flags().StringVarP(&baseRef, "base", "b", "", "base image reference - include tag: r8.im/username/modelname@sha256:hexdigest") |
| 25 | + cmd.MarkFlagRequired("base") |
| 26 | + cmd.Flags().StringVarP(&dest, "dest", "d", "", "destination image reference: r8.im/username/modelname") |
| 27 | + cmd.MarkFlagRequired("dest") |
| 28 | + |
| 29 | + return cmd |
| 30 | +} |
| 31 | + |
| 32 | +func cloneCommmand(cmd *cobra.Command, args []string) error { |
| 33 | + if sToken == "" { |
| 34 | + sToken = os.Getenv("COG_TOKEN") |
| 35 | + } |
| 36 | + |
| 37 | + u, err := auth.VerifyCogToken(sRegistry, sToken) |
| 38 | + if err != nil { |
| 39 | + fmt.Fprintln(os.Stderr, "authentication error, invalid token or registry host error") |
| 40 | + return err |
| 41 | + } |
| 42 | + auth := authn.FromConfig(authn.AuthConfig{Username: u, Password: sToken}) |
| 43 | + |
| 44 | + image_id, err := images.Affix(baseRef, dest, "", auth) |
| 45 | + if err != nil { |
| 46 | + return err |
| 47 | + } |
| 48 | + |
| 49 | + fmt.Println(image_id) |
| 50 | + |
| 51 | + return nil |
| 52 | +} |
0 commit comments