Skip to content

Commit

Permalink
Merge pull request #15 from kubesphere-sigs/reuse-release-draft
Browse files Browse the repository at this point in the history
Support to reuse release draft acorrding to the same tag name
  • Loading branch information
LinuxSuRen authored Nov 4, 2021
2 parents 6eba328 + 6575259 commit 2cd766b
Showing 1 changed file with 40 additions and 7 deletions.
47 changes: 40 additions & 7 deletions controllers/internal_scm/github.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,50 @@ func NewGitHub(repo, token string) *GitHub {
}

func (r *GitHub) Release(version string, draft, prerelease bool) (err error) {
client := github.NewDefault()
client := r.getClient()

releaseInput := &scm.ReleaseInput{
Title: version,
Tag: version,
Draft: draft,
Prerelease: prerelease,
}

// just publish the draft release if it is existing
release := r.findDraftRelease(version)
if release != nil {
releaseInput.Description = release.Description
releaseInput.Title = release.Title
_, _, err = client.Releases.Update(context.TODO(), r.repo, release.ID, releaseInput)
} else {
_, _, err = client.Releases.Create(context.TODO(), r.repo, releaseInput)
}
return
}

func (r *GitHub) getClient() (client *scm.Client) {
client = github.NewDefault()
client.Client = &http.Client{
Transport: &transport.BearerToken{
Token: r.token,
},
}
_, _, err = client.Releases.Create(context.TODO(), r.repo, &scm.ReleaseInput{
Title: version,
Tag: version,
Draft: draft,
Prerelease: prerelease,
})
return
}

func (r *GitHub) findDraftRelease(version string) *scm.Release {
client := r.getClient()

if releaseList, _, err := client.Releases.List(context.TODO(), r.repo, scm.ReleaseListOptions{
Page: 1,
Size: 50,
}); err == nil {
for i, _ := range releaseList {
release := releaseList[i]
if release.Draft && release.Tag == version {
return release
}
}
}
return nil
}

0 comments on commit 2cd766b

Please sign in to comment.