Source configuration uses owner instead of user
"Owner" is the name GitHub uses in its API to reference the owner of a repository. "User" is not correct when the owner is an organization. This removes some confusion I've encountered over how to configure the resource while maintaining backwards compatibility.
This commit is contained in:
@@ -7,8 +7,8 @@ Fetches and creates versioned GitHub resources.
|
|||||||
|
|
||||||
## Source Configuration
|
## Source Configuration
|
||||||
|
|
||||||
* `user`: *Required.* The GitHub username or organization name for the
|
* `owner`: *Required.* The GitHub user or organization name for the repository
|
||||||
repository that the releases are in.
|
that the releases are in.
|
||||||
|
|
||||||
* `repository`: *Required.* The repository name that contains the releases.
|
* `repository`: *Required.* The repository name that contains the releases.
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ Fetches and creates versioned GitHub resources.
|
|||||||
- name: gh-release
|
- name: gh-release
|
||||||
type: github-release
|
type: github-release
|
||||||
source:
|
source:
|
||||||
user: concourse
|
owner: concourse
|
||||||
repository: concourse
|
repository: concourse
|
||||||
access_token: abcdef1234567890
|
access_token: abcdef1234567890
|
||||||
```
|
```
|
||||||
|
31
github.go
31
github.go
@@ -33,7 +33,7 @@ type GitHub interface {
|
|||||||
type GitHubClient struct {
|
type GitHubClient struct {
|
||||||
client *github.Client
|
client *github.Client
|
||||||
|
|
||||||
user string
|
owner string
|
||||||
repository string
|
repository string
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,15 +71,20 @@ func NewGitHubClient(source Source) (*GitHubClient, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
owner := source.Owner
|
||||||
|
if source.User != "" {
|
||||||
|
owner = source.User
|
||||||
|
}
|
||||||
|
|
||||||
return &GitHubClient{
|
return &GitHubClient{
|
||||||
client: client,
|
client: client,
|
||||||
user: source.User,
|
owner: owner,
|
||||||
repository: source.Repository,
|
repository: source.Repository,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) ListReleases() ([]*github.RepositoryRelease, error) {
|
func (g *GitHubClient) ListReleases() ([]*github.RepositoryRelease, error) {
|
||||||
releases, res, err := g.client.Repositories.ListReleases(g.user, g.repository, nil)
|
releases, res, err := g.client.Repositories.ListReleases(g.owner, g.repository, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []*github.RepositoryRelease{}, err
|
return []*github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
@@ -93,7 +98,7 @@ func (g *GitHubClient) ListReleases() ([]*github.RepositoryRelease, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) GetReleaseByTag(tag string) (*github.RepositoryRelease, error) {
|
func (g *GitHubClient) GetReleaseByTag(tag string) (*github.RepositoryRelease, error) {
|
||||||
release, res, err := g.client.Repositories.GetReleaseByTag(g.user, g.repository, tag)
|
release, res, err := g.client.Repositories.GetReleaseByTag(g.owner, g.repository, tag)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &github.RepositoryRelease{}, err
|
return &github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
@@ -107,7 +112,7 @@ func (g *GitHubClient) GetReleaseByTag(tag string) (*github.RepositoryRelease, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) GetRelease(id int) (*github.RepositoryRelease, error) {
|
func (g *GitHubClient) GetRelease(id int) (*github.RepositoryRelease, error) {
|
||||||
release, res, err := g.client.Repositories.GetRelease(g.user, g.repository, id)
|
release, res, err := g.client.Repositories.GetRelease(g.owner, g.repository, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &github.RepositoryRelease{}, err
|
return &github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
@@ -121,7 +126,7 @@ func (g *GitHubClient) GetRelease(id int) (*github.RepositoryRelease, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) CreateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error) {
|
func (g *GitHubClient) CreateRelease(release github.RepositoryRelease) (*github.RepositoryRelease, error) {
|
||||||
createdRelease, res, err := g.client.Repositories.CreateRelease(g.user, g.repository, &release)
|
createdRelease, res, err := g.client.Repositories.CreateRelease(g.owner, g.repository, &release)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &github.RepositoryRelease{}, err
|
return &github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
@@ -139,7 +144,7 @@ func (g *GitHubClient) UpdateRelease(release github.RepositoryRelease) (*github.
|
|||||||
return nil, errors.New("release did not have an ID: has it been saved yet?")
|
return nil, errors.New("release did not have an ID: has it been saved yet?")
|
||||||
}
|
}
|
||||||
|
|
||||||
updatedRelease, res, err := g.client.Repositories.EditRelease(g.user, g.repository, *release.ID, &release)
|
updatedRelease, res, err := g.client.Repositories.EditRelease(g.owner, g.repository, *release.ID, &release)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &github.RepositoryRelease{}, err
|
return &github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
@@ -153,7 +158,7 @@ func (g *GitHubClient) UpdateRelease(release github.RepositoryRelease) (*github.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]*github.ReleaseAsset, error) {
|
func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]*github.ReleaseAsset, error) {
|
||||||
assets, res, err := g.client.Repositories.ListReleaseAssets(g.user, g.repository, *release.ID, nil)
|
assets, res, err := g.client.Repositories.ListReleaseAssets(g.owner, g.repository, *release.ID, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -168,7 +173,7 @@ func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]*g
|
|||||||
|
|
||||||
func (g *GitHubClient) UploadReleaseAsset(release github.RepositoryRelease, name string, file *os.File) error {
|
func (g *GitHubClient) UploadReleaseAsset(release github.RepositoryRelease, name string, file *os.File) error {
|
||||||
_, res, err := g.client.Repositories.UploadReleaseAsset(
|
_, res, err := g.client.Repositories.UploadReleaseAsset(
|
||||||
g.user,
|
g.owner,
|
||||||
g.repository,
|
g.repository,
|
||||||
*release.ID,
|
*release.ID,
|
||||||
&github.UploadOptions{
|
&github.UploadOptions{
|
||||||
@@ -184,7 +189,7 @@ func (g *GitHubClient) UploadReleaseAsset(release github.RepositoryRelease, name
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) DeleteReleaseAsset(asset github.ReleaseAsset) error {
|
func (g *GitHubClient) DeleteReleaseAsset(asset github.ReleaseAsset) error {
|
||||||
res, err := g.client.Repositories.DeleteReleaseAsset(g.user, g.repository, *asset.ID)
|
res, err := g.client.Repositories.DeleteReleaseAsset(g.owner, g.repository, *asset.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -193,7 +198,7 @@ func (g *GitHubClient) DeleteReleaseAsset(asset github.ReleaseAsset) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) DownloadReleaseAsset(asset github.ReleaseAsset) (io.ReadCloser, error) {
|
func (g *GitHubClient) DownloadReleaseAsset(asset github.ReleaseAsset) (io.ReadCloser, error) {
|
||||||
res, redir, err := g.client.Repositories.DownloadReleaseAsset(g.user, g.repository, *asset.ID)
|
res, redir, err := g.client.Repositories.DownloadReleaseAsset(g.owner, g.repository, *asset.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -212,7 +217,7 @@ func (g *GitHubClient) DownloadReleaseAsset(asset github.ReleaseAsset) (io.ReadC
|
|||||||
|
|
||||||
func (g *GitHubClient) GetTarballLink(tag string) (*url.URL, error) {
|
func (g *GitHubClient) GetTarballLink(tag string) (*url.URL, error) {
|
||||||
opt := &github.RepositoryContentGetOptions{Ref: tag}
|
opt := &github.RepositoryContentGetOptions{Ref: tag}
|
||||||
u, res, err := g.client.Repositories.GetArchiveLink(g.user, g.repository, github.Tarball, opt)
|
u, res, err := g.client.Repositories.GetArchiveLink(g.owner, g.repository, github.Tarball, opt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -222,7 +227,7 @@ func (g *GitHubClient) GetTarballLink(tag string) (*url.URL, error) {
|
|||||||
|
|
||||||
func (g *GitHubClient) GetZipballLink(tag string) (*url.URL, error) {
|
func (g *GitHubClient) GetZipballLink(tag string) (*url.URL, error) {
|
||||||
opt := &github.RepositoryContentGetOptions{Ref: tag}
|
opt := &github.RepositoryContentGetOptions{Ref: tag}
|
||||||
u, res, err := g.client.Repositories.GetArchiveLink(g.user, g.repository, github.Zipball, opt)
|
u, res, err := g.client.Repositories.GetArchiveLink(g.owner, g.repository, github.Zipball, opt)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,7 @@ var _ = Describe("GitHub Client", func() {
|
|||||||
Context("with an OAuth Token", func() {
|
Context("with an OAuth Token", func() {
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
source = Source{
|
source = Source{
|
||||||
User: "concourse",
|
Owner: "concourse",
|
||||||
Repository: "concourse",
|
Repository: "concourse",
|
||||||
AccessToken: "abc123",
|
AccessToken: "abc123",
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ var _ = Describe("GitHub Client", func() {
|
|||||||
Context("without an OAuth Token", func() {
|
Context("without an OAuth Token", func() {
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
source = Source{
|
source = Source{
|
||||||
User: "concourse",
|
Owner: "concourse",
|
||||||
Repository: "concourse",
|
Repository: "concourse",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -97,10 +97,31 @@ var _ = Describe("GitHub Client", func() {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
Describe("when the source is configured with the deprecated user field", func() {
|
||||||
|
BeforeEach(func() {
|
||||||
|
source = Source{
|
||||||
|
User: "some-owner",
|
||||||
|
Repository: "some-repo",
|
||||||
|
}
|
||||||
|
|
||||||
|
server.AppendHandlers(
|
||||||
|
ghttp.CombineHandlers(
|
||||||
|
ghttp.VerifyRequest("GET", "/repos/some-owner/some-repo/releases"),
|
||||||
|
ghttp.RespondWith(200, "[]"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
It("uses the provided user as the owner", func() {
|
||||||
|
_, err := client.ListReleases()
|
||||||
|
Ω(err).ShouldNot(HaveOccurred())
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
Describe("GetRelease", func() {
|
Describe("GetRelease", func() {
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
source = Source{
|
source = Source{
|
||||||
User: "concourse",
|
Owner: "concourse",
|
||||||
Repository: "concourse",
|
Repository: "concourse",
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -136,7 +157,7 @@ var _ = Describe("GitHub Client", func() {
|
|||||||
Describe("GetReleaseByTag", func() {
|
Describe("GetReleaseByTag", func() {
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
source = Source{
|
source = Source{
|
||||||
User: "concourse",
|
Owner: "concourse",
|
||||||
Repository: "concourse",
|
Repository: "concourse",
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@@ -1,9 +1,12 @@
|
|||||||
package resource
|
package resource
|
||||||
|
|
||||||
type Source struct {
|
type Source struct {
|
||||||
User string `json:"user"`
|
Owner string `json:"owner"`
|
||||||
Repository string `json:"repository"`
|
Repository string `json:"repository"`
|
||||||
|
|
||||||
|
// Deprecated; use Owner instead
|
||||||
|
User string `json:"user"`
|
||||||
|
|
||||||
GitHubAPIURL string `json:"github_api_url"`
|
GitHubAPIURL string `json:"github_api_url"`
|
||||||
GitHubUploadsURL string `json:"github_uploads_url"`
|
GitHubUploadsURL string `json:"github_uploads_url"`
|
||||||
AccessToken string `json:"access_token"`
|
AccessToken string `json:"access_token"`
|
||||||
|
Reference in New Issue
Block a user