package cmd import ( "context" "fmt" "os" pb "github.com/runconduit/conduit/controller/gen/public" "github.com/runconduit/conduit/pkg/version" "github.com/spf13/cobra" ) const DefaultVersionString = "unavailable" var shortVersion bool var onlyClientVersion bool var versionCmd = &cobra.Command{ Use: "version", Short: "Print the client and server version information", Run: func(cmd *cobra.Command, args []string) { clientVersion := version.Version if shortVersion { fmt.Println(clientVersion) } else { fmt.Printf("Client version: %s\n", clientVersion) } conduitApiClient, err := newPublicAPIClient() if err != nil { fmt.Fprintf(os.Stderr, "Error connecting to server: %s\n", err) os.Exit(1) } if !onlyClientVersion { serverVersion := getServerVersion(conduitApiClient) if shortVersion { fmt.Println(serverVersion) } else { fmt.Printf("Server version: %s\n", serverVersion) } } return }, } func init() { RootCmd.AddCommand(versionCmd) versionCmd.PersistentFlags().BoolVar(&shortVersion, "short", false, "Print the version number(s) only, with no additional output") versionCmd.PersistentFlags().BoolVar(&onlyClientVersion, "client", false, "Print the client version only") addControlPlaneNetworkingArgs(versionCmd) } func getServerVersion(client pb.ApiClient) string { resp, err := client.Version(context.Background(), &pb.Empty{}) if err != nil { return DefaultVersionString } return resp.GetReleaseVersion() }