From c2f3dde966ca7b42bccaeca3ca589ea9f4f5eb2f Mon Sep 17 00:00:00 2001 From: Michael Stolarz Date: Wed, 3 Jun 2026 16:26:42 -0700 Subject: [PATCH] Support root bl --version --- cli/core/root.go | 37 ++++++++++++++++++++++--------------- cli/core/root_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 15 deletions(-) diff --git a/cli/core/root.go b/cli/core/root.go index b859ec9c..d124c159 100644 --- a/cli/core/root.go +++ b/cli/core/root.go @@ -376,6 +376,17 @@ func completeWorkspaceNames(cmd *cobra.Command, args []string, toComplete string } func Execute(releaseVersion string, releaseCommit string, releaseDate string) error { + if version == "" { + version = releaseVersion + } + if commit == "" { + commit = releaseCommit + } + if date == "" { + date = releaseDate + } + rootCmd.Version = version + // Prompt for tracking consent if not already configured promptForTracking() @@ -407,15 +418,6 @@ func Execute(releaseVersion string, releaseCommit string, releaseDate string) er } blaxel.InitializeEnvironment(workspace) - if version == "" { - version = releaseVersion - } - if commit == "" { - commit = releaseCommit - } - if date == "" { - date = releaseDate - } SetSentryTag("version", version) SetSentryTag("commit", commit) SetSentryTag("workspace", workspace) @@ -558,12 +560,8 @@ func promptForTracking() { return } - // Skip for completion and version commands - if len(os.Args) > 1 { - cmd := os.Args[1] - if cmd == "completion" || cmd == "__complete" || cmd == "version" { - return - } + if isTrackingPromptCommandExempt(os.Args) { + return } // Skip in CI environments @@ -599,3 +597,12 @@ func promptForTracking() { } fmt.Println() } + +func isTrackingPromptCommandExempt(args []string) bool { + if len(args) <= 1 { + return false + } + + cmd := args[1] + return cmd == "completion" || cmd == "__complete" || cmd == "version" || cmd == "--version" +} diff --git a/cli/core/root_test.go b/cli/core/root_test.go index 0b431c76..6a01e02d 100644 --- a/cli/core/root_test.go +++ b/cli/core/root_test.go @@ -1,6 +1,7 @@ package core import ( + "bytes" "os" "path/filepath" "testing" @@ -284,6 +285,45 @@ func TestGetVerbose(t *testing.T) { assert.False(t, GetVerbose()) } +func TestRootVersionFlagPreservesVerboseShorthand(t *testing.T) { + originalRootCmd := rootCmd + defer func() { rootCmd = originalRootCmd }() + + rootCmd = &cobra.Command{ + Use: "bl", + Version: "1.2.3", + } + rootCmd.PersistentFlags().BoolP("verbose", "v", false, "Enable verbose output") + + var output bytes.Buffer + rootCmd.SetOut(&output) + rootCmd.SetArgs([]string{"--version"}) + + err := rootCmd.Execute() + + assert.NoError(t, err) + assert.Contains(t, output.String(), "bl version 1.2.3") + + versionFlag := rootCmd.Flags().Lookup("version") + assert.NotNil(t, versionFlag) + assert.Equal(t, "", versionFlag.Shorthand) + + verboseFlag := rootCmd.PersistentFlags().Lookup("verbose") + assert.NotNil(t, verboseFlag) + assert.Equal(t, "v", verboseFlag.Shorthand) +} + +func TestTrackingPromptCommandExemptions(t *testing.T) { + assert.True(t, isTrackingPromptCommandExempt([]string{"bl", "version"})) + assert.True(t, isTrackingPromptCommandExempt([]string{"bl", "--version"})) + assert.True(t, isTrackingPromptCommandExempt([]string{"bl", "completion"})) + assert.True(t, isTrackingPromptCommandExempt([]string{"bl", "__complete"})) + + assert.False(t, isTrackingPromptCommandExempt([]string{"bl"})) + assert.False(t, isTrackingPromptCommandExempt([]string{"bl", "-v"})) + assert.False(t, isTrackingPromptCommandExempt([]string{"bl", "get"})) +} + func TestReadWriteVersionCache(t *testing.T) { // Create a temp directory for testing tempDir, err := os.MkdirTemp("", "version_cache_test")