Files
gitea-release-resource/github.go
Chris Brown efbfb91683 implement /in
fetches a given list of globs from the assets.

also be durable to 'v' prefixing version tags

Signed-off-by: Alex Suraci <asuraci@pivotal.io>
2015-02-17 18:03:42 -08:00

84 lines
2.0 KiB
Go

package resource
import (
"os"
"code.google.com/p/goauth2/oauth"
"github.com/google/go-github/github"
)
//go:generate counterfeiter . GitHub
type GitHub interface {
ListReleases() ([]github.RepositoryRelease, error)
CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error)
ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error)
UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error
}
type GitHubClient struct {
client *github.Client
user string
repository string
}
func NewGitHubClient(source Source) *GitHubClient {
transport := &oauth.Transport{
Token: &oauth.Token{
AccessToken: source.AccessToken,
},
}
client := github.NewClient(transport.Client())
return &GitHubClient{
client: client,
user: source.User,
repository: source.Repository,
}
}
func (g *GitHubClient) ListReleases() ([]github.RepositoryRelease, error) {
releases, _, err := g.client.Repositories.ListReleases(g.user, g.repository, nil)
if err != nil {
return []github.RepositoryRelease{}, err
}
return releases, nil
}
func (g *GitHubClient) CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) {
createdRelease, _, err := g.client.Repositories.CreateRelease(g.user, g.repository, release)
if err != nil {
return &github.RepositoryRelease{}, err
}
return createdRelease, nil
}
func (g *GitHubClient) ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error) {
assets, _, err := g.client.Repositories.ListReleaseAssets(g.user, g.repository, *release.ID, nil)
if err != nil {
return []github.ReleaseAsset{}, nil
}
return assets, nil
}
func (g *GitHubClient) UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error {
_, _, err := g.client.Repositories.UploadReleaseAsset(
g.user,
g.repository,
*release.ID,
&github.UploadOptions{
Name: name,
},
file,
)
return err
}