1package cmd
 2
 3import (
 4	"strings"
 5
 6	"github.com/charmbracelet/soft-serve/server/backend"
 7	"github.com/spf13/cobra"
 8)
 9
10func tagCommand() *cobra.Command {
11	cmd := &cobra.Command{
12		Use:   "tag",
13		Short: "Manage repository tags",
14	}
15
16	cmd.AddCommand(
17		tagListCommand(),
18		tagDeleteCommand(),
19	)
20
21	return cmd
22}
23
24func tagListCommand() *cobra.Command {
25	cmd := &cobra.Command{
26		Use:               "list REPOSITORY",
27		Aliases:           []string{"ls"},
28		Short:             "List repository tags",
29		Args:              cobra.ExactArgs(1),
30		PersistentPreRunE: checkIfReadable,
31		RunE: func(cmd *cobra.Command, args []string) error {
32			ctx := cmd.Context()
33			be := backend.FromContext(ctx)
34			rn := strings.TrimSuffix(args[0], ".git")
35			rr, err := be.Repository(ctx, rn)
36			if err != nil {
37				return err
38			}
39
40			r, err := rr.Open()
41			if err != nil {
42				return err
43			}
44
45			tags, _ := r.Tags()
46			for _, t := range tags {
47				cmd.Println(t)
48			}
49
50			return nil
51		},
52	}
53
54	return cmd
55}
56
57func tagDeleteCommand() *cobra.Command {
58	cmd := &cobra.Command{
59		Use:               "delete REPOSITORY TAG",
60		Aliases:           []string{"remove", "rm", "del"},
61		Short:             "Delete a tag",
62		Args:              cobra.ExactArgs(2),
63		PersistentPreRunE: checkIfCollab,
64		RunE: func(cmd *cobra.Command, args []string) error {
65			ctx := cmd.Context()
66			be := backend.FromContext(ctx)
67			rn := strings.TrimSuffix(args[0], ".git")
68			rr, err := be.Repository(ctx, rn)
69			if err != nil {
70				return err
71			}
72
73			r, err := rr.Open()
74			if err != nil {
75				return err
76			}
77
78			return r.DeleteTag(args[1])
79		},
80	}
81
82	return cmd
83}