Skip to content

Commit

Permalink
Merge pull request #1327 from wesbland/delete_release
Browse files Browse the repository at this point in the history
Add ability to delete releases
  • Loading branch information
mislav committed Jun 26, 2017
2 parents 6ed9277 + 4f419aa commit 9a0c525
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
39 changes: 39 additions & 0 deletions commands/release.go
Expand Up @@ -21,6 +21,7 @@ release [--include-drafts] [--exclude-prereleases]
release show <TAG>
release create [-dpoc] [-a <FILE>] [-m <MESSAGE>|-F <FILE>] [-t <TARGET>] <TAG>
release edit [<options>] <TAG>
release delete <TAG>
`,
Long: `Manage GitHub releases.
Expand Down Expand Up @@ -51,6 +52,9 @@ With '--exclude-prereleases', exclude non-stable releases from the listing.
* _download_:
Download the assets attached to release for the specified <TAG>.
* _delete_:
Delete the release and associated assets for the specified <TAG>.
## Options:
-d, --draft
Create a draft release.
Expand Down Expand Up @@ -112,6 +116,11 @@ hub(1), git-tag(1)
Run: downloadRelease,
}

cmdDeleteRelase = &Command{
Key: "delete",
Run: deleteRelease,
}

flagReleaseIncludeDrafts,
flagReleaseExcludePrereleases,
flagReleaseShowDownloads,
Expand Down Expand Up @@ -156,6 +165,7 @@ func init() {
cmdRelease.Use(cmdCreateRelease)
cmdRelease.Use(cmdEditRelease)
cmdRelease.Use(cmdDownloadRelease)
cmdRelease.Use(cmdDeleteRelase)
CmdRunner.Use(cmdRelease)
}

Expand Down Expand Up @@ -428,6 +438,35 @@ func editRelease(cmd *Command, args *Args) {
args.NoForward()
}

func deleteRelease(cmd *Command, args *Args) {
tagName := cmd.Arg(0)
if tagName == "" {
utils.Check(fmt.Errorf("Missing argument TAG"))
return
}

localRepo, err := github.LocalRepo()
utils.Check(err)

project, err := localRepo.CurrentProject()
utils.Check(err)

gh := github.NewClient(project.Host)

release, err := gh.FetchRelease(project, tagName)
utils.Check(err)

if args.Noop {
message := fmt.Sprintf("Deleting release related to %s...", tagName)
ui.Println(message)
} else {
err = gh.DeleteRelease(release)
utils.Check(err)
}

args.NoForward()
}

func uploadAssets(gh *github.Client, release *github.Release, assets []string, args *Args) {
for _, asset := range assets {
var label string
Expand Down
18 changes: 18 additions & 0 deletions features/release.feature
Expand Up @@ -396,6 +396,24 @@ MARKDOWN
ASSET_TARBALL
"""

Scenario: Delete a release
Given the GitHub API server:
"""
get('/repos/mislav/will_paginate/releases') {
json [
{ url: 'https://api.github.com/repos/mislav/will_paginate/releases/123',
tag_name: 'v1.2.0',
},
]
}
delete('/repos/mislav/will_paginate/releases/123') {
status 204
}
"""
When I successfully run `hub release delete v1.2.0`
Then there should be no output

Scenario: Enterprise list releases
Given the "origin" remote has url "git@git.my.org:mislav/will_paginate.git"
And I am "mislav" on git.my.org with OAuth token "FITOKEN"
Expand Down
14 changes: 14 additions & 0 deletions github/client.go
Expand Up @@ -342,6 +342,20 @@ func (client *Client) EditRelease(release *Release, releaseParams map[string]int
return
}

func (client *Client) DeleteRelease(release *Release) (err error) {
api, err := client.simpleApi()
if err != nil {
return
}

res, err := api.Delete(release.ApiUrl)
if err = checkStatus(204, "deleting release", res, err); err != nil {
return
}

return
}

func (client *Client) UploadReleaseAsset(release *Release, filename, label string) (asset *ReleaseAsset, err error) {
api, err := client.simpleApi()
if err != nil {
Expand Down

0 comments on commit 9a0c525

Please sign in to comment.