mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-01-13 21:21:03 +00:00
refactor: labels as structs with descriptions (#46)
This commit is contained in:
parent
0a199e693f
commit
af505c94c6
3 changed files with 66 additions and 34 deletions
|
|
@ -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])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue