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}