clear out any existing release assets
[#76848252] Signed-off-by: Chris Brown <cbrown@pivotal.io>
This commit is contained in:
@@ -54,6 +54,14 @@ type FakeGitHub struct {
|
|||||||
uploadReleaseAssetReturns struct {
|
uploadReleaseAssetReturns struct {
|
||||||
result1 error
|
result1 error
|
||||||
}
|
}
|
||||||
|
DeleteReleaseAssetStub func(asset github.ReleaseAsset) error
|
||||||
|
deleteReleaseAssetMutex sync.RWMutex
|
||||||
|
deleteReleaseAssetArgsForCall []struct {
|
||||||
|
asset github.ReleaseAsset
|
||||||
|
}
|
||||||
|
deleteReleaseAssetReturns struct {
|
||||||
|
result1 error
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fake *FakeGitHub) ListReleases() ([]github.RepositoryRelease, error) {
|
func (fake *FakeGitHub) ListReleases() ([]github.RepositoryRelease, error) {
|
||||||
@@ -214,4 +222,36 @@ func (fake *FakeGitHub) UploadReleaseAssetReturns(result1 error) {
|
|||||||
}{result1}
|
}{result1}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (fake *FakeGitHub) DeleteReleaseAsset(asset github.ReleaseAsset) error {
|
||||||
|
fake.deleteReleaseAssetMutex.Lock()
|
||||||
|
fake.deleteReleaseAssetArgsForCall = append(fake.deleteReleaseAssetArgsForCall, struct {
|
||||||
|
asset github.ReleaseAsset
|
||||||
|
}{asset})
|
||||||
|
fake.deleteReleaseAssetMutex.Unlock()
|
||||||
|
if fake.DeleteReleaseAssetStub != nil {
|
||||||
|
return fake.DeleteReleaseAssetStub(asset)
|
||||||
|
} else {
|
||||||
|
return fake.deleteReleaseAssetReturns.result1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeGitHub) DeleteReleaseAssetCallCount() int {
|
||||||
|
fake.deleteReleaseAssetMutex.RLock()
|
||||||
|
defer fake.deleteReleaseAssetMutex.RUnlock()
|
||||||
|
return len(fake.deleteReleaseAssetArgsForCall)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeGitHub) DeleteReleaseAssetArgsForCall(i int) github.ReleaseAsset {
|
||||||
|
fake.deleteReleaseAssetMutex.RLock()
|
||||||
|
defer fake.deleteReleaseAssetMutex.RUnlock()
|
||||||
|
return fake.deleteReleaseAssetArgsForCall[i].asset
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fake *FakeGitHub) DeleteReleaseAssetReturns(result1 error) {
|
||||||
|
fake.DeleteReleaseAssetStub = nil
|
||||||
|
fake.deleteReleaseAssetReturns = struct {
|
||||||
|
result1 error
|
||||||
|
}{result1}
|
||||||
|
}
|
||||||
|
|
||||||
var _ resource.GitHub = new(FakeGitHub)
|
var _ resource.GitHub = new(FakeGitHub)
|
||||||
|
45
github.go
45
github.go
@@ -18,6 +18,7 @@ type GitHub interface {
|
|||||||
|
|
||||||
ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error)
|
ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error)
|
||||||
UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error
|
UploadReleaseAsset(release *github.RepositoryRelease, name string, file *os.File) error
|
||||||
|
DeleteReleaseAsset(asset github.ReleaseAsset) error
|
||||||
}
|
}
|
||||||
|
|
||||||
type GitHubClient struct {
|
type GitHubClient struct {
|
||||||
@@ -44,20 +45,30 @@ func NewGitHubClient(source Source) *GitHubClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) ListReleases() ([]github.RepositoryRelease, error) {
|
func (g *GitHubClient) ListReleases() ([]github.RepositoryRelease, error) {
|
||||||
releases, _, err := g.client.Repositories.ListReleases(g.user, g.repository, nil)
|
releases, res, err := g.client.Repositories.ListReleases(g.user, g.repository, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []github.RepositoryRelease{}, err
|
return []github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = res.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return releases, nil
|
return releases, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) {
|
func (g *GitHubClient) CreateRelease(release *github.RepositoryRelease) (*github.RepositoryRelease, error) {
|
||||||
createdRelease, _, err := g.client.Repositories.CreateRelease(g.user, g.repository, release)
|
createdRelease, res, err := g.client.Repositories.CreateRelease(g.user, g.repository, release)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &github.RepositoryRelease{}, err
|
return &github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = res.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return createdRelease, nil
|
return createdRelease, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,25 +77,35 @@ 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, _, err := g.client.Repositories.EditRelease(g.user, g.repository, *release.ID, release)
|
updatedRelease, res, err := g.client.Repositories.EditRelease(g.user, g.repository, *release.ID, release)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &github.RepositoryRelease{}, err
|
return &github.RepositoryRelease{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = res.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return updatedRelease, nil
|
return updatedRelease, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GitHubClient) ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error) {
|
func (g *GitHubClient) ListReleaseAssets(release *github.RepositoryRelease) ([]github.ReleaseAsset, error) {
|
||||||
assets, _, err := g.client.Repositories.ListReleaseAssets(g.user, g.repository, *release.ID, nil)
|
assets, res, err := g.client.Repositories.ListReleaseAssets(g.user, g.repository, *release.ID, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []github.ReleaseAsset{}, nil
|
return []github.ReleaseAsset{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = res.Body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return assets, nil
|
return assets, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
||||||
_, _, err := g.client.Repositories.UploadReleaseAsset(
|
_, res, err := g.client.Repositories.UploadReleaseAsset(
|
||||||
g.user,
|
g.user,
|
||||||
g.repository,
|
g.repository,
|
||||||
*release.ID,
|
*release.ID,
|
||||||
@@ -93,6 +114,18 @@ func (g *GitHubClient) UploadReleaseAsset(release *github.RepositoryRelease, nam
|
|||||||
},
|
},
|
||||||
file,
|
file,
|
||||||
)
|
)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return res.Body.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GitHubClient) DeleteReleaseAsset(asset github.ReleaseAsset) error {
|
||||||
|
res, err := g.client.Repositories.DeleteReleaseAsset(g.user, g.repository, *asset.ID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.Body.Close()
|
||||||
|
}
|
||||||
|
@@ -63,6 +63,13 @@ func (c *OutCommand) Run(sourceDir string, request OutRequest) (OutResponse, err
|
|||||||
existingRelease.Name = github.String(name)
|
existingRelease.Name = github.String(name)
|
||||||
existingRelease.Body = github.String(body)
|
existingRelease.Body = github.String(body)
|
||||||
|
|
||||||
|
for _, asset := range existingRelease.Assets {
|
||||||
|
err := c.github.DeleteReleaseAsset(asset)
|
||||||
|
if err != nil {
|
||||||
|
return OutResponse{}, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
release, err = c.github.UpdateRelease(existingRelease)
|
release, err = c.github.UpdateRelease(existingRelease)
|
||||||
} else {
|
} else {
|
||||||
release, err = c.github.CreateRelease(release)
|
release, err = c.github.CreateRelease(release)
|
||||||
|
@@ -63,9 +63,18 @@ var _ = Describe("Out Command", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
Context("when the release has already been created", func() {
|
Context("when the release has already been created", func() {
|
||||||
|
existingAssets := []github.ReleaseAsset{
|
||||||
|
{ID: github.Int(456789)},
|
||||||
|
{ID: github.Int(3450798)},
|
||||||
|
}
|
||||||
|
|
||||||
BeforeEach(func() {
|
BeforeEach(func() {
|
||||||
githubClient.ListReleasesReturns([]github.RepositoryRelease{
|
githubClient.ListReleasesReturns([]github.RepositoryRelease{
|
||||||
{ID: github.Int(112), TagName: github.String("some-tag-name")},
|
{
|
||||||
|
ID: github.Int(112),
|
||||||
|
TagName: github.String("some-tag-name"),
|
||||||
|
Assets: existingAssets,
|
||||||
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
|
||||||
namePath := filepath.Join(sourcesDir, "name")
|
namePath := filepath.Join(sourcesDir, "name")
|
||||||
@@ -92,6 +101,13 @@ var _ = Describe("Out Command", func() {
|
|||||||
Ω(*updatedRelease.Name).Should(Equal("v0.3.12"))
|
Ω(*updatedRelease.Name).Should(Equal("v0.3.12"))
|
||||||
Ω(*updatedRelease.Body).Should(Equal("this is a great release"))
|
Ω(*updatedRelease.Body).Should(Equal("this is a great release"))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("deletes the existing assets", func() {
|
||||||
|
Ω(githubClient.DeleteReleaseAssetCallCount()).Should(Equal(2))
|
||||||
|
|
||||||
|
Ω(githubClient.DeleteReleaseAssetArgsForCall(0)).Should(Equal(existingAssets[0]))
|
||||||
|
Ω(githubClient.DeleteReleaseAssetArgsForCall(1)).Should(Equal(existingAssets[1]))
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
Context("when the release has not already been created", func() {
|
Context("when the release has not already been created", func() {
|
||||||
|
Reference in New Issue
Block a user