提交 f14a0088 编写于 作者: J Jingwen Owen Ou

Check existence of release before creating it

上级 c5ed2474
......@@ -84,36 +84,41 @@ func createRelease(cmd *Command, args *Args) {
tag := args.LastParam()
runInLocalRepo(func(localRepo *github.GitHubRepo, project *github.Project, client *github.Client) {
currentBranch, err := localRepo.CurrentBranch()
release, err := client.Release(project, tag)
utils.Check(err)
branchName := currentBranch.ShortName()
title, body, err := getTitleAndBodyFromFlags(flagReleaseMessage, flagReleaseFile)
utils.Check(err)
var editor *github.Editor
if title == "" {
message := releaseMessage(tag, project.Name, branchName)
editor, err = github.NewEditor("RELEASE", "release", message)
if release == nil {
currentBranch, err := localRepo.CurrentBranch()
utils.Check(err)
branchName := currentBranch.ShortName()
title, body, err = editor.EditTitleAndBody()
title, body, err := getTitleAndBodyFromFlags(flagReleaseMessage, flagReleaseFile)
utils.Check(err)
}
params := octokit.ReleaseParams{
TagName: tag,
TargetCommitish: branchName,
Name: title,
Body: body,
Draft: flagReleaseDraft,
Prerelease: flagReleasePrerelease,
}
release, err := client.CreateRelease(project, params)
utils.Check(err)
var editor *github.Editor
if title == "" {
message := releaseMessage(tag, project.Name, branchName)
editor, err = github.NewEditor("RELEASE", "release", message)
utils.Check(err)
if editor != nil {
defer editor.DeleteFile()
title, body, err = editor.EditTitleAndBody()
utils.Check(err)
}
params := octokit.ReleaseParams{
TagName: tag,
TargetCommitish: branchName,
Name: title,
Body: body,
Draft: flagReleaseDraft,
Prerelease: flagReleasePrerelease,
}
release, err = client.CreateRelease(project, params)
utils.Check(err)
if editor != nil {
defer editor.DeleteFile()
}
}
if flagReleaseAssets != "" {
......
......@@ -266,6 +266,33 @@ func (client *Client) Releases(project *Project) (releases []octokit.Release, er
return
}
func (client *Client) Release(project *Project, tagName string) (release *octokit.Release, err error) {
url, err := octokit.ReleasesURL.Expand(octokit.M{"owner": project.Owner, "repo": project.Name})
if err != nil {
return
}
api, err := client.api()
if err != nil {
err = FormatError("getting release", err)
return
}
releases, result := api.Releases(client.requestURL(url)).All()
if result.HasError() {
err = FormatError("creating release", result.Err)
return
}
for _, release := range releases {
if release.TagName == tagName {
return &release, nil
}
}
return
}
func (client *Client) CreateRelease(project *Project, params octokit.ReleaseParams) (release *octokit.Release, err error) {
url, err := octokit.ReleasesURL.Expand(octokit.M{"owner": project.Owner, "repo": project.Name})
if err != nil {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册