Files
Olares/cli/cmd/ctl/os/upgrade.go
Eliott van Nuffel df38148149
Some checks failed
Native Verification / Build Docs (pull_request) Successful in 1m12s
Native Verification / Build App-Service Native (pull_request) Successful in 1m27s
Native Verification / Build Daemon Native (pull_request) Successful in 42s
Lint and Test Charts / lint-test (pull_request_target) Failing after 19s
Lint and Test Charts / test-version (pull_request_target) Successful in 0s
Lint and Test Charts / push-image (pull_request_target) Failing after 15s
Lint and Test Charts / upload-cli (pull_request_target) Failing after 1m15s
Lint and Test Charts / upload-daemon (pull_request_target) Failing after 1m12s
Lint and Test Charts / push-deps (pull_request_target) Has been skipped
Lint and Test Charts / push-deps-arm64 (pull_request_target) Has been skipped
Lint and Test Charts / push-image-arm64 (pull_request_target) Has been cancelled
Lint and Test Charts / upload-package (pull_request_target) Has been cancelled
Lint and Test Charts / install-test (pull_request_target) Has been cancelled
continue beOS rebrand and add native verification
2026-03-10 13:48:45 +01:00

103 lines
2.7 KiB
Go

package os
import (
"encoding/json"
"fmt"
"log"
"os"
"github.com/Masterminds/semver/v3"
"github.com/beclab/beos/cli/cmd/config"
"github.com/beclab/beos/cli/pkg/phase"
"github.com/beclab/beos/cli/pkg/pipelines"
"github.com/beclab/beos/cli/pkg/upgrade"
"github.com/beclab/beos/cli/version"
"github.com/spf13/cobra"
)
func NewCmdUpgradeOs() *cobra.Command {
cmd := &cobra.Command{
Use: "upgrade",
Short: "Upgrade beOS Pro to a newer version",
Run: func(cmd *cobra.Command, args []string) {
if err := pipelines.UpgradeBeOSPipeline(); err != nil {
log.Fatalf("error: %v", err)
}
},
}
flagSetter := config.NewFlagSetterFor(cmd)
config.AddVersionFlagBy(flagSetter)
config.AddBaseDirFlagBy(flagSetter)
cmd.AddCommand(NewCmdCurrentVersionUpgradeSpec())
cmd.AddCommand(NewCmdUpgradeViable())
cmd.AddCommand(NewCmdUpgradePrecheck())
return cmd
}
func NewCmdCurrentVersionUpgradeSpec() *cobra.Command {
cmd := &cobra.Command{
Use: "spec",
Aliases: []string{"current-spec"},
Short: fmt.Sprintf("Get the upgrade spec of the current beos-cli version (%s)", version.VERSION),
RunE: func(cmd *cobra.Command, args []string) error {
spec, err := upgrade.CurrentVersionSpec()
if err != nil {
return err
}
jsonOutput, _ := json.MarshalIndent(spec, "", " ")
fmt.Println(string(jsonOutput))
return nil
},
}
return cmd
}
func NewCmdUpgradeViable() *cobra.Command {
var baseVersionStr string
cmd := &cobra.Command{
Use: "viable",
Short: fmt.Sprintf("Determine whether upgrade can be directly performed upon the base version (to %s)", version.VERSION),
RunE: func(cmd *cobra.Command, args []string) error {
if baseVersionStr == "" {
var err error
baseVersionStr, err = phase.GetBeOSVersion()
if err != nil {
return err
}
}
baseVersion, err := semver.NewVersion(baseVersionStr)
if err != nil {
return fmt.Errorf("invalid base version '%s': %v", baseVersionStr, err)
}
cliVersion, err := semver.NewVersion(version.VERSION)
if err != nil {
return fmt.Errorf("invalid cli version '%s': %v", version.VERSION, err)
}
err = upgrade.Check(baseVersion, cliVersion)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("upgrade from %s to %s is viable\n", baseVersion, cliVersion)
return nil
},
}
cmd.Flags().StringVarP(&baseVersionStr, "base", "b", "", "base version, defaults to the current beOS Pro system's version")
return cmd
}
func NewCmdUpgradePrecheck() *cobra.Command {
cmd := &cobra.Command{
Use: "precheck",
Short: "Precheck beOS Pro for Upgrade",
Run: func(cmd *cobra.Command, args []string) {
if err := pipelines.UpgradePreCheckPipeline(); err != nil {
log.Fatalf("error: %v", err)
}
},
}
return cmd
}