Skip to content

Commit e1c2b40

Browse files
authored
fix: improve help text and add analytics (#566)
* Add analytics tracking to sourcemaps command * Improve help text of `ldcli sourcemaps` Local Testing: <img width="1077" alt="Screenshot 2025-06-10 at 17 43 07" src="https://github.com/user-attachments/assets/c4fcefc7-0f52-44ef-8e27-031adeba4683" /> ![Screenshot 2025-06-12 at 14 10 28](https://github.com/user-attachments/assets/45edcd4d-2946-4289-80d0-44975c7e590b)
1 parent 020426b commit e1c2b40

File tree

4 files changed

+33
-15
lines changed

4 files changed

+33
-15
lines changed

cmd/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ func NewRootCommand(
204204
cmd.AddCommand(logincmd.NewLoginCmd(resources.NewClient(version)))
205205
cmd.AddCommand(resourcecmd.NewResourcesCmd())
206206
cmd.AddCommand(devcmd.NewDevServerCmd(resources.NewClient(version), analyticsTrackerFn, dev_server.NewClient(version)))
207-
cmd.AddCommand(sourcemapscmd.NewSourcemapsCmd())
207+
cmd.AddCommand(sourcemapscmd.NewSourcemapsCmd(resources.NewClient(version), analyticsTrackerFn))
208208
resourcecmd.AddAllResourceCmds(cmd, clients.ResourcesClient, analyticsTrackerFn)
209209

210210
// add non-generated commands

cmd/sourcemaps/sourcemaps.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,21 @@ package sourcemaps
33
import (
44
"github.com/spf13/cobra"
55

6+
resourcescmd "github.com/launchdarkly/ldcli/cmd/resources"
7+
"github.com/launchdarkly/ldcli/internal/analytics"
68
"github.com/launchdarkly/ldcli/internal/resources"
79
)
810

9-
func NewSourcemapsCmd() *cobra.Command {
11+
func NewSourcemapsCmd(client resources.Client, analyticsTrackerFn analytics.TrackerFn) *cobra.Command {
1012
cmd := &cobra.Command{
1113
Use: "sourcemaps",
1214
Short: "Manage sourcemaps",
1315
Long: "Manage sourcemaps for LaunchDarkly error monitoring",
14-
Run: func(cmd *cobra.Command, args []string) {
15-
_ = cmd.Help()
16-
},
16+
Args: cobra.MinimumNArgs(1),
1717
}
1818

19-
cmd.AddCommand(NewUploadCmd(resources.NewClient("")))
19+
cmd.AddCommand(NewUploadCmd(client, analyticsTrackerFn))
20+
cmd.SetUsageTemplate(resourcescmd.SubcommandUsageTemplate())
2021

2122
return cmd
2223
}

cmd/sourcemaps/upload.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ import (
1616
"github.com/spf13/cobra"
1717
"github.com/spf13/viper"
1818

19+
cmdAnalytics "github.com/launchdarkly/ldcli/cmd/analytics"
1920
"github.com/launchdarkly/ldcli/cmd/cliflags"
2021
resourcescmd "github.com/launchdarkly/ldcli/cmd/resources"
2122
"github.com/launchdarkly/ldcli/cmd/validators"
23+
"github.com/launchdarkly/ldcli/internal/analytics"
2224
"github.com/launchdarkly/ldcli/internal/output"
2325
"github.com/launchdarkly/ldcli/internal/resources"
2426
)
@@ -66,13 +68,26 @@ type SourceMapFile struct {
6668
Name string
6769
}
6870

69-
func NewUploadCmd(client resources.Client) *cobra.Command {
71+
func NewUploadCmd(client resources.Client, analyticsTrackerFn analytics.TrackerFn) *cobra.Command {
7072
cmd := &cobra.Command{
7173
Args: validators.Validate(),
7274
Use: "upload",
7375
Short: "Upload sourcemaps",
7476
Long: "Upload JavaScript sourcemaps to LaunchDarkly for error monitoring",
7577
RunE: runE(client),
78+
PersistentPreRun: func(cmd *cobra.Command, args []string) {
79+
tracker := analyticsTrackerFn(
80+
viper.GetString(cliflags.AccessTokenFlag),
81+
viper.GetString(cliflags.BaseURIFlag),
82+
viper.GetBool(cliflags.AnalyticsOptOut),
83+
)
84+
tracker.SendCommandRunEvent(cmdAnalytics.CmdRunEventProperties(
85+
cmd,
86+
"sourcemaps",
87+
map[string]interface{}{
88+
"action": cmd.Name(),
89+
}))
90+
},
7691
}
7792

7893
cmd.SetUsageTemplate(resourcescmd.SubcommandUsageTemplate())

cmd/sourcemaps/upload_test.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import (
1313

1414
"github.com/stretchr/testify/assert"
1515

16+
"github.com/launchdarkly/ldcli/internal/analytics"
1617
"github.com/launchdarkly/ldcli/internal/resources"
1718
)
19+
1820
// Mock resources.Client implementation for testing
1921
type mockResourcesClient struct {
2022
responses map[string][]byte
@@ -35,9 +37,6 @@ func (m *mockResourcesClient) GetVersion() string {
3537
return "test-version"
3638
}
3739

38-
39-
40-
4140
func TestGetSourceMapUploadUrls(t *testing.T) {
4241
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
4342
assert.Equal(t, http.MethodPost, r.Method)
@@ -131,7 +130,9 @@ func TestUploadFile(t *testing.T) {
131130

132131
func TestNewUploadCmd(t *testing.T) {
133132
client := resources.NewClient("")
134-
cmd := NewUploadCmd(client)
133+
cmd := NewUploadCmd(client, func(accessToken, baseURI string, analyticsOptOut bool) analytics.Tracker {
134+
return &analytics.MockTracker{}
135+
})
135136

136137
assert.Equal(t, "upload", cmd.Use)
137138
assert.Equal(t, "Upload sourcemaps", cmd.Short)
@@ -200,7 +201,6 @@ func TestGetAllSourceMapFiles(t *testing.T) {
200201
assert.Contains(t, err.Error(), "no .js.map files found")
201202
}
202203

203-
204204
func TestGetSourceMapUploadUrlsErrors(t *testing.T) {
205205
_, err := getSourceMapUploadUrls("test-key", "project123", []string{"path"}, "://invalid-url")
206206
assert.Error(t, err)
@@ -227,7 +227,9 @@ func TestRunE(t *testing.T) {
227227
},
228228
}
229229

230-
cmd := NewUploadCmd(mockClient)
230+
cmd := NewUploadCmd(mockClient, func(accessToken, baseURI string, analyticsOptOut bool) analytics.Tracker {
231+
return &analytics.MockTracker{}
232+
})
231233
args := []string{}
232234

233235
tempDir, err := os.MkdirTemp("", "sourcemap-test")
@@ -254,14 +256,14 @@ func TestRunE(t *testing.T) {
254256
runFunc := runE(mockClient)
255257
err = runFunc(cmd, args)
256258
assert.Error(t, err)
257-
259+
258260
err = cmd.Flags().Set("project", "test-project")
259261
assert.NoError(t, err)
260262
err = cmd.Flags().Set(pathFlag, testMapFile)
261263
assert.NoError(t, err)
262264
err = cmd.Flags().Set(backendUrlFlag, urlsServer.URL)
263265
assert.NoError(t, err)
264-
266+
265267
err = runFunc(cmd, args)
266268
assert.Error(t, err)
267269
}

0 commit comments

Comments
 (0)