You've already forked goreleaser
mirror of
https://github.com/goreleaser/goreleaser.git
synced 2025-07-05 00:59:04 +02:00
moving tar and zip to internal folder
This commit is contained in:
122
internal/client/github.go
Normal file
122
internal/client/github.go
Normal file
@ -0,0 +1,122 @@
|
||||
package client
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
"github.com/google/go-github/github"
|
||||
"github.com/goreleaser/goreleaser/context"
|
||||
"golang.org/x/oauth2"
|
||||
)
|
||||
|
||||
type githubClient struct {
|
||||
client *github.Client
|
||||
}
|
||||
|
||||
// NewGitHub returns a github client implementation
|
||||
func NewGitHub(ctx *context.Context) Client {
|
||||
ts := oauth2.StaticTokenSource(
|
||||
&oauth2.Token{AccessToken: ctx.Token},
|
||||
)
|
||||
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
|
||||
}
|
||||
|
||||
func (c *githubClient) CreateRelease(ctx *context.Context, body string) (releaseID int, err error) {
|
||||
var release *github.RepositoryRelease
|
||||
var data = &github.RepositoryRelease{
|
||||
Name: github.String(ctx.Git.CurrentTag),
|
||||
TagName: github.String(ctx.Git.CurrentTag),
|
||||
Body: github.String(body),
|
||||
Draft: github.Bool(ctx.Config.Release.Draft),
|
||||
}
|
||||
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,
|
||||
ctx.Config.Release.GitHub.Owner,
|
||||
ctx.Config.Release.GitHub.Name,
|
||||
data,
|
||||
)
|
||||
} else {
|
||||
release, _, err = c.client.Repositories.EditRelease(
|
||||
ctx,
|
||||
ctx.Config.Release.GitHub.Owner,
|
||||
ctx.Config.Release.GitHub.Name,
|
||||
release.GetID(),
|
||||
data,
|
||||
)
|
||||
}
|
||||
log.Printf("Release updated: %v\n", release.GetHTMLURL())
|
||||
return release.GetID(), err
|
||||
}
|
||||
|
||||
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,
|
||||
)
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user