From 18a9a7c809d585e471e85aa12d880932d801d43a Mon Sep 17 00:00:00 2001 From: Sunny Guduru Date: Wed, 27 Mar 2024 14:41:09 -0700 Subject: [PATCH 1/2] reading in version file and setting --- cmd/root.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 1eda8fae..dbbe6c79 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,6 +1,7 @@ package cmd import ( + "encoding/json" "fmt" "log" "os" @@ -18,10 +19,9 @@ import ( func NewRootCommand(flagsClient flags.Client, membersClient members.Client, projectsClient projects.Client) (*cobra.Command, error) { cmd := &cobra.Command{ - Use: "ldcli", - Short: "LaunchDarkly CLI", - Long: "LaunchDarkly CLI to control your feature flags", - Version: "0.0.1", // TODO: set this based on release or use `cmd.SetVersionTemplate(s string)` + Use: "ldcli", + Short: "LaunchDarkly CLI", + Long: "LaunchDarkly CLI to control your feature flags", // Handle errors differently based on type. // We don't want to show the usage if the user has the right structure but invalid data such as @@ -30,13 +30,24 @@ func NewRootCommand(flagsClient flags.Client, membersClient members.Client, proj SilenceUsage: true, } + versionByteValue, err := os.ReadFile(".release-please-manifest.json") + if err != nil { + return nil, err + } + + var rpManifest struct { + Version string `json:"."` + } + json.Unmarshal(versionByteValue, &rpManifest) + cmd.Version = rpManifest.Version + cmd.PersistentFlags().StringP( "accessToken", "t", "", "LaunchDarkly personal access token", ) - err := cmd.MarkPersistentFlagRequired("accessToken") + err = cmd.MarkPersistentFlagRequired("accessToken") if err != nil { return nil, err } From 25e1dd8222efb7e42555e9ee3bca2abf4c8d851e Mon Sep 17 00:00:00 2001 From: Sunny Guduru Date: Wed, 27 Mar 2024 15:18:28 -0700 Subject: [PATCH 2/2] working --- cmd/cmdtest.go | 2 +- cmd/root.go | 27 ++++++++------------------- cmd/root_test.go | 24 ++++++++++++++++++++++++ main.go | 6 +++++- 4 files changed, 38 insertions(+), 21 deletions(-) create mode 100644 cmd/root_test.go diff --git a/cmd/cmdtest.go b/cmd/cmdtest.go index c4647072..d60cdc85 100644 --- a/cmd/cmdtest.go +++ b/cmd/cmdtest.go @@ -21,7 +21,7 @@ func CallCmd( projectsClient *projects.MockClient, args []string, ) ([]byte, error) { - rootCmd, err := NewRootCommand(flagsClient, membersClient, projectsClient) + rootCmd, err := NewRootCommand(flagsClient, membersClient, projectsClient, "test") require.NoError(t, err) b := bytes.NewBufferString("") rootCmd.SetOut(b) diff --git a/cmd/root.go b/cmd/root.go index dbbe6c79..b5a30fa2 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,7 +1,6 @@ package cmd import ( - "encoding/json" "fmt" "log" "os" @@ -17,11 +16,12 @@ import ( "ldcli/internal/projects" ) -func NewRootCommand(flagsClient flags.Client, membersClient members.Client, projectsClient projects.Client) (*cobra.Command, error) { +func NewRootCommand(flagsClient flags.Client, membersClient members.Client, projectsClient projects.Client, version string) (*cobra.Command, error) { cmd := &cobra.Command{ - Use: "ldcli", - Short: "LaunchDarkly CLI", - Long: "LaunchDarkly CLI to control your feature flags", + Use: "ldcli", + Short: "LaunchDarkly CLI", + Long: "LaunchDarkly CLI to control your feature flags", + Version: version, // Handle errors differently based on type. // We don't want to show the usage if the user has the right structure but invalid data such as @@ -30,24 +30,13 @@ func NewRootCommand(flagsClient flags.Client, membersClient members.Client, proj SilenceUsage: true, } - versionByteValue, err := os.ReadFile(".release-please-manifest.json") - if err != nil { - return nil, err - } - - var rpManifest struct { - Version string `json:"."` - } - json.Unmarshal(versionByteValue, &rpManifest) - cmd.Version = rpManifest.Version - cmd.PersistentFlags().StringP( "accessToken", "t", "", "LaunchDarkly personal access token", ) - err = cmd.MarkPersistentFlagRequired("accessToken") + err := cmd.MarkPersistentFlagRequired("accessToken") if err != nil { return nil, err } @@ -89,8 +78,8 @@ func NewRootCommand(flagsClient flags.Client, membersClient members.Client, proj return cmd, nil } -func Execute() { - rootCmd, err := NewRootCommand(flags.NewClient(), members.NewClient(), projects.NewClient()) +func Execute(version string) { + rootCmd, err := NewRootCommand(flags.NewClient(), members.NewClient(), projects.NewClient(), version) if err != nil { log.Fatal(err) } diff --git a/cmd/root_test.go b/cmd/root_test.go new file mode 100644 index 00000000..b7dac8cc --- /dev/null +++ b/cmd/root_test.go @@ -0,0 +1,24 @@ +package cmd + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "ldcli/internal/flags" +) + +func TestCreate(t *testing.T) { + t.Run("with valid flags prints version", func(t *testing.T) { + client := flags.MockClient{} + args := []string{ + "--version", + } + + output, err := CallCmd(t, &client, nil, nil, args) + + require.NoError(t, err) + assert.Contains(t, string(output), `ldcli version test`) + }) +} diff --git a/main.go b/main.go index fbc373bb..ba8b7515 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,10 @@ package main import "ldcli/cmd" +var ( + version = "dev" +) + func main() { - cmd.Execute() + cmd.Execute(version) }