refactor: upgrade logic

This commit is contained in:
naison
2025-10-23 11:39:53 +08:00
parent 871fec10c3
commit abaa9e474e
3 changed files with 23 additions and 36 deletions

View File

@@ -1,17 +1,11 @@
package cmds package cmds
import ( import (
"fmt"
"net/http"
"os"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"golang.org/x/oauth2"
cmdutil "k8s.io/kubectl/pkg/cmd/util" cmdutil "k8s.io/kubectl/pkg/cmd/util"
"k8s.io/kubectl/pkg/util/i18n" "k8s.io/kubectl/pkg/util/i18n"
"k8s.io/kubectl/pkg/util/templates" "k8s.io/kubectl/pkg/util/templates"
"github.com/wencaiwulue/kubevpn/v2/pkg/config"
plog "github.com/wencaiwulue/kubevpn/v2/pkg/log" plog "github.com/wencaiwulue/kubevpn/v2/pkg/log"
"github.com/wencaiwulue/kubevpn/v2/pkg/upgrade" "github.com/wencaiwulue/kubevpn/v2/pkg/upgrade"
) )
@@ -26,33 +20,8 @@ func CmdUpgrade(cmdutil.Factory) *cobra.Command {
upgrade local daemon grpc server to latest version. upgrade local daemon grpc server to latest version.
`)), `)),
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
const (
envLatestUrl = "KUBEVPN_LATEST_VERSION_URL"
)
plog.InitLoggerForClient() plog.InitLoggerForClient()
var client = http.DefaultClient return upgrade.Main(cmd.Context(), quit)
if config.GitHubOAuthToken != "" {
client = oauth2.NewClient(cmd.Context(), oauth2.StaticTokenSource(&oauth2.Token{AccessToken: config.GitHubOAuthToken, TokenType: "Bearer"}))
}
var url = os.Getenv(envLatestUrl)
if url == "" {
var latestVersion string
var needsUpgrade bool
var err error
url, latestVersion, needsUpgrade, err = upgrade.NeedsUpgrade(cmd.Context(), client, config.Version)
if err != nil {
return err
}
if !needsUpgrade {
_, _ = fmt.Fprintln(os.Stdout, fmt.Sprintf("Already up to date, don't needs to upgrade, version: %s", latestVersion))
return nil
}
_, _ = fmt.Fprintln(os.Stdout, fmt.Sprintf("Current version is: %s less than latest version: %s, needs to upgrade", config.Version, latestVersion))
_ = os.Setenv(envLatestUrl, url)
_ = quit(cmd.Context(), true)
_ = quit(cmd.Context(), false)
}
return upgrade.Main(cmd.Context(), client, url)
}, },
} }
return cmd return cmd

View File

@@ -290,7 +290,7 @@ func (w *wsHandler) installKubevpnOnRemote(ctx context.Context, sshClient *ssh.C
w.Log("Get latest kubevpn version failed: %v", err) w.Log("Get latest kubevpn version failed: %v", err)
return err return err
} }
w.Log("The latest version is: %s", latestVersion) w.Log("The latest version is %s", latestVersion)
var temp *os.File var temp *os.File
temp, err = os.CreateTemp("", "") temp, err = os.CreateTemp("", "")
if err != nil { if err != nil {

View File

@@ -10,7 +10,9 @@ import (
"strings" "strings"
goversion "github.com/hashicorp/go-version" goversion "github.com/hashicorp/go-version"
"golang.org/x/oauth2"
"github.com/wencaiwulue/kubevpn/v2/pkg/config"
"github.com/wencaiwulue/kubevpn/v2/pkg/daemon" "github.com/wencaiwulue/kubevpn/v2/pkg/daemon"
"github.com/wencaiwulue/kubevpn/v2/pkg/daemon/elevate" "github.com/wencaiwulue/kubevpn/v2/pkg/daemon/elevate"
plog "github.com/wencaiwulue/kubevpn/v2/pkg/log" plog "github.com/wencaiwulue/kubevpn/v2/pkg/log"
@@ -25,21 +27,37 @@ import (
// 5) unzip to temp file // 5) unzip to temp file
// 6) check permission of putting new kubevpn back // 6) check permission of putting new kubevpn back
// 7) chmod +x, move old to /temp, move new to CURRENT_FOLDER // 7) chmod +x, move old to /temp, move new to CURRENT_FOLDER
func Main(ctx context.Context, client *http.Client, url string) error { func Main(ctx context.Context, quit func(ctx context.Context, isSudo bool) error) error {
err := elevatePermission() err := elevatePermission()
if err != nil { if err != nil {
return err return err
} }
var client = http.DefaultClient
if config.GitHubOAuthToken != "" {
client = oauth2.NewClient(ctx, oauth2.StaticTokenSource(&oauth2.Token{AccessToken: config.GitHubOAuthToken, TokenType: "Bearer"}))
}
url, latestVersion, needsUpgrade, err := NeedsUpgrade(ctx, client, config.Version)
if err != nil {
return err
}
if !needsUpgrade {
_, _ = fmt.Fprintln(os.Stdout, fmt.Sprintf("Already up to date, don't needs to upgrade, version: %s", latestVersion))
return nil
}
_, _ = fmt.Fprintln(os.Stdout, fmt.Sprintf("Current version: %s less than latest version: %s, needs to upgrade", config.Version, latestVersion))
_ = quit(ctx, true)
_ = quit(ctx, false)
err = downloadAndInstall(client, url) err = downloadAndInstall(client, url)
if err != nil { if err != nil {
return err return err
} }
plog.G(ctx).Infof("Upgrade daemon...") plog.G(ctx).Infof("Upgrade daemon...")
err = daemon.StartupDaemon(context.Background()) _ = daemon.StartupDaemon(context.Background())
plog.G(ctx).Info("Done") plog.G(ctx).Info("Done")
return err return nil
} }
func downloadAndInstall(client *http.Client, url string) error { func downloadAndInstall(client *http.Client, url string) error {