Skip to content

Commit ec6b9f4

Browse files
authored
Merge pull request #69 from amands98/artifact
Add artifacts, tags, labels command to harbor - scan, list, delete,info + Refractor
2 parents 381ec2d + a97d084 commit ec6b9f4

54 files changed

Lines changed: 1469 additions & 1114 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cmd/harbor/root/artifact/cmd.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package artifact
2+
3+
import (
4+
"github.com/spf13/cobra"
5+
)
6+
7+
func Artifact() *cobra.Command {
8+
9+
cmd := &cobra.Command{
10+
Use: "artifact",
11+
Short: "Manage artifacts",
12+
Long: `Manage artifacts in Harbor Repository`,
13+
Example: ` harbor artifact list`,
14+
}
15+
16+
cmd.AddCommand(
17+
ListArtifactCommand(),
18+
InfoArtifactCommmand(),
19+
DeleteArtifactCommand(),
20+
ScanArtifactCommand(),
21+
ArtifactTagsCmd(),
22+
)
23+
24+
return cmd
25+
}

cmd/harbor/root/artifact/delete.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package artifact
2+
3+
import (
4+
"github.com/goharbor/harbor-cli/pkg/api"
5+
"github.com/goharbor/harbor-cli/pkg/prompt"
6+
"github.com/goharbor/harbor-cli/pkg/utils"
7+
log "github.com/sirupsen/logrus"
8+
"github.com/spf13/cobra"
9+
)
10+
11+
func DeleteArtifactCommand() *cobra.Command {
12+
cmd := &cobra.Command{
13+
Use: "delete",
14+
Short: "delete an artifact",
15+
Args: cobra.MaximumNArgs(1),
16+
Run: func(cmd *cobra.Command, args []string) {
17+
var err error
18+
19+
if len(args) > 0 {
20+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
21+
err = api.DeleteArtifact(projectName, repoName, reference)
22+
} else {
23+
projectName := prompt.GetProjectNameFromUser()
24+
repoName := prompt.GetRepoNameFromUser(projectName)
25+
reference := prompt.GetReferenceFromUser(repoName, projectName)
26+
err = api.DeleteArtifact(projectName, repoName, reference)
27+
}
28+
29+
if err != nil {
30+
log.Errorf("failed to delete an artifact: %v", err)
31+
}
32+
},
33+
}
34+
35+
return cmd
36+
}

cmd/harbor/root/artifact/info.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package artifact
2+
3+
import (
4+
"github.com/goharbor/harbor-cli/pkg/api"
5+
"github.com/goharbor/harbor-cli/pkg/prompt"
6+
"github.com/goharbor/harbor-cli/pkg/utils"
7+
log "github.com/sirupsen/logrus"
8+
"github.com/spf13/cobra"
9+
)
10+
11+
func InfoArtifactCommmand() *cobra.Command {
12+
13+
cmd := &cobra.Command{
14+
Use: "info",
15+
Short: "Get info of an artifact",
16+
Long: `Get info of an artifact`,
17+
Example: `harbor artifact info <project>/<repository>/<reference>`,
18+
Run: func(cmd *cobra.Command, args []string) {
19+
var err error
20+
21+
if len(args) > 0 {
22+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
23+
err = api.InfoArtifact(projectName, repoName, reference)
24+
} else {
25+
projectName := prompt.GetProjectNameFromUser()
26+
repoName := prompt.GetRepoNameFromUser(projectName)
27+
reference := prompt.GetReferenceFromUser(repoName, projectName)
28+
err = api.InfoArtifact(projectName, repoName, reference)
29+
}
30+
31+
if err != nil {
32+
log.Errorf("failed to get info of an artifact: %v", err)
33+
}
34+
35+
},
36+
}
37+
38+
return cmd
39+
}

