Skip to content

Commit 5b6827a

Browse files
authored
Skip fetching selected repo info when not a tty
When list secret is run outside the context of a tty, the selected repository count is not shown. Since fetching this information is an extra API call per secret, we should skip fetching it when it's not needed.
1 parent 5f8e1b5 commit 5b6827a

File tree

2 files changed

+34
-26
lines changed

2 files changed

+34
-26
lines changed

pkg/cmd/secret/list/list.go

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ func listRun(opts *ListOptions) error {
9090
}
9191

9292
var secrets []*Secret
93+
showSelectedRepoInfo := opts.IO.IsStdoutTTY()
9394
if orgName == "" && !opts.UserSecrets {
9495
if envName == "" {
9596
secrets, err = getRepoSecrets(client, baseRepo)
@@ -111,9 +112,9 @@ func listRun(opts *ListOptions) error {
111112
}
112113

113114
if opts.UserSecrets {
114-
secrets, err = getUserSecrets(client, host)
115+
secrets, err = getUserSecrets(client, host, showSelectedRepoInfo)
115116
} else {
116-
secrets, err = getOrgSecrets(client, host, orgName)
117+
secrets, err = getOrgSecrets(client, host, orgName, showSelectedRepoInfo)
117118
}
118119
}
119120

@@ -130,7 +131,7 @@ func listRun(opts *ListOptions) error {
130131
}
131132
tp.AddField(updatedAt, nil, nil)
132133
if secret.Visibility != "" {
133-
if opts.IO.IsStdoutTTY() {
134+
if showSelectedRepoInfo {
134135
tp.AddField(fmtVisibility(*secret), nil, nil)
135136
} else {
136137
tp.AddField(strings.ToUpper(string(secret.Visibility)), nil, nil)
@@ -171,29 +172,32 @@ func fmtVisibility(s Secret) string {
171172
return ""
172173
}
173174

174-
func getOrgSecrets(client httpClient, host, orgName string) ([]*Secret, error) {
175+
func getOrgSecrets(client httpClient, host, orgName string, showSelectedRepoInfo bool) ([]*Secret, error) {
175176
secrets, err := getSecrets(client, host, fmt.Sprintf("orgs/%s/actions/secrets", orgName))
176177
if err != nil {
177178
return nil, err
178179
}
179180

180-
err = getSelectedRepositoryInformation(client, secrets)
181-
if err != nil {
182-
return nil, err
181+
if showSelectedRepoInfo {
182+
err = getSelectedRepositoryInformation(client, secrets)
183+
if err != nil {
184+
return nil, err
185+
}
183186
}
184-
185187
return secrets, nil
186188
}
187189

188-
func getUserSecrets(client httpClient, host string) ([]*Secret, error) {
190+
func getUserSecrets(client httpClient, host string, showSelectedRepoInfo bool) ([]*Secret, error) {
189191
secrets, err := getSecrets(client, host, "user/codespaces/secrets")
190192
if err != nil {
191193
return nil, err
192194
}
193195

194-
err = getSelectedRepositoryInformation(client, secrets)
195-
if err != nil {
196-
return nil, err
196+
if showSelectedRepoInfo {
197+
err = getSelectedRepositoryInformation(client, secrets)
198+
if err != nil {
199+
return nil, err
200+
}
197201
}
198202

199203
return secrets, nil

pkg/cmd/secret/list/list_test.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -234,11 +234,13 @@ func Test_listRun(t *testing.T) {
234234
}
235235
path = fmt.Sprintf("orgs/%s/actions/secrets", tt.opts.OrgName)
236236

237-
reg.Register(
238-
httpmock.REST("GET", fmt.Sprintf("orgs/%s/actions/secrets/SECRET_THREE/repositories", tt.opts.OrgName)),
239-
httpmock.JSONResponse(struct {
240-
TotalCount int `json:"total_count"`
241-
}{2}))
237+
if tt.tty {
238+
reg.Register(
239+
httpmock.REST("GET", fmt.Sprintf("orgs/%s/actions/secrets/SECRET_THREE/repositories", tt.opts.OrgName)),
240+
httpmock.JSONResponse(struct {
241+
TotalCount int `json:"total_count"`
242+
}{2}))
243+
}
242244
}
243245

244246
if tt.opts.UserSecrets {
@@ -264,15 +266,17 @@ func Test_listRun(t *testing.T) {
264266
}
265267

266268
path = "user/codespaces/secrets"
267-
for i, secret := range payload.Secrets {
268-
hostLen := len("https://api.github.com/")
269-
path := secret.SelectedReposURL[hostLen:len(secret.SelectedReposURL)]
270-
repositoryCount := i + 1
271-
reg.Register(
272-
httpmock.REST("GET", path),
273-
httpmock.JSONResponse(struct {
274-
TotalCount int `json:"total_count"`
275-
}{repositoryCount}))
269+
if tt.tty {
270+
for i, secret := range payload.Secrets {
271+
hostLen := len("https://api.github.com/")
272+
path := secret.SelectedReposURL[hostLen:len(secret.SelectedReposURL)]
273+
repositoryCount := i + 1
274+
reg.Register(
275+
httpmock.REST("GET", path),
276+
httpmock.JSONResponse(struct {
277+
TotalCount int `json:"total_count"`
278+
}{repositoryCount}))
279+
}
276280
}
277281
}
278282

0 commit comments

Comments
 (0)