diff --git a/internal/forge/github/github.go b/internal/forge/github/github.go index d96fc9d..90024eb 100644 --- a/internal/forge/github/github.go +++ b/internal/forge/github/github.go @@ -27,7 +27,6 @@ const ( EnvAPIToken = "GITHUB_TOKEN" // nolint:gosec // Not actually a hardcoded credential EnvUsername = "GITHUB_USER" EnvRepository = "GITHUB_REPOSITORY" - LabelColor = "dedede" ) var _ forge.Forge = &GitHub{} @@ -298,13 +297,14 @@ func (g *GitHub) EnsureLabelsExist(ctx context.Context, labels []releasepr.Label } for _, label := range labels { - if !slices.Contains(existingLabels, string(label)) { - g.log.Info("creating label in repository", "label.name", label) + if !slices.Contains(existingLabels, label.Name) { + g.log.Info("creating label in repository", "label.name", label.Name) _, _, err := g.client.Issues.CreateLabel( ctx, g.options.Owner, g.options.Repo, &github.Label{ - Name: pointer.Pointer(string(label)), - Color: pointer.Pointer(LabelColor), + Name: pointer.Pointer(label.Name), + Color: pointer.Pointer(label.Color), + Description: pointer.Pointer(label.Description), }, ) if err != nil { @@ -393,7 +393,7 @@ func (g *GitHub) SetPullRequestLabels(ctx context.Context, pr *releasepr.Release for _, label := range remove { _, err := g.client.Issues.RemoveLabelForIssue( ctx, g.options.Owner, g.options.Repo, - pr.ID, string(label), + pr.ID, label.Name, ) if err != nil { return err @@ -402,7 +402,7 @@ func (g *GitHub) SetPullRequestLabels(ctx context.Context, pr *releasepr.Release addString := make([]string, 0, len(add)) for _, label := range add { - addString = append(addString, string(label)) + addString = append(addString, label.Name) } _, _, err := g.client.Issues.AddLabelsToIssue( @@ -458,7 +458,7 @@ func (g *GitHub) PendingReleases(ctx context.Context, pendingLabel releasepr.Lab for _, pr := range ghPRs { pending := slices.ContainsFunc(pr.Labels, func(l *github.Label) bool { - return l.GetName() == string(pendingLabel) + return l.GetName() == pendingLabel.Name }) if !pending { continue @@ -518,9 +518,11 @@ func gitHubPRToPullRequest(pr *github.PullRequest) *git.PullRequest { func gitHubPRToReleasePullRequest(pr *github.PullRequest) *releasepr.ReleasePullRequest { labels := make([]releasepr.Label, 0, len(pr.Labels)) for _, label := range pr.Labels { - labelName := releasepr.Label(label.GetName()) - if slices.Contains(releasepr.KnownLabels, releasepr.Label(label.GetName())) { - labels = append(labels, labelName) + labelName := label.GetName() + if i := slices.IndexFunc(releasepr.KnownLabels, func(label releasepr.Label) bool { + return label.Name == labelName + }); i >= 0 { + labels = append(labels, releasepr.KnownLabels[i]) } } diff --git a/internal/releasepr/label.go b/internal/releasepr/label.go index 518eb87..7b529be 100644 --- a/internal/releasepr/label.go +++ b/internal/releasepr/label.go @@ -1 +1,54 @@ package releasepr + +// Label is the string identifier of a pull/merge request label on the forge. +type Label struct { + Color string + Name string + Description string +} + +var ( + LabelNextVersionTypeNormal = Label{ + Color: "EFC15B", + Name: "rp-next-version::normal", + Description: "Request a stable version", + } + LabelNextVersionTypeRC = Label{ + Color: "EFC15B", + Name: "rp-next-version::rc", + Description: "Request a pre-release -rc version", + } + LabelNextVersionTypeBeta = Label{ + Color: "EFC15B", + Name: "rp-next-version::beta", + Description: "Request a pre-release -beta version", + } + LabelNextVersionTypeAlpha = Label{ + Color: "EFC15B", + Name: "rp-next-version::alpha", + Description: "Request a pre-release -alpha version", + } +) + +var ( + LabelReleasePending = Label{ + Color: "DEDEDE", + Name: "rp-release::pending", + Description: "Release for this PR is pending", + } + LabelReleaseTagged = Label{ + Color: "0E8A16", + Name: "rp-release::tagged", + Description: "Release for this PR is created", + } +) + +var KnownLabels = []Label{ + LabelNextVersionTypeNormal, + LabelNextVersionTypeRC, + LabelNextVersionTypeBeta, + LabelNextVersionTypeAlpha, + + LabelReleasePending, + LabelReleaseTagged, +} diff --git a/internal/releasepr/releasepr.go b/internal/releasepr/releasepr.go index 505b3c0..22eac0a 100644 --- a/internal/releasepr/releasepr.go +++ b/internal/releasepr/releasepr.go @@ -36,9 +36,6 @@ type ReleasePullRequest struct { ReleaseCommit *git.Commit } -// Label is the string identifier of a pull/merge request label on the forge. -type Label string - func NewReleasePullRequest(head, branch, version, changelogEntry string) (*ReleasePullRequest, error) { rp := &ReleasePullRequest{ Head: head, @@ -59,26 +56,6 @@ type ReleaseOverrides struct { NextVersionType versioning.NextVersionType } -const ( - LabelNextVersionTypeNormal Label = "rp-next-version::normal" - LabelNextVersionTypeRC Label = "rp-next-version::rc" - LabelNextVersionTypeBeta Label = "rp-next-version::beta" - LabelNextVersionTypeAlpha Label = "rp-next-version::alpha" - - LabelReleasePending Label = "rp-release::pending" - LabelReleaseTagged Label = "rp-release::tagged" -) - -var KnownLabels = []Label{ - LabelNextVersionTypeNormal, - LabelNextVersionTypeRC, - LabelNextVersionTypeBeta, - LabelNextVersionTypeAlpha, - - LabelReleasePending, - LabelReleaseTagged, -} - const ( DescriptionLanguagePrefix = "rp-prefix" DescriptionLanguageSuffix = "rp-suffix"