Skip to content

Commit

Permalink
Set GitHub release as 'latest' if target release is newest
Browse files Browse the repository at this point in the history
Signed-off-by: Marvin Beckers <mail@embik.me>
  • Loading branch information
embik committed Apr 6, 2024
1 parent 367414c commit c81d2bd
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 7 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ require (
google.golang.org/api v0.152.0
gopkg.in/yaml.v2 v2.4.0
k8s.io/apimachinery v0.29.3
k8s.io/utils v0.0.0-20240102154912-e7106e64919e
sigs.k8s.io/bom v0.6.0
sigs.k8s.io/mdtoc v1.3.0
sigs.k8s.io/promo-tools/v3 v3.6.0
Expand Down Expand Up @@ -294,7 +295,6 @@ require (
k8s.io/client-go v0.28.4 // indirect
k8s.io/klog/v2 v2.110.1 // indirect
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect
modernc.org/libc v1.37.6 // indirect
modernc.org/mathutil v1.6.0 // indirect
modernc.org/memory v1.7.2 // indirect
Expand Down
42 changes: 36 additions & 6 deletions pkg/announce/github_page.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (

"github.com/sirupsen/logrus"

"k8s.io/utils/ptr"
"sigs.k8s.io/bom/pkg/serialize"
"sigs.k8s.io/bom/pkg/spdx"
"sigs.k8s.io/release-sdk/git"
Expand Down Expand Up @@ -291,19 +292,37 @@ func UpdateGitHubPage(opts *GitHubPageOptions) (err error) {
return errors.New("tag not found while trying to publish release page")
}

// Get the release we are looking for
releases, err := gh.Releases(opts.Owner, opts.Repo, true)
// Get the release we are looking for. We only need to fetch prereleases
// if the release is a prerelease.
releases, err := gh.Releases(opts.Owner, opts.Repo, isPrerelease)
if err != nil {
return fmt.Errorf("listing the repositories releases: %w", err)
}

// Does the release exist yet?
// Does the release exist yet and should it be marked as latest?
var releaseID int64
commitish := ""
// No pre-release should ever be marked as "latest"
markAsLatest := !isPrerelease

for _, release := range releases {
if release.GetTagName() == opts.Tag {
releaseID = release.GetID()
commitish = release.GetTargetCommitish()
} else if markAsLatest {
// If this release is not identical to the one being cut right now,
// we will check if *our* release is lower than the release from the loop.
// If the first page of releases does not include a release that is
// greater than *our* release, we can assume that ours will be the
// latest release right now.
releaseSemver, err := util.TagStringToSemver(release.GetTagName())
if err != nil {
return fmt.Errorf("parsing existing release tags as semver: %w", err)
}

if semver.LE(releaseSemver) {
markAsLatest = false
}
}
}

Expand All @@ -319,11 +338,22 @@ func UpdateGitHubPage(opts *GitHubPageOptions) (err error) {
// Post release data
logrus.Infof("%s the %s release on github...", releaseVerb, opts.Tag)

ghOpts := &github.UpdateReleasePageOptions{
Name: &opts.Name,
Body: ptr.To(output.String()),
Draft: &opts.Draft,
Prerelease: &isPrerelease,
}

if markAsLatest {
ghOpts.Latest = ptr.To(true)
}

// Call GitHub to set the release page
release, err := gh.UpdateReleasePage(
release, err := gh.UpdateReleasePageWithOptions(
opts.Owner, opts.Repo, releaseID,
opts.Tag, commitish, opts.Name, output.String(),
opts.Draft, isPrerelease,
opts.Tag, commitish,
ghOpts,
)
if err != nil {
return fmt.Errorf("updating the release on GitHub: %w", err)
Expand Down

0 comments on commit c81d2bd

Please sign in to comment.