Browse Source

feat(upgrader): Improve release channel selection logic #872

Modify GetRelease to compare stable and prerelease versions, returning the most recent release based on publish date
Jacky 4 months ago
parent
commit
da1ed85cef
1 changed files with 18 additions and 3 deletions
  1. 18 3
      internal/upgrader/release.go

+ 18 - 3
internal/upgrader/release.go

@@ -2,10 +2,11 @@ package upgrader
 
 import (
 	"encoding/json"
-	"github.com/pkg/errors"
 	"io"
 	"net/http"
 	"time"
+
+	"github.com/pkg/errors"
 )
 
 const (
@@ -98,12 +99,26 @@ func getLatestPrerelease() (data TRelease, err error) {
 }
 
 func GetRelease(channel string) (data TRelease, err error) {
+	stableRelease, err := getLatestRelease()
+	if err != nil {
+		return TRelease{}, err
+	}
+
 	switch channel {
 	default:
 		fallthrough
 	case "stable":
-		return getLatestRelease()
+		return stableRelease, nil
 	case "prerelease":
-		return getLatestPrerelease()
+		preRelease, err := getLatestPrerelease()
+		if err != nil {
+			return TRelease{}, err
+		}
+		// if preRelease is newer than stableRelease, return preRelease
+		// otherwise return stableRelease
+		if preRelease.PublishedAt.After(stableRelease.PublishedAt) {
+			return preRelease, nil
+		}
+		return stableRelease, nil
 	}
 }