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
103 lines
2.7 KiB
Go
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
|
|
}
|