1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-03-17 20:47:50 +02:00

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 <caarlos0@users.noreply.github.com>
This commit is contained in:
Carlos Alexandro Becker 2022-11-17 22:57:42 -03:00 committed by GitHub
parent 59138b43ce
commit 5731815e62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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) {