mirror of
https://github.com/beclab/Olares
synced 2026-05-23 16:58:26 +00:00
feat(cli): adjust release line constraint and output order of upgrade path command (#1561)
* fix(cli): consider alpha & beta as release version on main line * fix(cli): dont allow upgrade commands with incompatible base & cli release line * feat(cli): support order sort option for upgrade path command
This commit is contained in:
parent
a71b536a80
commit
9d097f77b1
2 changed files with 21 additions and 3 deletions
|
|
@ -12,6 +12,7 @@ import (
|
|||
"github.com/spf13/cobra"
|
||||
"log"
|
||||
"os"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type UpgradeOsOptions struct {
|
||||
|
|
@ -43,6 +44,7 @@ func NewCmdUpgradeOs() *cobra.Command {
|
|||
|
||||
func NewCmdGetUpgradePath() *cobra.Command {
|
||||
var baseVersionStr string
|
||||
var latestFirst bool
|
||||
cmd := &cobra.Command{
|
||||
Use: "path",
|
||||
Short: "Get the upgrade path (required intermediate versions) from base version to the latest upgradable version (as known to this release of olares-cli)",
|
||||
|
|
@ -65,6 +67,11 @@ func NewCmdGetUpgradePath() *cobra.Command {
|
|||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if latestFirst {
|
||||
slices.Reverse(path)
|
||||
}
|
||||
|
||||
encoder := json.NewEncoder(cmd.OutOrStdout())
|
||||
encoder.SetIndent("", " ")
|
||||
return encoder.Encode(path)
|
||||
|
|
@ -72,6 +79,7 @@ func NewCmdGetUpgradePath() *cobra.Command {
|
|||
}
|
||||
|
||||
cmd.Flags().StringVarP(&baseVersionStr, "base-version", "b", baseVersionStr, "base version to be upgraded, defaults to the current Olares version if inside Olares cluster")
|
||||
cmd.Flags().BoolVar(&latestFirst, "latest-first", true, "sort versions to put recent ones in the front")
|
||||
|
||||
return cmd
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,9 +22,15 @@ var (
|
|||
|
||||
func getReleaseLineOfVersion(v *semver.Version) releaseLine {
|
||||
preRelease := v.Prerelease()
|
||||
if preRelease == "" || strings.HasPrefix(preRelease, "rc") {
|
||||
mainLinePrereleasePrefixes := []string{"alpha", "beta", "rc"}
|
||||
if preRelease == "" {
|
||||
return mainLine
|
||||
}
|
||||
for _, prefix := range mainLinePrereleasePrefixes {
|
||||
if strings.HasPrefix(preRelease, prefix) {
|
||||
return mainLine
|
||||
}
|
||||
}
|
||||
return dailyLine
|
||||
}
|
||||
|
||||
|
|
@ -32,11 +38,16 @@ func check(base *semver.Version, target *semver.Version) error {
|
|||
if base == nil {
|
||||
return fmt.Errorf("base version is nil")
|
||||
}
|
||||
baseReleaseLine := getReleaseLineOfVersion(base)
|
||||
|
||||
cliVersion, err := utils.ParseOlaresVersionString(version.VERSION)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid olares-cli version :\"%s\"", version.VERSION)
|
||||
}
|
||||
cliReleaseLine := getReleaseLineOfVersion(cliVersion)
|
||||
if baseReleaseLine != cliReleaseLine {
|
||||
return fmt.Errorf("incompatible base release line: %s and olares-cli release line: %s", baseReleaseLine, cliReleaseLine)
|
||||
}
|
||||
|
||||
if target != nil {
|
||||
if !target.GreaterThan(base) {
|
||||
|
|
@ -44,11 +55,10 @@ func check(base *semver.Version, target *semver.Version) error {
|
|||
}
|
||||
|
||||
targetReleaseLine := getReleaseLineOfVersion(target)
|
||||
baseReleaseLine := getReleaseLineOfVersion(base)
|
||||
if targetReleaseLine != baseReleaseLine {
|
||||
return fmt.Errorf("unable to upgrade to %s on %s release line from %s on %s release line", target, targetReleaseLine, base, baseReleaseLine)
|
||||
}
|
||||
switch baseReleaseLine {
|
||||
switch targetReleaseLine {
|
||||
case mainLine:
|
||||
if !sameMajorLevelVersion(base, target) {
|
||||
return fmt.Errorf("upgrade on %s rlease line can only be performed across same major level version", baseReleaseLine)
|
||||
|
|
|
|||
Loading…
Reference in a new issue