Przeglądaj źródła

Show info in the CLI when a new version is available

Mohammed Nafees 4 lat temu
rodzic
commit
69d7fb0ba6
2 zmienionych plików z 27 dodań i 1 usunięć
  1. 26 0
      cli/cmd/root.go
  2. 1 1
      cli/cmd/version.go

+ 26 - 0
cli/cmd/root.go

@@ -1,9 +1,15 @@
 package cmd
 
 import (
+	"context"
+	"fmt"
 	"os"
+	"strings"
+	"time"
 
+	"github.com/Masterminds/semver/v3"
 	"github.com/fatih/color"
+	"github.com/google/go-github/v41/github"
 	api "github.com/porter-dev/porter/api/client"
 	"github.com/spf13/cobra"
 	"k8s.io/client-go/util/homedir"
@@ -25,6 +31,26 @@ func Execute() {
 
 	rootCmd.PersistentFlags().AddFlagSet(defaultFlagSet)
 
+	if Version != "dev" {
+		ghClient := github.NewClient(nil)
+		ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
+		defer cancel()
+		release, _, err := ghClient.Repositories.GetLatestRelease(ctx, "porter-dev", "porter")
+		if err == nil {
+			release.GetURL()
+			// we do not care for an error here because we do not want to block the user here
+			constraint, err := semver.NewConstraint(fmt.Sprintf("> %s", strings.TrimPrefix(Version, "v")))
+			if err == nil {
+				latestRelease, err := semver.NewVersion(strings.TrimPrefix(release.GetTagName(), "v"))
+				if err == nil {
+					if constraint.Check(latestRelease) {
+						color.New(color.FgYellow).Println("A new version of the porter CLI is available to download at https://github.com/porter-dev/porter/releases/latest")
+					}
+				}
+			}
+		}
+	}
+
 	if err := rootCmd.Execute(); err != nil {
 		color.New(color.FgRed).Println(err)
 		os.Exit(1)

+ 1 - 1
cli/cmd/version.go

@@ -7,7 +7,7 @@ import (
 )
 
 // Version will be linked by an ldflag during build
-var Version string = "v0.8.0"
+var Version string = "dev"
 
 var versionCmd = &cobra.Command{
 	Use:     "version",