From 5731815e629f1232cd29a1fdfa269780a07d7bf5 Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Thu, 17 Nov 2022 22:57:42 -0300 Subject: [PATCH] fix: improve github release code (#3547) It makes no sense, but I saw it happens some times... the release will be created as a draft, even though there's nothing telling it to do so. Editing the release later might do the trick, hopefully. closes #3541 Signed-off-by: Carlos A Becker --- internal/client/github.go | 49 ++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/internal/client/github.go b/internal/client/github.go index 1add7bf87de..2db254fdb02 100644 --- a/internal/client/github.go +++ b/internal/client/github.go @@ -200,7 +200,6 @@ func (c *githubClient) CreateFile( } 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) if err != nil { return "", err @@ -237,7 +236,25 @@ func (c *githubClient) CreateRelease(ctx *context.Context, body string) (string, } } - release, _, err = c.client.Repositories.GetReleaseByTag( + release, err := c.createOrUpdateRelease(ctx, data, body) + if err != nil { + return "", fmt.Errorf("could not release: %w", err) + } + + if release.GetDraft() != ctx.Config.Release.Draft { + // sometimes, for unknown reasons, the release is created as a draft, even though it isn't. + // This should publish it. + release.Draft = github.Bool(ctx.Config.Release.Draft) + if _, err := c.updateRelease(ctx, release.GetID(), release); err != nil { + return "", fmt.Errorf("could not update existing release: %w", err) + } + } + + return strconv.FormatInt(release.GetID(), 10), nil +} + +func (c *githubClient) createOrUpdateRelease(ctx *context.Context, data *github.RepositoryRelease, body string) (*github.RepositoryRelease, error) { + release, _, err := c.client.Repositories.GetReleaseByTag( ctx, ctx.Config.Release.GitHub.Owner, ctx.Config.Release.GitHub.Name, @@ -250,22 +267,22 @@ func (c *githubClient) CreateRelease(ctx *context.Context, body string) (string, ctx.Config.Release.GitHub.Name, data, ) - } else { - data.Body = github.String(getReleaseNotes(release.GetBody(), body, ctx.Config.Release.ReleaseNotesMode)) - release, _, err = c.client.Repositories.EditRelease( - ctx, - ctx.Config.Release.GitHub.Owner, - ctx.Config.Release.GitHub.Name, - release.GetID(), - data, - ) - } - if err != nil { - log.WithField("url", release.GetHTMLURL()).Info("release updated") + return release, err } - githubReleaseID := strconv.FormatInt(release.GetID(), 10) - return githubReleaseID, err + data.Body = github.String(getReleaseNotes(release.GetBody(), body, ctx.Config.Release.ReleaseNotesMode)) + return c.updateRelease(ctx, release.GetID(), data) +} + +func (c *githubClient) updateRelease(ctx *context.Context, id int64, data *github.RepositoryRelease) (*github.RepositoryRelease, error) { + repo, _, err := c.client.Repositories.EditRelease( + ctx, + ctx.Config.Release.GitHub.Owner, + ctx.Config.Release.GitHub.Name, + id, + data, + ) + return repo, err } func (c *githubClient) ReleaseURLTemplate(ctx *context.Context) (string, error) {