Skip to content

Commit 17de2f0

Browse files
committed
abstract platform creation
1 parent 8601152 commit 17de2f0

5 files changed

Lines changed: 31 additions & 39 deletions

File tree

digestabotctl/cmd/files.go

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package cmd
22

33
import (
4-
"fmt"
5-
"slices"
64
"time"
75

86
"github.com/chainguard-dev/platform-examples/digestabotctl/digestabot"
@@ -43,8 +41,9 @@ func validateFiles(cmd *cobra.Command, args []string) error {
4341
return err
4442
}
4543

46-
if !slices.Contains(platforms.ValidPlatforms, viper.GetString("platform")) {
47-
return fmt.Errorf("invalid platform, valid platforms: %s", platforms.ValidPlatforms)
44+
_, ok := platforms.ValidPlatforms[platforms.GitPlatform(viper.GetString("platform"))]
45+
if !ok {
46+
return platforms.ErrInvalidPlatform
4847
}
4948

5049
return nil
@@ -104,36 +103,15 @@ func handlePRForPlatform(platform string, checkout versioncontrol.CheckoutRespon
104103
},
105104
}
106105

107-
switch platform {
108-
case "github":
109-
{
110-
gh, err := platforms.NewGitHub(pr)
111-
if err != nil {
112-
return err
113-
}
114-
115-
if err := platforms.CreatePR(gh); err != nil {
116-
return err
117-
}
118-
119-
return nil
120-
}
121-
case "gitlab":
122-
{
123-
gl, err := platforms.NewGitLab(pr)
124-
if err != nil {
125-
return err
126-
}
127-
128-
if err := platforms.CreatePR(gl); err != nil {
129-
return err
130-
}
131-
132-
return nil
133-
}
134-
default:
135-
{
136-
return platforms.ErrInvalidPlatform
137-
}
106+
platformFunc := platforms.ValidPlatforms[platforms.GitPlatform(platform)]
107+
if platformFunc == nil {
108+
return platforms.ErrInvalidPlatform
138109
}
110+
111+
creator, err := platformFunc(pr)
112+
if err != nil {
113+
return err
114+
}
115+
116+
return creator.CreatePR()
139117
}

digestabotctl/cmd/flags.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package cmd
33
import (
44
"errors"
55
"fmt"
6+
"maps"
7+
"slices"
68

79
"github.com/chainguard-dev/platform-examples/digestabotctl/digestabot"
810
"github.com/chainguard-dev/platform-examples/digestabotctl/platforms"
@@ -63,5 +65,5 @@ func prFlags(cmd *cobra.Command) {
6365
cmd.PersistentFlags().String("title", "Updating image digests", "PR title")
6466
cmd.PersistentFlags().String("token", "", "API token")
6567
cmd.PersistentFlags().String("description", "Updating image digests", "PR description")
66-
cmd.PersistentFlags().String("platform", "", fmt.Sprintf("Platform to create the PR. Options are %s", platforms.ValidPlatforms))
68+
cmd.PersistentFlags().String("platform", "", fmt.Sprintf("Platform to create the PR. Options are %s", slices.Collect(maps.Keys(platforms.ValidPlatforms))))
6769
}

digestabotctl/platforms/github.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (g GitHub) CreatePR() error {
4545
return nil
4646
}
4747

48-
func NewGitHub(pr PullRequest) (GitHub, error) {
48+
func NewGitHub(pr PullRequest) (PRCreator, error) {
4949
temp := template.Must(template.New("file").Parse(prTemplate))
5050
var buf = bytes.Buffer{}
5151
if err := temp.Execute(&buf, pr); err != nil {

digestabotctl/platforms/gitlab.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func (g GitLab) CreatePR() error {
4545
return nil
4646
}
4747

48-
func NewGitLab(pr PullRequest) (GitLab, error) {
48+
func NewGitLab(pr PullRequest) (PRCreator, error) {
4949
temp := template.Must(template.New("file").Parse(prTemplate))
5050
var buf = bytes.Buffer{}
5151
if err := temp.Execute(&buf, pr); err != nil {

digestabotctl/platforms/platforms.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,26 @@ import (
99
"time"
1010
)
1111

12+
type GitPlatform string
13+
14+
var (
15+
GitHubPlatform GitPlatform = "github"
16+
GitLabPlatform GitPlatform = "gitlab"
17+
)
18+
1219
var successCodes = []int{200, 201, 202, 203, 204}
1320

1421
var (
15-
ValidPlatforms = []string{"github", "gitlab"}
22+
//ValidPlatforms = []string{"github", "gitlab"}
1623
ErrBadResponse = errors.New("request was unsuccessful")
1724
ErrInvalidPlatform = errors.New("invalid platform")
1825
)
1926

27+
var ValidPlatforms = map[GitPlatform]func(PullRequest) (PRCreator, error){
28+
GitHubPlatform: NewGitHub,
29+
GitLabPlatform: NewGitLab,
30+
}
31+
2032
var prTemplate = `{{ $tick := "` + "```" + `" -}}
2133
{{.Description}}
2234

0 commit comments

Comments
 (0)