From e2902707f9dabe787e5f72dda91adef70ce0396d Mon Sep 17 00:00:00 2001 From: yihuang Date: Mon, 9 May 2022 08:24:27 +0800 Subject: [PATCH] fix: update existing release drafts (#3073) Closes: #3072 --- internal/client/github.go | 46 ++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/internal/client/github.go b/internal/client/github.go index 45ef1d939f1..a29bd25974a 100644 --- a/internal/client/github.go +++ b/internal/client/github.go @@ -200,6 +200,36 @@ func (c *githubClient) CreateFile( return err } +// you can't get a an existing draft by tag +// so we must find one in the list of all releases +func (c *githubClient) findDraftRelease(ctx *context.Context) (*github.RepositoryRelease, error) { + opts := &github.ListOptions{ + Page: 1, + PerPage: 100, + } + for { + releases, resp, err := c.client.Repositories.ListReleases( + ctx, + ctx.Config.Release.GitHub.Owner, + ctx.Config.Release.GitHub.Name, + opts, + ) + if err != nil { + return nil, err + } + for _, r := range releases { + if r.TagName == &ctx.Git.CurrentTag { + return r, nil + } + } + if resp.NextPage == 0 { + break + } + opts.Page = resp.NextPage + } + return nil, nil +} + func (c *githubClient) CreateRelease(ctx *context.Context, body string) (string, error) { var release *github.RepositoryRelease title, err := tmpl.New(ctx).Apply(ctx.Config.Release.NameTemplate) @@ -221,12 +251,16 @@ func (c *githubClient) CreateRelease(ctx *context.Context, body string) (string, data.DiscussionCategoryName = github.String(ctx.Config.Release.DiscussionCategoryName) } - release, _, err = c.client.Repositories.GetReleaseByTag( - ctx, - ctx.Config.Release.GitHub.Owner, - ctx.Config.Release.GitHub.Name, - ctx.Git.CurrentTag, - ) + if ctx.Config.Release.Draft { + release, err = c.findDraftRelease(ctx) + } else { + release, _, err = c.client.Repositories.GetReleaseByTag( + ctx, + ctx.Config.Release.GitHub.Owner, + ctx.Config.Release.GitHub.Name, + ctx.Git.CurrentTag, + ) + } if err != nil { release, _, err = c.client.Repositories.CreateRelease( ctx,