mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-01-13 21:21:03 +00:00
feat: ensure labels exist in repo
This commit is contained in:
parent
6120821631
commit
d1b9ae1908
3 changed files with 69 additions and 1 deletions
|
|
@ -69,7 +69,12 @@ func run(cmd *cobra.Command, _ []string) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
err := createPendingReleases(ctx, f)
|
err := ensureLabels(ctx, f)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to ensure all labels exist: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = createPendingReleases(ctx, f)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to create pending releases: %w", err)
|
return fmt.Errorf("failed to create pending releases: %w", err)
|
||||||
}
|
}
|
||||||
|
|
@ -87,6 +92,10 @@ func run(cmd *cobra.Command, _ []string) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ensureLabels(ctx context.Context, forge rp.Forge) error {
|
||||||
|
return forge.EnsureLabelsExist(ctx, rp.Labels)
|
||||||
|
}
|
||||||
|
|
||||||
func createPendingReleases(ctx context.Context, forge rp.Forge) error {
|
func createPendingReleases(ctx context.Context, forge rp.Forge) error {
|
||||||
logger.InfoContext(ctx, "checking for pending releases")
|
logger.InfoContext(ctx, "checking for pending releases")
|
||||||
prs, err := forge.PendingReleases(ctx)
|
prs, err := forge.PendingReleases(ctx)
|
||||||
|
|
|
||||||
49
forge.go
49
forge.go
|
|
@ -21,6 +21,7 @@ const (
|
||||||
GitHubPRStateClosed = "closed"
|
GitHubPRStateClosed = "closed"
|
||||||
GitHubEnvAPIToken = "GITHUB_TOKEN"
|
GitHubEnvAPIToken = "GITHUB_TOKEN"
|
||||||
GitHubEnvUsername = "GITHUB_USER"
|
GitHubEnvUsername = "GITHUB_USER"
|
||||||
|
GitHubLabelColor = "dedede"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Changeset struct {
|
type Changeset struct {
|
||||||
|
|
@ -47,6 +48,8 @@ type Forge interface {
|
||||||
// Changesets looks up the Pull/Merge Requests for each commit, returning its parsed metadata.
|
// Changesets looks up the Pull/Merge Requests for each commit, returning its parsed metadata.
|
||||||
Changesets(context.Context, []Commit) ([]Changeset, error)
|
Changesets(context.Context, []Commit) ([]Changeset, error)
|
||||||
|
|
||||||
|
EnsureLabelsExist(context.Context, []string) error
|
||||||
|
|
||||||
// PullRequestForBranch returns the open pull request between the branch and ForgeOptions.BaseBranch. If no open PR
|
// PullRequestForBranch returns the open pull request between the branch and ForgeOptions.BaseBranch. If no open PR
|
||||||
// exists, it returns nil.
|
// exists, it returns nil.
|
||||||
PullRequestForBranch(context.Context, string) (*ReleasePullRequest, error)
|
PullRequestForBranch(context.Context, string) (*ReleasePullRequest, error)
|
||||||
|
|
@ -322,6 +325,52 @@ func (g *GitHub) Changesets(ctx context.Context, commits []Commit) ([]Changeset,
|
||||||
return changesets, nil
|
return changesets, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GitHub) EnsureLabelsExist(ctx context.Context, labels []string) error {
|
||||||
|
existingLabels := make([]string, 0, len(labels))
|
||||||
|
|
||||||
|
page := 1
|
||||||
|
|
||||||
|
for {
|
||||||
|
g.log.Debug("fetching labels on repo", "page", page)
|
||||||
|
ghLabels, resp, err := g.client.Issues.ListLabels(
|
||||||
|
ctx, g.options.Owner, g.options.Repo,
|
||||||
|
&github.ListOptions{
|
||||||
|
Page: page,
|
||||||
|
PerPage: GitHubPerPageMax,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, label := range ghLabels {
|
||||||
|
existingLabels = append(existingLabels, label.GetName())
|
||||||
|
}
|
||||||
|
|
||||||
|
if page == resp.LastPage || resp.LastPage == 0 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
page = resp.NextPage
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, label := range labels {
|
||||||
|
if !slices.Contains(existingLabels, label) {
|
||||||
|
g.log.Info("creating label in repository", "label.name", label)
|
||||||
|
_, _, err := g.client.Issues.CreateLabel(
|
||||||
|
ctx, g.options.Owner, g.options.Repo,
|
||||||
|
&github.Label{
|
||||||
|
Name: &label,
|
||||||
|
Color: Pointer(GitHubLabelColor),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GitHub) PullRequestForBranch(ctx context.Context, branch string) (*ReleasePullRequest, error) {
|
func (g *GitHub) PullRequestForBranch(ctx context.Context, branch string) (*ReleasePullRequest, error) {
|
||||||
page := 1
|
page := 1
|
||||||
|
|
||||||
|
|
|
||||||
10
releasepr.go
10
releasepr.go
|
|
@ -99,6 +99,16 @@ const (
|
||||||
LabelReleaseTagged = "rp-release::tagged"
|
LabelReleaseTagged = "rp-release::tagged"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var Labels = []string{
|
||||||
|
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