cmd/harbor/root/artifact/list.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package artifact
2+
3+
import (
4+
"github.com/goharbor/go-client/pkg/sdk/v2.0/client/artifact"
5+
"github.com/goharbor/harbor-cli/pkg/api"
6+
"github.com/goharbor/harbor-cli/pkg/prompt"
7+
"github.com/goharbor/harbor-cli/pkg/utils"
8+
log "github.com/sirupsen/logrus"
9+
"github.com/spf13/cobra"
10+
)
11+
12+
func ListArtifactCommand() *cobra.Command {
13+
cmd := &cobra.Command{
14+
Use: "list",
15+
Short: "list artifacts within a repository",
16+
Args: cobra.MaximumNArgs(1),
17+
Run: func(cmd *cobra.Command, args []string) {
18+
var err error
19+
var resp artifact.ListArtifactsOK
20+
21+
if len(args) > 0 {
22+
projectName, repoName := utils.ParseProjectRepo(args[0])
23+
resp, err = api.ListArtifact(projectName, repoName)
24+
} else {
25+
projectName := prompt.GetProjectNameFromUser()
26+
repoName := prompt.GetRepoNameFromUser(projectName)
27+
resp, err = api.ListArtifact(projectName, repoName)
28+
}
29+
30+
if err != nil {
31+
log.Errorf("failed to list artifacts: %v", err)
32+
}
33+
34+
log.Infof("Artifacts: %v", resp)
35+
36+
},
37+
}
38+
39+
return cmd
40+
}

cmd/harbor/root/artifact/scan.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package artifact
2+
3+
import (
4+
"github.com/goharbor/harbor-cli/pkg/api"
5+
"github.com/goharbor/harbor-cli/pkg/prompt"
6+
"github.com/goharbor/harbor-cli/pkg/utils"
7+
"github.com/spf13/cobra"
8+
)
9+
10+
func ScanArtifactCommand() *cobra.Command {
11+
cmd := &cobra.Command{
12+
Use: "scan",
13+
Short: "Scan an artifact",
14+
Long: `Scan an artifact in Harbor Repository`,
15+
Example: `harbor artifact scan start <project>/<repository>/<reference>`,
16+
}
17+
18+
cmd.AddCommand(
19+
StartScanArtifactCommand(),
20+
StopScanArtifactCommand(),
21+
// LogScanArtifactCommand(),
22+
)
23+
24+
return cmd
25+
}
26+
27+
func StartScanArtifactCommand() *cobra.Command {
28+
cmd := &cobra.Command{
29+
Use: "start",
30+
Short: "Start a scan of an artifact",
31+
Long: `Start a scan of an artifact in Harbor Repository`,
32+
Example: `harbor artifact scan start <project>/<repository>/<reference>`,
33+
Run: func(cmd *cobra.Command, args []string) {
34+
35+
if len(args) > 0 {
36+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
37+
api.StartScanArtifact(projectName, repoName, reference)
38+
} else {
39+
projectName := prompt.GetProjectNameFromUser()
40+
repoName := prompt.GetRepoNameFromUser(projectName)
41+
reference := prompt.GetReferenceFromUser(repoName, projectName)
42+
api.StartScanArtifact(projectName, repoName, reference)
43+
}
44+
45+
},
46+
}
47+
return cmd
48+
}
49+
50+
func StopScanArtifactCommand() *cobra.Command {
51+
cmd := &cobra.Command{
52+
Use: "stop",
53+
Short: "Stop a scan of an artifact",
54+
Long: `Stop a scan of an artifact in Harbor Repository`,
55+
Example: `harbor artifact scan stop <project>/<repository>/<reference>`,
56+
Run: func(cmd *cobra.Command, args []string) {
57+
58+
if len(args) > 0 {
59+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
60+
api.StopScanArtifact(projectName, repoName, reference)
61+
} else {
62+
projectName := prompt.GetProjectNameFromUser()
63+
repoName := prompt.GetRepoNameFromUser(projectName)
64+
reference := prompt.GetReferenceFromUser(repoName, projectName)
65+
api.StopScanArtifact(projectName, repoName, reference)
66+
}
67+
68+
},
69+
}
70+
return cmd
71+
}

