Skip to content

Commit ffb2c34

Browse files
paketeserranoscop
andauthored
fix: linter rules (#708)
Co-authored-by: Ville Skyttä <ville.skytta@upcloud.com>
1 parent d08f5dd commit ffb2c34

10 files changed

Lines changed: 48 additions & 43 deletions

File tree

internal/commands/account/token/create_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func TestCreateToken(t *testing.T) {
3838
AllowedIPRanges: nil,
3939
},
4040
resp: &upcloud.Token{
41-
APIToken: "ucat_01JH5D3ZZJVZS6JC713FA11CB8",
41+
APIToken: "test-token",
4242
ID: "0cd8eab4-ecb7-445b-a457-6019b0a00496",
4343
Name: "test",
4444
Type: "workspace",

internal/commands/server/firewall/show.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,20 +159,20 @@ func formatMatch(address fwRuleAddress) string {
159159
if ipStart.Equal(ipStop) {
160160
// TODO: ermm, reimplement.. when we figure out if this is really needed + how to do it
161161
// sb.WriteString(ui.DefaultAddressColours.Sprint(ipStart))
162-
sb.WriteString(fmt.Sprint(ipStart))
162+
fmt.Fprint(&sb, ipStart)
163163
} else {
164164
// sb.WriteString(ui.DefaultAddressColours.Sprintf("%s →\n%s", ipStart, ipStop))
165-
sb.WriteString(fmt.Sprintf("%s →\n%s", ipStart, ipStop))
165+
fmt.Fprintf(&sb, "%s →\n%s", ipStart, ipStop)
166166
}
167167
}
168168
if address.PortStart != "" {
169169
if ipStart != nil {
170170
sb.WriteString("\n")
171171
}
172172
if address.PortStart == address.PortEnd {
173-
sb.WriteString(fmt.Sprintf("port: %s", address.PortStart))
173+
fmt.Fprintf(&sb, "port: %s", address.PortStart)
174174
} else {
175-
sb.WriteString(fmt.Sprintf("port: %s → %s", address.PortStart, address.PortEnd))
175+
fmt.Fprintf(&sb, "port: %s → %s", address.PortStart, address.PortEnd)
176176
}
177177
}
178178
return sb.String()

internal/commands/stack/dokku/dokku.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func (s *deployDokkuCommand) deploy(exec commands.Executor, configDir string) er
143143
return err
144144
}
145145
defer func(name string) {
146-
errRemove := os.Remove(name)
146+
errRemove := os.Remove(name) //gosec:disable G703 -- temp path is created by os.CreateTemp above
147147
if errRemove != nil {
148148
fmt.Printf("failed to remove temp file %s: %v\n", name, errRemove)
149149
}

internal/commands/stack/helm.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ func UninstallHelmRelease(releaseName, logDir string) error {
327327
}
328328

329329
if resp != nil {
330-
fmt.Fprintf(logFile, "Uninstalled release %q: %s\n", releaseName, resp.Info)
330+
fmt.Fprintf(logFile, "Uninstalled release %q: %s\n", releaseName, resp.Info) //gosec:disable G705 -- writes to local log file, not HTML
331331
}
332332

333333
return nil

internal/commands/stack/starterkit/starterkit.go

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,13 @@ func buildSummary(
139139
// Kubernetes
140140
b.WriteString("KUBERNETES CLUSTER\n")
141141
if cluster != nil {
142-
b.WriteString(fmt.Sprintf(" Name: %s\n", cluster.Name))
143-
b.WriteString(fmt.Sprintf(" UUID: %s\n", cluster.UUID))
144-
b.WriteString(fmt.Sprintf(" Zone: %s\n", cluster.Zone))
145-
b.WriteString(fmt.Sprintf(" Network: %s\n", cluster.Network))
142+
fmt.Fprintf(&b, " Name: %s\n", cluster.Name)
143+
fmt.Fprintf(&b, " UUID: %s\n", cluster.UUID)
144+
fmt.Fprintf(&b, " Zone: %s\n", cluster.Zone)
145+
fmt.Fprintf(&b, " Network: %s\n", cluster.Network)
146146
if kubeconfigPath != "" {
147-
b.WriteString(fmt.Sprintf(" Kubeconfig: %s\n", kubeconfigPath))
148-
b.WriteString(fmt.Sprintf(" Set env: export KUBECONFIG=%s\n", kubeconfigPath))
147+
fmt.Fprintf(&b, " Kubeconfig: %s\n", kubeconfigPath)
148+
fmt.Fprintf(&b, " Set env: export KUBECONFIG=%s\n", kubeconfigPath)
149149
b.WriteString(" Test: kubectl get nodes\n")
150150
b.WriteString(" Ingress LB: kubectl -n ingress-nginx get svc ingress-nginx-controller -o jsonpath='{.status.loadBalancer.ingress[0].hostname}{\"\\n\"}'\n")
151151
}
@@ -155,9 +155,9 @@ func buildSummary(
155155
// Network & Router
156156
b.WriteString("NETWORKING\n")
157157
if network != nil {
158-
b.WriteString(fmt.Sprintf(" Network: %s (UUID: %s)\n", network.Name, network.UUID))
158+
fmt.Fprintf(&b, " Network: %s (UUID: %s)\n", network.Name, network.UUID)
159159
if len(network.IPNetworks) > 0 {
160-
b.WriteString(fmt.Sprintf(" CIDR: %s\n", network.IPNetworks[0].Address))
160+
fmt.Fprintf(&b, " CIDR: %s\n", network.IPNetworks[0].Address)
161161
if network.IPNetworks[0].DHCP == upcloud.True {
162162
b.WriteString(" DHCP: enabled\n")
163163
} else {
@@ -166,17 +166,17 @@ func buildSummary(
166166
}
167167
}
168168
if router != nil {
169-
b.WriteString(fmt.Sprintf(" Router: %s (UUID: %s)\n", router.Name, router.UUID))
169+
fmt.Fprintf(&b, " Router: %s (UUID: %s)\n", router.Name, router.UUID)
170170
}
171171
b.WriteString("\n")
172172

173173
// Managed Database
174174
b.WriteString("MANAGED DATABASE\n")
175175
if db != nil {
176-
b.WriteString(fmt.Sprintf(" Name: %s (UUID: %s)\n", db.Title, db.UUID))
177-
b.WriteString(fmt.Sprintf(" Type/Plan: %s / %s\n", db.Type, db.Plan))
178-
b.WriteString(fmt.Sprintf(" State: %s\n", db.State))
179-
b.WriteString(fmt.Sprintf(" ServiceURI: %s\n", db.ServiceURI))
176+
fmt.Fprintf(&b, " Name: %s (UUID: %s)\n", db.Title, db.UUID)
177+
fmt.Fprintf(&b, " Type/Plan: %s / %s\n", db.Type, db.Plan)
178+
fmt.Fprintf(&b, " State: %s\n", db.State)
179+
fmt.Fprintf(&b, " ServiceURI: %s\n", db.ServiceURI)
180180
} else {
181181
b.WriteString(" (not created)\n")
182182
}
@@ -185,25 +185,25 @@ func buildSummary(
185185
// Managed Object Storage
186186
b.WriteString("OBJECT STORAGE\n")
187187
if obj != nil {
188-
b.WriteString(fmt.Sprintf(" Name: %s (UUID: %s)\n", obj.Name, obj.UUID))
189-
b.WriteString(fmt.Sprintf(" Region: %s\n", obj.Region))
190-
b.WriteString(fmt.Sprintf(" State: %s\n", obj.OperationalState))
188+
fmt.Fprintf(&b, " Name: %s (UUID: %s)\n", obj.Name, obj.UUID)
189+
fmt.Fprintf(&b, " Region: %s\n", obj.Region)
190+
fmt.Fprintf(&b, " State: %s\n", obj.OperationalState)
191191

192192
// If API provides endpoint(s)
193193
if len(obj.Endpoints) > 0 {
194-
b.WriteString(fmt.Sprintf(" DomainName: %s\n", obj.Endpoints[0].DomainName))
195-
b.WriteString(fmt.Sprintf(" Type: %s\n", obj.Endpoints[0].Type))
196-
b.WriteString(fmt.Sprintf(" IAMURL: %s\n", obj.Endpoints[0].IAMURL))
197-
b.WriteString(fmt.Sprintf(" STSURL: %s\n", obj.Endpoints[0].STSURL))
194+
fmt.Fprintf(&b, " DomainName: %s\n", obj.Endpoints[0].DomainName)
195+
fmt.Fprintf(&b, " Type: %s\n", obj.Endpoints[0].Type)
196+
fmt.Fprintf(&b, " IAMURL: %s\n", obj.Endpoints[0].IAMURL)
197+
fmt.Fprintf(&b, " STSURL: %s\n", obj.Endpoints[0].STSURL)
198198
}
199199
// If bucket was created
200200
if objBucket != "" {
201-
b.WriteString(fmt.Sprintf(" Bucket: %s\n", objBucket))
201+
fmt.Fprintf(&b, " Bucket: %s\n", objBucket)
202202
}
203203
// If access key was created
204204
if objAcc != nil {
205-
b.WriteString(fmt.Sprintf(" AccessKey: %s\n", objAcc.AccessKeyID))
206-
b.WriteString(fmt.Sprintf(" SecretKey: %s\n", *objAcc.SecretAccessKey))
205+
fmt.Fprintf(&b, " AccessKey: %s\n", objAcc.AccessKeyID)
206+
fmt.Fprintf(&b, " SecretKey: %s\n", *objAcc.SecretAccessKey)
207207
}
208208
} else {
209209
b.WriteString(" (not created)\n")
@@ -232,7 +232,7 @@ func buildSummary(
232232
// Final tips
233233
b.WriteString("NEXT STEPS\n")
234234
if kubeconfigPath != "" {
235-
b.WriteString(fmt.Sprintf(" export KUBECONFIG=%s\n", kubeconfigPath))
235+
fmt.Fprintf(&b, " export KUBECONFIG=%s\n", kubeconfigPath)
236236
}
237237
b.WriteString(" Deploy ingress-nginx and your app, then point DNS (CNAME) to the LB hostname shown above.\n")
238238

internal/commands/stack/supabase/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ type SupabaseConfig struct {
2222
LbHostname string
2323
ClusterName string
2424

25-
JWTSecret string
25+
JWTSecret string //gosec:disable G117 -- field intentionally stores JWT signing secret
2626
AnonKey string
2727
ServiceRoleKey string
2828
PostgresPassword string

internal/commands/storage/import.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func (s *importCommand) ExecuteWithoutArguments(exec commands.Executor) (output.
202202
case upcloud.StorageImportSourceDirectUpload:
203203
// import from local file
204204
transferType = "upload"
205-
sourceFile, err := os.Open(parsedSource.Path)
205+
sourceFile, err := os.Open(parsedSource.Path) //gosec:disable G703 -- local source path is explicit CLI input
206206
if err != nil {
207207
return commands.HandleError(exec, msg, fmt.Errorf("cannot open local file: %w", err))
208208
}
@@ -247,7 +247,7 @@ func (s *importCommand) ExecuteWithoutArguments(exec commands.Executor) (output.
247247
// we have no knowledge of the remote file size, report bytes uploaded
248248
transferred := fmt.Sprintf("%sB", "-1")
249249
if statusUpdate.bytesTransferred <= math.MaxUint32 {
250-
transferred = ui.AbbrevNumBinaryPrefix(uint(statusUpdate.bytesTransferred)) //nolint:gosec // disable G115: false positive because value is checked
250+
transferred = ui.AbbrevNumBinaryPrefix(uint(statusUpdate.bytesTransferred)) //gosec:disable G115 -- guarded by MaxUint32 check above
251251
}
252252
exec.PushProgressUpdate(messages.Update{
253253
Key: msg,
@@ -314,7 +314,7 @@ func createStorage(exec commands.Executor, params *createParams) (upcloud.Storag
314314
}
315315

316316
func getLocalFileSize(path string) (size int64, err error) {
317-
stat, err := os.Stat(path)
317+
stat, err := os.Stat(path) //gosec:disable G703 -- local path comes from explicit CLI/file URL input
318318
if err != nil {
319319
return 0, err
320320
}

internal/config/config_test.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestConfig_LoadInvalidYAML(t *testing.T) {
1616
require.NoError(t, err)
1717
t.Cleanup(func() {
1818
assert.NoError(t, tmpFile.Close())
19-
assert.NoError(t, os.Remove(tmpFile.Name()))
19+
assert.NoError(t, os.Remove(tmpFile.Name())) //gosec:disable G703 -- temp path is created by os.CreateTemp
2020
})
2121
_, err = tmpFile.WriteString("usernamd:sdkfo\npassword: foo")
2222
require.NoError(t, err)
@@ -27,12 +27,16 @@ func TestConfig_LoadInvalidYAML(t *testing.T) {
2727
}
2828

2929
func TestConfig_Load(t *testing.T) {
30+
t.Setenv("UPCLOUD_USERNAME", "")
31+
t.Setenv("UPCLOUD_PASSWORD", "")
32+
t.Setenv("UPCLOUD_TOKEN", "")
33+
3034
cfg := New()
3135
tmpFile, err := os.CreateTemp(os.TempDir(), "")
3236
require.NoError(t, err)
3337
t.Cleanup(func() {
3438
assert.NoError(t, tmpFile.Close())
35-
assert.NoError(t, os.Remove(tmpFile.Name()))
39+
assert.NoError(t, os.Remove(tmpFile.Name())) //gosec:disable G703 -- temp path is created by os.CreateTemp
3640
})
3741
_, err = tmpFile.WriteString("username: sdkfo\npassword: foo")
3842
require.NoError(t, err)
@@ -74,13 +78,14 @@ func TestConfig_GetVersion(t *testing.T) {
7478
func TestConfig_LoadKeyring(t *testing.T) {
7579
t.Setenv("UPCLOUD_USERNAME", "")
7680
t.Setenv("UPCLOUD_PASSWORD", "")
81+
t.Setenv("UPCLOUD_TOKEN", "")
7782

7883
cfg := New()
7984
tmpFile, err := os.CreateTemp(os.TempDir(), "")
8085
require.NoError(t, err)
8186
t.Cleanup(func() {
8287
assert.NoError(t, tmpFile.Close())
83-
assert.NoError(t, os.Remove(tmpFile.Name()))
88+
assert.NoError(t, os.Remove(tmpFile.Name())) //gosec:disable G703 -- temp path is created by os.CreateTemp
8489
})
8590
_, err = tmpFile.WriteString("username: unittest")
8691
require.NoError(t, err)
@@ -91,7 +96,7 @@ func TestConfig_LoadKeyring(t *testing.T) {
9196
cfg.GlobalFlags.ConfigFile = tmpFile.Name()
9297
err = cfg.Load()
9398
require.NoError(t, err)
94-
assert.Equal(t, cfg.GetString("username"), "unittest")
99+
assert.Equal(t, "unittest", cfg.GetString("username"))
95100
assert.Equal(t, "unittest_password", cfg.GetString("password"))
96101
t.Cleanup(func() {
97102
// remove test user from keyring

internal/terminal/terminal.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func IsStderrTerminal() bool {
3030
// GetTerminalWidth tries to figure out the width of the terminal and returns it
3131
// returns 0 if there are problems in getting the width.
3232
func GetTerminalWidth() int {
33-
w, _, err := term.GetSize(int(os.Stdout.Fd()))
33+
w, _, err := term.GetSize(int(os.Stdout.Fd())) //gosec:disable G115 // file descriptors are runtime-provided small integers
3434
if err != nil {
3535
return 0
3636
}

internal/ui/usage.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,17 @@ func formatFlags(fs *pflag.FlagSet) string {
3030
}
3131
var flagText, flagUsage strings.Builder
3232
if flag.Shorthand != "" {
33-
flagText.WriteString(fmt.Sprintf("-%s, ", flag.Shorthand))
33+
fmt.Fprintf(&flagText, "-%s, ", flag.Shorthand)
3434
}
35-
flagText.WriteString(fmt.Sprintf("--%s %s", flag.Name, flag.Value.Type()))
35+
fmt.Fprintf(&flagText, "--%s %s", flag.Name, flag.Value.Type())
3636
flagUsage.WriteString(text.WrapSoft(flag.Usage, wrappingLineLength))
3737
def := flag.DefValue
3838
if strings.HasSuffix(flag.Value.Type(), "Slice") || strings.HasSuffix(flag.Value.Type(), "Array") {
3939
def = strings.TrimPrefix(def, "[")
4040
def = strings.TrimSuffix(def, "]")
4141
}
4242
if def != "" {
43-
flagUsage.WriteString(fmt.Sprintf("\nDefault: %s", def))
43+
fmt.Fprintf(&flagUsage, "\nDefault: %s", def)
4444
}
4545
t.Append(table.Row{flagText.String(), flagUsage.String()})
4646
})

0 commit comments

Comments
 (0)