From 901b5977e687301db880e9973a66221782722e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sat, 31 Aug 2024 10:20:16 +0200 Subject: [PATCH] wip --- internal/forge/forge.go | 9 ++++++--- internal/forge/github/github.go | 14 +++++++------- pr.go | 7 +++++++ releasepr.go | 24 +++++++++++------------- releaserpleaser.go | 2 +- 5 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 pr.go diff --git a/internal/forge/forge.go b/internal/forge/forge.go index 5636c93..6cb593f 100644 --- a/internal/forge/forge.go +++ b/internal/forge/forge.go @@ -26,7 +26,7 @@ type Forge interface { // EnsureLabelsExist verifies that all desired labels are available on the repository. If labels are missing, they // are created them. - EnsureLabelsExist(context.Context, []rp.Label) error + EnsureLabelsExist(context.Context, []Label) error // PullRequestForBranch returns the open pull request between the branch and Options.BaseBranch. If no open PR // exists, it returns nil. @@ -41,7 +41,7 @@ type Forge interface { // SetPullRequestLabels updates the pull/merge request identified through the ID of // the ReleasePullRequest to the current labels. - SetPullRequestLabels(ctx context.Context, pr *rp.ReleasePullRequest, remove, add []rp.Label) error + SetPullRequestLabels(ctx context.Context, pr *rp.ReleasePullRequest, remove, add []Label) error // ClosePullRequest closes the pull/merge request identified through the ID of // the ReleasePullRequest, as it is no longer required. @@ -49,7 +49,7 @@ type Forge interface { // PendingReleases returns a list of ReleasePullRequest. The list should contain all pull/merge requests that are // merged and have the matching label. - PendingReleases(context.Context, rp.Label) ([]*rp.ReleasePullRequest, error) + PendingReleases(context.Context, Label) ([]*rp.ReleasePullRequest, error) // CreateRelease creates a release on the Forge, pointing at the commit with the passed in details. CreateRelease(ctx context.Context, commit git.Commit, title, changelog string, prerelease, latest bool) error @@ -59,3 +59,6 @@ type Options struct { Repository string BaseBranch string } + +// Label is the string identifier of a pull/merge request label on the forge. +type Label string diff --git a/internal/forge/github/github.go b/internal/forge/github/github.go index 8021135..08c7be9 100644 --- a/internal/forge/github/github.go +++ b/internal/forge/github/github.go @@ -266,7 +266,7 @@ func (g *GitHub) prForCommit(ctx context.Context, commit git.Commit) (*git.PullR return gitHubPRToPullRequest(pullrequest), nil } -func (g *GitHub) EnsureLabelsExist(ctx context.Context, labels []rp.Label) error { +func (g *GitHub) EnsureLabelsExist(ctx context.Context, labels []forge.Label) error { existingLabels := make([]string, 0, len(labels)) page := 1 @@ -362,7 +362,7 @@ func (g *GitHub) CreatePullRequest(ctx context.Context, pr *rp.ReleasePullReques // TODO: String ID? pr.ID = ghPR.GetNumber() - err = g.SetPullRequestLabels(ctx, pr, []rp.Label{}, pr.Labels) + err = g.SetPullRequestLabels(ctx, pr, []forge.Label{}, pr.Labels) if err != nil { return err } @@ -385,7 +385,7 @@ func (g *GitHub) UpdatePullRequest(ctx context.Context, pr *rp.ReleasePullReques return nil } -func (g *GitHub) SetPullRequestLabels(ctx context.Context, pr *rp.ReleasePullRequest, remove, add []rp.Label) error { +func (g *GitHub) SetPullRequestLabels(ctx context.Context, pr *rp.ReleasePullRequest, remove, add []forge.Label) error { for _, label := range remove { _, err := g.client.Issues.RemoveLabelForIssue( ctx, g.options.Owner, g.options.Repo, @@ -426,7 +426,7 @@ func (g *GitHub) ClosePullRequest(ctx context.Context, pr *rp.ReleasePullRequest return nil } -func (g *GitHub) PendingReleases(ctx context.Context, pendingLabel rp.Label) ([]*rp.ReleasePullRequest, error) { +func (g *GitHub) PendingReleases(ctx context.Context, pendingLabel forge.Label) ([]*rp.ReleasePullRequest, error) { page := 1 var prs []*rp.ReleasePullRequest @@ -512,10 +512,10 @@ func gitHubPRToPullRequest(pr *github.PullRequest) *git.PullRequest { } func gitHubPRToReleasePullRequest(pr *github.PullRequest) *rp.ReleasePullRequest { - labels := make([]rp.Label, 0, len(pr.Labels)) + labels := make([]forge.Label, 0, len(pr.Labels)) for _, label := range pr.Labels { - labelName := rp.Label(label.GetName()) - if slices.Contains(rp.KnownLabels, rp.Label(label.GetName())) { + labelName := forge.Label(label.GetName()) + if slices.Contains(rp.KnownLabels, forge.Label(label.GetName())) { labels = append(labels, labelName) } } diff --git a/pr.go b/pr.go new file mode 100644 index 0000000..1c19e6f --- /dev/null +++ b/pr.go @@ -0,0 +1,7 @@ +package rp + +import "github.com/apricote/releaser-pleaser/internal/git" + +type PullRequest git.PullRequest + +func (pr *PullRequest) GetOverrides() {} diff --git a/releasepr.go b/releasepr.go index faa3a61..0b10bb7 100644 --- a/releasepr.go +++ b/releasepr.go @@ -12,6 +12,7 @@ import ( "github.com/yuin/goldmark/ast" "github.com/yuin/goldmark/text" + "github.com/apricote/releaser-pleaser/internal/forge" "github.com/apricote/releaser-pleaser/internal/git" "github.com/apricote/releaser-pleaser/internal/markdown" east "github.com/apricote/releaser-pleaser/internal/markdown/extensions/ast" @@ -34,12 +35,12 @@ func init() { // ReleasePullRequest // -// TODO: Reuse [PullRequest] +// TODO: Reuse [git.PullRequest] type ReleasePullRequest struct { ID int Title string Description string - Labels []Label + Labels []forge.Label Head string ReleaseCommit *git.Commit @@ -48,7 +49,7 @@ type ReleasePullRequest struct { func NewReleasePullRequest(head, branch, version, changelogEntry string) (*ReleasePullRequest, error) { rp := &ReleasePullRequest{ Head: head, - Labels: []Label{LabelReleasePending}, + Labels: []forge.Label{LabelReleasePending}, } rp.SetTitle(branch, version) @@ -103,20 +104,17 @@ func (n NextVersionType) IsPrerelease() bool { } } -// Label is the string identifier of a pull/merge request label on the forge. -type Label string - 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" + LabelNextVersionTypeNormal forge.Label = "rp-next-version::normal" + LabelNextVersionTypeRC forge.Label = "rp-next-version::rc" + LabelNextVersionTypeBeta forge.Label = "rp-next-version::beta" + LabelNextVersionTypeAlpha forge.Label = "rp-next-version::alpha" - LabelReleasePending Label = "rp-release::pending" - LabelReleaseTagged Label = "rp-release::tagged" + LabelReleasePending forge.Label = "rp-release::pending" + LabelReleaseTagged forge.Label = "rp-release::tagged" ) -var KnownLabels = []Label{ +var KnownLabels = []forge.Label{ LabelNextVersionTypeNormal, LabelNextVersionTypeRC, LabelNextVersionTypeBeta, diff --git a/releaserpleaser.go b/releaserpleaser.go index a047790..8fb62a1 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -132,7 +132,7 @@ func (rp *ReleaserPleaser) createPendingRelease(ctx context.Context, pr *Release logger.DebugContext(ctx, "created release", "release.title", version, "release.url", rp.forge.ReleaseURL(version)) logger.DebugContext(ctx, "updating pr labels") - err = rp.forge.SetPullRequestLabels(ctx, pr, []Label{LabelReleasePending}, []Label{LabelReleaseTagged}) + err = rp.forge.SetPullRequestLabels(ctx, pr, []forge.Label{LabelReleasePending}, []forge.Label{LabelReleaseTagged}) if err != nil { return err }