cmd/harbor/root/artifact/tags.go

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package artifact
2+
3+
import (
4+
"github.com/goharbor/go-client/pkg/sdk/v2.0/client/artifact"
5+
"github.com/goharbor/harbor-cli/pkg/api"
6+
"github.com/goharbor/harbor-cli/pkg/prompt"
7+
"github.com/goharbor/harbor-cli/pkg/utils"
8+
"github.com/goharbor/harbor-cli/pkg/views/artifact/tags/create"
9+
log "github.com/sirupsen/logrus"
10+
"github.com/spf13/cobra"
11+
)
12+
13+
func ArtifactTagsCmd() *cobra.Command {
14+
15+
cmd := &cobra.Command{
16+
Use: "tags",
17+
Short: "Manage tags of an artifact",
18+
Example: ` harbor artifact tags list <project>/<repository>/<reference>`,
19+
}
20+
21+
cmd.AddCommand(
22+
ListTagsCmd(),
23+
DeleteTagsCmd(),
24+
CreateTagsCmd(),
25+
)
26+
27+
return cmd
28+
}
29+
30+
func CreateTagsCmd() *cobra.Command {
31+
cmd := &cobra.Command{
32+
Use: "create",
33+
Short: "Create a tag of an artifact",
34+
Example: `harbor artifact tags create <project>/<repository>/<reference> <tag>`,
35+
Run: func(cmd *cobra.Command, args []string) {
36+
37+
if len(args) > 0 {
38+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
39+
tag := args[1]
40+
api.CreateTag(projectName, repoName, reference, tag)
41+
} else {
42+
var tagName string
43+
projectName := prompt.GetProjectNameFromUser()
44+
repoName := prompt.GetRepoNameFromUser(projectName)
45+
reference := prompt.GetReferenceFromUser(repoName, projectName)
46+
create.CreateTagView(&tagName)
47+
api.CreateTag(projectName, repoName, reference, tagName)
48+
}
49+
},
50+
}
51+
52+
return cmd
53+
}
54+
55+
func ListTagsCmd() *cobra.Command {
56+
cmd := &cobra.Command{
57+
Use: "list",
58+
Short: "List tags of an artifact",
59+
Example: `harbor artifact tags list <project>/<repository>/<reference>`,
60+
Run: func(cmd *cobra.Command, args []string) {
61+
62+
var resp artifact.ListTagsOK
63+
if len(args) > 0 {
64+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
65+
resp, _ = api.ListTags(projectName, repoName, reference)
66+
} else {
67+
projectName := prompt.GetProjectNameFromUser()
68+
repoName := prompt.GetRepoNameFromUser(projectName)
69+
reference := prompt.GetReferenceFromUser(repoName, projectName)
70+
resp, _ = api.ListTags(projectName, repoName, reference)
71+
}
72+
73+
log.Info(resp.Payload)
74+
75+
},
76+
}
77+
78+
return cmd
79+
}
80+
81+
func DeleteTagsCmd() *cobra.Command {
82+
cmd := &cobra.Command{
83+
Use: "delete",
84+
Short: "Delete a tag of an artifact",
85+
Example: `harbor artifact tags delete <project>/<repository>/<reference> <tag>`,
86+
Run: func(cmd *cobra.Command, args []string) {
87+
if len(args) > 0 {
88+
projectName, repoName, reference := utils.ParseProjectRepoReference(args[0])
89+
tag := args[1]
90+
api.DeleteTag(projectName, repoName, reference, tag)
91+
} else {
92+
projectName := prompt.GetProjectNameFromUser()
93+
repoName := prompt.GetRepoNameFromUser(projectName)
94+
reference := prompt.GetReferenceFromUser(repoName, projectName)
95+
tag := prompt.GetTagFromUser(repoName, projectName, reference)
96+
api.DeleteTag(projectName, repoName, reference, tag)
97+
}
98+
},
99+
}
100+
101+
return cmd
102+
}

cmd/harbor/root/cmd.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"log"
66
"os"
77

8+
"github.com/goharbor/harbor-cli/cmd/harbor/root/artifact"
89
"github.com/goharbor/harbor-cli/cmd/harbor/root/project"
910
"github.com/goharbor/harbor-cli/cmd/harbor/root/registry"
1011
repositry "github.com/goharbor/harbor-cli/cmd/harbor/root/repository"
@@ -104,6 +105,7 @@ harbor help
104105
registry.Registry(),
105106
repositry.Repository(),
106107
user.User(),
108+
artifact.Artifact(),
107109
)
108110

109111
return root

cmd/harbor/root/labels/add.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package labels

cmd/harbor/root/labels/cmd.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package labels
2+
3+
import "github.com/spf13/cobra"
4+
5+
func Labels() *cobra.Command {
6+
cmd := &cobra.Command{
7+
Use: "label",
8+
Short: "Manage labels in Harbor",
9+
}
10+
11+
return cmd
12+
}

cmd/harbor/root/labels/delete.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package labels

0 commit comments

Comments
 (0)