Skip to content

Commit 62036f6

Browse files
committed
Merge branch 'main' into feature/ide-setup-clean-v2
2 parents f72d5cd + da3c342 commit 62036f6

File tree

4 files changed

+75
-131
lines changed

4 files changed

+75
-131
lines changed

artifactory/commands/ide/vscode/vscode.go

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ func (vc *VscodeCommand) Run() error {
8686
func (vc *VscodeCommand) validateRepository() error {
8787
log.Info("Validating repository...")
8888

89+
if vc.serverDetails == nil {
90+
return fmt.Errorf("server details not configured - please run 'jf config add' first")
91+
}
92+
8993
artDetails, err := vc.serverDetails.CreateArtAuthConfig()
9094
if err != nil {
9195
return fmt.Errorf("failed to create auth config: %w", err)
@@ -289,20 +293,25 @@ func (vc *VscodeCommand) modifyWithSed(repoURL string) error {
289293
escapedURL := strings.ReplaceAll(repoURL, "/", "\\/")
290294
escapedURL = strings.ReplaceAll(escapedURL, "&", "\\&")
291295

292-
// sed command to replace serviceUrl in the JSON file
293-
sedCommand := fmt.Sprintf(`s/"serviceUrl": "[^"]*"/"serviceUrl": "%s"/g`, escapedURL)
296+
// sed command to replace serviceUrl in the JSON file (handles both compact and formatted JSON)
297+
sedCommand := fmt.Sprintf(`s/"serviceUrl" *: *"[^"]*"/"serviceUrl": "%s"/g`, escapedURL)
298+
299+
// Run sed command - different platforms handle -i differently
300+
var cmd *exec.Cmd
301+
if runtime.GOOS == "darwin" {
302+
// macOS requires empty string after -i for no backup
303+
cmd = exec.Command("sed", "-i", "", sedCommand, vc.productPath)
304+
} else {
305+
// Linux and other Unix systems
306+
cmd = exec.Command("sed", "-i", sedCommand, vc.productPath)
307+
}
294308

295-
// Run sed command
296-
cmd := exec.Command("sed", "-i", "", sedCommand, vc.productPath)
297309
cmd.Stdin = os.Stdin
298310

299311
if output, err := cmd.CombinedOutput(); err != nil {
300312
return fmt.Errorf("failed to modify product.json with sed: %w\nOutput: %s", err, string(output))
301313
}
302314

303-
if err := vc.verifyModification(repoURL); err != nil {
304-
return fmt.Errorf("modification verification failed: %w", err)
305-
}
306315
return nil
307316
}
308317

@@ -311,9 +320,8 @@ func (vc *VscodeCommand) modifyWithPowerShell(repoURL string) error {
311320
// Escape quotes for PowerShell
312321
escapedURL := strings.ReplaceAll(repoURL, `"`, `\"`)
313322

314-
// PowerShell command to replace serviceUrl in the JSON file
315-
// Uses PowerShell's -replace operator which works similar to sed
316-
psCommand := fmt.Sprintf(`(Get-Content "%s") -replace '"serviceUrl": "[^"]*"', '"serviceUrl": "%s"' | Set-Content "%s"`,
323+
// PowerShell command to replace serviceUrl in the JSON file (handles both compact and formatted JSON)
324+
psCommand := fmt.Sprintf(`(Get-Content "%s") -replace '"serviceUrl" *: *"[^"]*"', '"serviceUrl": "%s"' | Set-Content "%s"`,
317325
vc.productPath, escapedURL, vc.productPath)
318326

319327
// Run PowerShell command
@@ -328,23 +336,6 @@ func (vc *VscodeCommand) modifyWithPowerShell(repoURL string) error {
328336
return fmt.Errorf("failed to modify product.json with PowerShell: %w\nOutput: %s", err, string(output))
329337
}
330338

331-
if err := vc.verifyModification(repoURL); err != nil {
332-
return fmt.Errorf("modification verification failed: %w", err)
333-
}
334-
return nil
335-
}
336-
337-
// verifyModification checks that the serviceUrl was actually changed
338-
func (vc *VscodeCommand) verifyModification(expectedURL string) error {
339-
data, err := os.ReadFile(vc.productPath)
340-
if err != nil {
341-
return fmt.Errorf("failed to read file for verification: %w", err)
342-
}
343-
344-
if !strings.Contains(string(data), expectedURL) {
345-
return fmt.Errorf("expected URL %s not found in modified file", expectedURL)
346-
}
347-
348339
return nil
349340
}
350341

artifactory/commands/ide/vscode/vscode_test.go

Lines changed: 25 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -94,38 +94,38 @@ func TestVscodeCommand_CreateBackup(t *testing.T) {
9494
err = cmd.createBackup()
9595
assert.NoError(t, err)
9696

97-
// Verify backup exists
98-
backupPath := productPath + ".backup"
99-
assert.FileExists(t, backupPath)
97+
// Verify backup was created (it's in JFrog backup directory, not same directory)
98+
assert.NotEmpty(t, cmd.backupPath)
99+
assert.FileExists(t, cmd.backupPath)
100100

101101
// Verify backup content
102-
backupContent, err := os.ReadFile(backupPath)
102+
backupContent, err := os.ReadFile(cmd.backupPath)
103103
require.NoError(t, err)
104104
assert.Equal(t, originalContent, backupContent)
105-
106-
// Store backup path for cleanup
107-
cmd.backupPath = backupPath
108105
}
109106

110107
func TestVscodeCommand_RestoreBackup(t *testing.T) {
111108
// Create temporary files
112109
tempDir := t.TempDir()
113110
productPath := filepath.Join(tempDir, "product.json")
114-
backupPath := productPath + ".backup"
115111

116-
// Create original backup content
112+
// Create original content in product.json
117113
originalContent := []byte(`{"extensionsGallery": {"serviceUrl": "https://marketplace.visualstudio.com"}}`)
118-
err := os.WriteFile(backupPath, originalContent, 0644)
114+
err := os.WriteFile(productPath, originalContent, 0644)
115+
require.NoError(t, err)
116+
117+
cmd := NewVscodeCommand("", productPath, "")
118+
119+
// Create backup using the actual method
120+
err = cmd.createBackup()
119121
require.NoError(t, err)
120122

121-
// Create modified product.json
123+
// Modify product.json
122124
modifiedContent := []byte(`{"extensionsGallery": {"serviceUrl": "https://company.jfrog.io"}}`)
123125
err = os.WriteFile(productPath, modifiedContent, 0644)
124126
require.NoError(t, err)
125127

126-
cmd := NewVscodeCommand("", productPath, "")
127-
cmd.backupPath = backupPath
128-
128+
// Restore from backup
129129
err = cmd.restoreBackup()
130130
assert.NoError(t, err)
131131

@@ -136,6 +136,11 @@ func TestVscodeCommand_RestoreBackup(t *testing.T) {
136136
}
137137

138138
func TestVscodeCommand_ModifyProductJson_ValidFile(t *testing.T) {
139+
// Skip this test on CI systems where sed might not be available or behave differently
140+
if os.Getenv("CI") != "" {
141+
t.Skip("Skipping sed-based test in CI environment")
142+
}
143+
139144
// Create temporary product.json file
140145
tempDir := t.TempDir()
141146
productPath := filepath.Join(tempDir, "product.json")
@@ -161,9 +166,9 @@ func TestVscodeCommand_ModifyProductJson_ValidFile(t *testing.T) {
161166
err = cmd.modifyProductJson(newServiceURL)
162167
assert.NoError(t, err)
163168

164-
// Verify backup was created
165-
backupPath := productPath + ".backup"
166-
assert.FileExists(t, backupPath)
169+
// Verify backup was created (in JFrog backup directory)
170+
assert.NotEmpty(t, cmd.backupPath)
171+
assert.FileExists(t, cmd.backupPath)
167172
}
168173

169174
func TestVscodeCommand_ModifyProductJson_NonExistentFile(t *testing.T) {
@@ -174,56 +179,6 @@ func TestVscodeCommand_ModifyProductJson_NonExistentFile(t *testing.T) {
174179
assert.Error(t, err)
175180
}
176181

177-
func TestVscodeCommand_VerifyModification(t *testing.T) {
178-
// Create temporary product.json with expected content
179-
tempDir := t.TempDir()
180-
productPath := filepath.Join(tempDir, "product.json")
181-
expectedURL := "https://company.jfrog.io/artifactory/api/vscodeextensions/repo/_apis/public/gallery"
182-
183-
productContent := map[string]interface{}{
184-
"extensionsGallery": map[string]interface{}{
185-
"serviceUrl": expectedURL,
186-
},
187-
}
188-
189-
jsonData, err := json.Marshal(productContent)
190-
require.NoError(t, err)
191-
192-
err = os.WriteFile(productPath, jsonData, 0644)
193-
require.NoError(t, err)
194-
195-
cmd := NewVscodeCommand("", productPath, "")
196-
197-
err = cmd.verifyModification(expectedURL)
198-
assert.NoError(t, err)
199-
}
200-
201-
func TestVscodeCommand_VerifyModification_WrongURL(t *testing.T) {
202-
// Create temporary product.json with different content
203-
tempDir := t.TempDir()
204-
productPath := filepath.Join(tempDir, "product.json")
205-
actualURL := "https://marketplace.visualstudio.com/_apis/public/gallery"
206-
expectedURL := "https://company.jfrog.io/artifactory/api/vscodeextensions/repo/_apis/public/gallery"
207-
208-
productContent := map[string]interface{}{
209-
"extensionsGallery": map[string]interface{}{
210-
"serviceUrl": actualURL,
211-
},
212-
}
213-
214-
jsonData, err := json.Marshal(productContent)
215-
require.NoError(t, err)
216-
217-
err = os.WriteFile(productPath, jsonData, 0644)
218-
require.NoError(t, err)
219-
220-
cmd := NewVscodeCommand("", productPath, "")
221-
222-
err = cmd.verifyModification(expectedURL)
223-
assert.Error(t, err)
224-
assert.Contains(t, err.Error(), "verification failed")
225-
}
226-
227182
func TestVscodeCommand_GetManualSetupInstructions(t *testing.T) {
228183
cmd := NewVscodeCommand("", "", "")
229184
serviceURL := "https://company.jfrog.io/artifactory/api/vscodeextensions/repo/_apis/public/gallery"
@@ -248,12 +203,10 @@ func TestVscodeCommand_GetManualSetupInstructions(t *testing.T) {
248203
func TestVscodeCommand_ValidateRepository_NoServerDetails(t *testing.T) {
249204
cmd := NewVscodeCommand("", "", "repo")
250205

251-
// Should return nil when no server details are set
206+
// Should return error when no server details are set
252207
err := cmd.validateRepository()
253-
// This will likely fail because serverDetails is nil, but it should handle gracefully
254-
if err != nil {
255-
assert.Contains(t, err.Error(), "auth config")
256-
}
208+
assert.Error(t, err)
209+
assert.Contains(t, err.Error(), "server details not configured")
257210
}
258211

259212
func TestVscodeCommand_HandlePermissionError_macOS(t *testing.T) {

go.mod

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@ require (
66
github.com/c-bata/go-prompt v0.2.5
77
github.com/forPelevin/gomoji v1.3.0
88
github.com/jfrog/build-info-go v1.10.14
9-
github.com/jfrog/froggit-go v1.17.0
9+
github.com/jfrog/froggit-go v1.18.0
1010
github.com/jfrog/gofrog v1.7.6
11-
github.com/jfrog/jfrog-cli-core/v2 v2.59.0
12-
github.com/jfrog/jfrog-client-go v1.54.1
11+
github.com/jfrog/jfrog-cli-core/v2 v2.59.2
12+
github.com/jfrog/jfrog-client-go v1.54.2
1313
github.com/pkg/errors v0.9.1
1414
github.com/secure-systems-lab/go-securesystemslib v0.8.0
1515
github.com/spf13/viper v1.19.0
1616
github.com/stretchr/testify v1.10.0
1717
github.com/urfave/cli v1.22.16
1818
go.uber.org/mock v0.4.0
19-
golang.org/x/crypto v0.36.0
19+
golang.org/x/crypto v0.37.0
2020
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394
2121
golang.org/x/mod v0.24.0
2222
gopkg.in/ini.v1 v1.67.0
2323
)
2424

25-
require golang.org/x/net v0.38.0 // indirect
25+
require golang.org/x/net v0.39.0 // indirect
2626

2727
require (
2828
dario.cat/mergo v1.0.1 // indirect
@@ -46,7 +46,7 @@ require (
4646
github.com/gfleury/go-bitbucket-v1 v0.0.0-20230825095122-9bc1711434ab // indirect
4747
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
4848
github.com/go-git/go-billy/v5 v5.6.2 // indirect
49-
github.com/go-git/go-git/v5 v5.14.0 // indirect
49+
github.com/go-git/go-git/v5 v5.16.0 // indirect
5050
github.com/go-logr/logr v1.4.2 // indirect
5151
github.com/go-logr/zapr v1.3.0 // indirect
5252
github.com/gocarina/gocsv v0.0.0-20240520201108-78e41c74b4b1 // indirect
@@ -113,10 +113,10 @@ require (
113113
go.uber.org/multierr v1.11.0 // indirect
114114
go.uber.org/zap v1.27.0 // indirect
115115
golang.org/x/oauth2 v0.23.0 // indirect
116-
golang.org/x/sync v0.12.0 // indirect
117-
golang.org/x/sys v0.31.0 // indirect
118-
golang.org/x/term v0.30.0 // indirect
119-
golang.org/x/text v0.23.0 // indirect
116+
golang.org/x/sync v0.13.0 // indirect
117+
golang.org/x/sys v0.32.0 // indirect
118+
golang.org/x/term v0.31.0 // indirect
119+
golang.org/x/text v0.24.0 // indirect
120120
golang.org/x/time v0.7.0 // indirect
121121
gopkg.in/inf.v0 v0.9.1 // indirect
122122
gopkg.in/warnings.v0 v0.1.2 // indirect
@@ -132,8 +132,8 @@ require (
132132
sigs.k8s.io/yaml v1.4.0 // indirect
133133
)
134134

135-
replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250619122826-54ff6f65b128
135+
// replace github.com/jfrog/jfrog-cli-core/v2 => github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250619122826-54ff6f65b128
136136

137-
replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250623080810-85bcce028748
137+
// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20250623080810-85bcce028748
138138

139139
//replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240811142930-ab9715567376

go.sum

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UN
7575
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
7676
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
7777
github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
78-
github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
79-
github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
78+
github.com/go-git/go-git/v5 v5.16.0 h1:k3kuOEpkc0DeY7xlL6NaaNg39xdgQbtH5mwCafHO9AQ=
79+
github.com/go-git/go-git/v5 v5.16.0/go.mod h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
8080
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
8181
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
8282
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
@@ -133,14 +133,14 @@ github.com/jfrog/archiver/v3 v3.6.1 h1:LOxnkw9pOn45DzCbZNFV6K0+6dCsQ0L8mR3ZcujO5
133133
github.com/jfrog/archiver/v3 v3.6.1/go.mod h1:VgR+3WZS4N+i9FaDwLZbq+jeU4B4zctXL+gL4EMzfLw=
134134
github.com/jfrog/build-info-go v1.10.14 h1:PWnw+rBwiQTHZ5q+84+E8MHFjtAQkB3+Oc2sKwBSSGE=
135135
github.com/jfrog/build-info-go v1.10.14/go.mod h1:JcISnovFXKx3wWf3p1fcMmlPdt6adxScXvoJN4WXqIE=
136-
github.com/jfrog/froggit-go v1.17.0 h1:20Ie787WO27SwB2MOHDvsR6yN7fA5WfRnuAbmUqz1Zs=
137-
github.com/jfrog/froggit-go v1.17.0/go.mod h1:HvDkfFfJwIdsXFdqaB+utvD2cLDRmaC3kF8otYb6Chw=
136+
github.com/jfrog/froggit-go v1.18.0 h1:1tm3Q6Qc+dSPgzpGyBXfxBPFuX6L9pk6eENdF7RQq+Y=
137+
github.com/jfrog/froggit-go v1.18.0/go.mod h1:SE3jF0+XRKNuC1a6CzHxtU5nBRnyKg1jzDjUXxqu92g=
138138
github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s=
139139
github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4=
140-
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250619122826-54ff6f65b128 h1:SdNS8Z1H1c1wgtHxZJNjLf9cWx+zdfXDQPmjUwQ55Bo=
141-
github.com/jfrog/jfrog-cli-core/v2 v2.31.1-0.20250619122826-54ff6f65b128/go.mod h1:JDMYJHxU3W0/jaiiSljHLAcd0QeEGwpAwsnOqVR8c/0=
142-
github.com/jfrog/jfrog-client-go v1.28.1-0.20250623080810-85bcce028748 h1:299KpOItnMAdW2ZmWrqn4+j1dEemNWSX/PHq6C+IVQA=
143-
github.com/jfrog/jfrog-client-go v1.28.1-0.20250623080810-85bcce028748/go.mod h1:1v0eih4thdPA4clBo9TuvAMT25sGDr1IQJ81DXQ/lBY=
140+
github.com/jfrog/jfrog-cli-core/v2 v2.59.2 h1:4ES0emTZZjfUHSCTBTK939GtKYWsrclm7bHk2ig/dkk=
141+
github.com/jfrog/jfrog-cli-core/v2 v2.59.2/go.mod h1:pcAx7PFOLiw82c6fBDJw3BfIfUQdoHsxWd5u/XH9XEM=
142+
github.com/jfrog/jfrog-client-go v1.54.2 h1:z7GjCyIbV5Wx35USVDCF/0vf/fCWki++pZ7lcKt0gj0=
143+
github.com/jfrog/jfrog-client-go v1.54.2/go.mod h1:1v0eih4thdPA4clBo9TuvAMT25sGDr1IQJ81DXQ/lBY=
144144
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
145145
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
146146
github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k=
@@ -315,8 +315,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
315315
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
316316
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
317317
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
318-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
319-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
318+
golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE=
319+
golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc=
320320
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw=
321321
golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM=
322322
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -339,8 +339,8 @@ golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
339339
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
340340
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
341341
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
342-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
343-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
342+
golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY=
343+
golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E=
344344
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
345345
golang.org/x/oauth2 v0.20.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
346346
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
@@ -351,8 +351,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
351351
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
352352
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
353353
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
354-
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
355-
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
354+
golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610=
355+
golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
356356
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
357357
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
358358
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -380,25 +380,25 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
380380
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
381381
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
382382
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
383-
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
384-
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
383+
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
384+
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
385385
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
386386
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
387387
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
388388
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
389389
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
390390
golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
391-
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
392-
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
391+
golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o=
392+
golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw=
393393
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
394394
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
395395
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
396396
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
397397
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
398398
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
399399
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
400-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
401-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
400+
golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0=
401+
golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU=
402402
golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ=
403403
golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
404404
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=

0 commit comments

Comments
 (0)