1
0
mirror of https://github.com/goreleaser/goreleaser.git synced 2025-02-07 13:31:37 +02:00
goreleaser/client/github.go

123 lines
2.6 KiB
Go
Raw Normal View History

2017-04-14 16:07:27 -03:00
package client
2017-01-14 14:50:46 -02:00
import (
2017-03-26 14:46:25 -03:00
"bytes"
2017-04-21 19:50:09 -03:00
"log"
2017-03-26 14:46:25 -03:00
"os"
2017-01-14 14:50:46 -02:00
"github.com/google/go-github/github"
2017-02-23 16:01:54 -03:00
"github.com/goreleaser/goreleaser/context"
2017-01-14 14:50:46 -02:00
"golang.org/x/oauth2"
)
2017-03-26 14:46:25 -03:00
type githubClient struct {
client *github.Client
}
2017-04-14 16:07:27 -03:00
// NewGitHub returns a github client implementation
func NewGitHub(ctx *context.Context) Client {
2017-01-14 14:50:46 -02:00
ts := oauth2.StaticTokenSource(
2017-02-23 16:01:54 -03:00
&oauth2.Token{AccessToken: ctx.Token},
2017-01-14 14:50:46 -02:00
)
2017-03-26 14:46:25 -03:00
return &githubClient{
client: github.NewClient(oauth2.NewClient(ctx, ts)),
}
}
func (c *githubClient) CreateFile(
ctx *context.Context,
content bytes.Buffer,
path string,
) (err error) {
options := &github.RepositoryContentFileOptions{
Committer: &github.CommitAuthor{
Name: github.String("goreleaserbot"),
Email: github.String("bot@goreleaser"),
},
Content: content.Bytes(),
Message: github.String(
ctx.Config.Build.Binary + " version " + ctx.Git.CurrentTag,
),
}
file, _, res, err := c.client.Repositories.GetContents(
ctx,
ctx.Config.Brew.GitHub.Owner,
ctx.Config.Brew.GitHub.Name,
path,
&github.RepositoryContentGetOptions{},
)
if err != nil && res.StatusCode == 404 {
_, _, err = c.client.Repositories.CreateFile(
ctx,
ctx.Config.Brew.GitHub.Owner,
ctx.Config.Brew.GitHub.Name,
path,
options,
)
return
}
options.SHA = file.SHA
_, _, err = c.client.Repositories.UpdateFile(
ctx,
ctx.Config.Brew.GitHub.Owner,
ctx.Config.Brew.GitHub.Name,
path,
options,
)
return
}
2017-04-19 16:59:26 -03:00
func (c *githubClient) CreateRelease(ctx *context.Context, body string) (releaseID int, err error) {
2017-04-21 19:50:09 -03:00
var release *github.RepositoryRelease
var data = &github.RepositoryRelease{
2017-03-26 14:46:25 -03:00
Name: github.String(ctx.Git.CurrentTag),
TagName: github.String(ctx.Git.CurrentTag),
2017-04-19 16:59:26 -03:00
Body: github.String(body),
2017-04-21 19:50:09 -03:00
Draft: github.Bool(ctx.Config.Release.Draft),
2017-03-26 14:46:25 -03:00
}
2017-04-21 19:50:09 -03:00
release, _, err = c.client.Repositories.GetReleaseByTag(
2017-03-26 14:46:25 -03:00
ctx,
ctx.Config.Release.GitHub.Owner,
ctx.Config.Release.GitHub.Name,
ctx.Git.CurrentTag,
)
if err != nil {
2017-04-21 19:50:09 -03:00
release, _, err = c.client.Repositories.CreateRelease(
2017-03-26 14:46:25 -03:00
ctx,
ctx.Config.Release.GitHub.Owner,
ctx.Config.Release.GitHub.Name,
data,
)
2017-04-21 19:50:09 -03:00
} else {
release, _, err = c.client.Repositories.EditRelease(
ctx,
ctx.Config.Release.GitHub.Owner,
ctx.Config.Release.GitHub.Name,
release.GetID(),
data,
)
2017-03-26 14:46:25 -03:00
}
2017-04-21 19:50:09 -03:00
log.Printf("Release updated: %v\n", release.GetHTMLURL())
return release.GetID(), err
2017-03-26 14:46:25 -03:00
}
func (c *githubClient) Upload(
ctx *context.Context,
releaseID int,
name string,
file *os.File,
) (err error) {
_, _, err = c.client.Repositories.UploadReleaseAsset(
ctx,
ctx.Config.Release.GitHub.Owner,
ctx.Config.Release.GitHub.Name,
releaseID,
&github.UploadOptions{
Name: name,
},
file,
)
2017-04-14 13:31:38 -03:00
return
2017-01-14 14:50:46 -02:00
}