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
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])
}
}

View file

@ -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,
}

View file

@ -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"