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

fix: Handle error on failed release (github) (#5106)

When trying to release an artifact to github and it fails, I observed
the following stacktrace:
```
• publishing
    • scm releases
      • releasing                                    tag=v1.11.0 repo=my-github-repo
      • could not check rate limits, hoping for the best...
      • could not check rate limits, hoping for the best...
      • took: 1m40s
  • took: 1m40s
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xe28b72]
goroutine 55 [running]:
github.com/goreleaser/goreleaser/v2/internal/client.(*githubClient).createOrUpdateRelease(0xc0001b24c8, 0xc0002c5108, 0xc000b478, {0xc00039ed00, 0x80e})
	github.com/goreleaser/goreleaser/v2@v2.2.0/internal/client/github.go:454 +0x3b2
github.com/goreleaser/goreleaser/v2/internal/client.(*githubClient).CreateRelease(0xc0001b24c8, 0xc0002c5108, {0xc00039ed00, 0x80e})
	github.com/goreleaser/goreleaser/v2@v2.2.0/internal/client/github.go:402 +0x339
github.com/goreleaser/goreleaser/v2/internal/pipe/release.doPublish(0xc0002c5108, {0x2ce2d40, 0xc0001b24c8})
...
```

I believe this happens because if the
[CreateRelease](c96ef954c3/github/repos_releases.go (L221))
fails, resp might be empty and the resp.Header does not exist, which
causes a segfault.
```
WithField("request-id", resp.Header.Get("X-GitHub-Request-Id")).
```

Signed-off-by: Manuel Rüger <manuel@rueg.eu>
This commit is contained in:
Manuel Rüger 2024-08-29 02:32:27 +02:00 committed by GitHub
parent 5a10792f7e
commit 6272ce0e6d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -449,6 +449,19 @@ func (c *githubClient) createOrUpdateRelease(ctx *context.Context, data *github.
ctx.Config.Release.GitHub.Name,
data,
)
if resp == nil {
log.WithField("name", data.GetName()).
WithError(err).
Debug("release creation failed")
return nil, err
}
if err != nil {
log.WithField("name", data.GetName()).
WithField("request-id", resp.Header.Get("X-Github-Request-Id")).
WithError(err).
Debug("release creation failed")
return nil, err
}
log.WithField("name", data.GetName()).
WithField("release-id", release.GetID()).
WithField("request-id", resp.Header.Get("X-GitHub-Request-Id")).