feat(upgrade): do not upgrade to major versions automatically

resolves #5273
This commit is contained in:
Jan De Dobbeleer 2024-07-22 07:45:18 +02:00 committed by Jan De Dobbeleer
parent cdfd249b28
commit 55bc366a8a
3 changed files with 45 additions and 0 deletions

View file

@ -57,6 +57,13 @@ var upgradeCmd = &cobra.Command{
version := fmt.Sprintf("v%s", build.Version)
if upgrade.IsMajorUpgrade(build.Version, latest) {
message := terminal.StopProgress()
message += fmt.Sprintf("\n🚨 major upgrade available: %s -> %s, use oh-my-posh upgrade --force to upgrade\n\n", version, latest)
fmt.Print(message)
return
}
if version != latest {
executeUpgrade(latest)
return

View file

@ -2,6 +2,7 @@ package upgrade
import (
"fmt"
"strings"
"github.com/charmbracelet/bubbles/spinner"
tea "github.com/charmbracelet/bubbletea"
@ -144,3 +145,15 @@ func Run(latest string) error {
return programModel.error
}
func IsMajorUpgrade(current, latest string) bool {
if len(current) == 0 {
return false
}
getMajorNumber := func(version string) string {
return strings.Split(version, ".")[0]
}
return getMajorNumber(current) != getMajorNumber(latest)
}

25
src/upgrade/cli_test.go Normal file
View file

@ -0,0 +1,25 @@
package upgrade
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestIsMajorUpgrade(t *testing.T) {
cases := []struct {
Case string
Expected bool
CurrentVersion string
LatestVersion string
}{
{Case: "Same version", Expected: false, CurrentVersion: "v3.0.0", LatestVersion: "v3.0.0"},
{Case: "Breaking change", Expected: true, CurrentVersion: "v3.0.0", LatestVersion: "v4.0.0"},
{Case: "Empty version, mostly development build", Expected: false, LatestVersion: "v4.0.0"},
}
for _, tc := range cases {
canUpgrade := IsMajorUpgrade(tc.CurrentVersion, tc.LatestVersion)
assert.Equal(t, tc.Expected, canUpgrade, tc.Case)
}
}