refactor: labels as structs with descriptions (#46)

This commit is contained in:
Julian Tölle 2024-09-07 21:33:28 +02:00 committed by GitHub
parent 0a199e693f
commit af505c94c6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 66 additions and 34 deletions

View file

@ -27,7 +27,6 @@ const (
EnvAPIToken = "GITHUB_TOKEN" // nolint:gosec // Not actually a hardcoded credential EnvAPIToken = "GITHUB_TOKEN" // nolint:gosec // Not actually a hardcoded credential
EnvUsername = "GITHUB_USER" EnvUsername = "GITHUB_USER"
EnvRepository = "GITHUB_REPOSITORY" EnvRepository = "GITHUB_REPOSITORY"
LabelColor = "dedede"
) )
var _ forge.Forge = &GitHub{} var _ forge.Forge = &GitHub{}
@ -298,13 +297,14 @@ func (g *GitHub) EnsureLabelsExist(ctx context.Context, labels []releasepr.Label
} }
for _, label := range labels { for _, label := range labels {
if !slices.Contains(existingLabels, string(label)) { if !slices.Contains(existingLabels, label.Name) {
g.log.Info("creating label in repository", "label.name", label) g.log.Info("creating label in repository", "label.name", label.Name)
_, _, err := g.client.Issues.CreateLabel( _, _, err := g.client.Issues.CreateLabel(
ctx, g.options.Owner, g.options.Repo, ctx, g.options.Owner, g.options.Repo,
&github.Label{ &github.Label{
Name: pointer.Pointer(string(label)), Name: pointer.Pointer(label.Name),
Color: pointer.Pointer(LabelColor), Color: pointer.Pointer(label.Color),
Description: pointer.Pointer(label.Description),
}, },
) )
if err != nil { if err != nil {
@ -393,7 +393,7 @@ func (g *GitHub) SetPullRequestLabels(ctx context.Context, pr *releasepr.Release
for _, label := range remove { for _, label := range remove {
_, err := g.client.Issues.RemoveLabelForIssue( _, err := g.client.Issues.RemoveLabelForIssue(
ctx, g.options.Owner, g.options.Repo, ctx, g.options.Owner, g.options.Repo,
pr.ID, string(label), pr.ID, label.Name,
) )
if err != nil { if err != nil {
return err return err
@ -402,7 +402,7 @@ func (g *GitHub) SetPullRequestLabels(ctx context.Context, pr *releasepr.Release
addString := make([]string, 0, len(add)) addString := make([]string, 0, len(add))
for _, label := range add { for _, label := range add {
addString = append(addString, string(label)) addString = append(addString, label.Name)
} }
_, _, err := g.client.Issues.AddLabelsToIssue( _, _, err := g.client.Issues.AddLabelsToIssue(
@ -458,7 +458,7 @@ func (g *GitHub) PendingReleases(ctx context.Context, pendingLabel releasepr.Lab
for _, pr := range ghPRs { for _, pr := range ghPRs {
pending := slices.ContainsFunc(pr.Labels, func(l *github.Label) bool { pending := slices.ContainsFunc(pr.Labels, func(l *github.Label) bool {
return l.GetName() == string(pendingLabel) return l.GetName() == pendingLabel.Name
}) })
if !pending { if !pending {
continue continue
@ -518,9 +518,11 @@ func gitHubPRToPullRequest(pr *github.PullRequest) *git.PullRequest {
func gitHubPRToReleasePullRequest(pr *github.PullRequest) *releasepr.ReleasePullRequest { func gitHubPRToReleasePullRequest(pr *github.PullRequest) *releasepr.ReleasePullRequest {
labels := make([]releasepr.Label, 0, len(pr.Labels)) labels := make([]releasepr.Label, 0, len(pr.Labels))
for _, label := range pr.Labels { for _, label := range pr.Labels {
labelName := releasepr.Label(label.GetName()) labelName := label.GetName()
if slices.Contains(releasepr.KnownLabels, releasepr.Label(label.GetName())) { if i := slices.IndexFunc(releasepr.KnownLabels, func(label releasepr.Label) bool {
labels = append(labels, labelName) return label.Name == labelName
}); i >= 0 {
labels = append(labels, releasepr.KnownLabels[i])
} }
} }

View file

@ -1 +1,54 @@
package releasepr 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,
}

View file

@ -36,9 +36,6 @@ type ReleasePullRequest struct {
ReleaseCommit *git.Commit 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) { func NewReleasePullRequest(head, branch, version, changelogEntry string) (*ReleasePullRequest, error) {
rp := &ReleasePullRequest{ rp := &ReleasePullRequest{
Head: head, Head: head,
@ -59,26 +56,6 @@ type ReleaseOverrides struct {
NextVersionType versioning.NextVersionType 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 ( const (
DescriptionLanguagePrefix = "rp-prefix" DescriptionLanguagePrefix = "rp-prefix"
DescriptionLanguageSuffix = "rp-suffix" DescriptionLanguageSuffix = "rp-suffix"