Skip to content

Commit d549658

Browse files
committed
replace golangci-lint with staticcheck, errcheck and unparam
Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
1 parent c7f96eb commit d549658

83 files changed

Lines changed: 475 additions & 454 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.errcheck-excludes

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Functions whose returned error carries no decision: writes to an in-memory
2+
# buffer, which cannot fail, and resource teardown, where the caller has
3+
# already given up the resource. Every other discarded error is written as an
4+
# explicit blank assignment at the call site.
5+
6+
# writes that cannot fail
7+
(bytes.Buffer).WriteString
8+
(hash.Hash).Write
9+
(strings.Builder).Write
10+
(strings.Builder).WriteByte
11+
(strings.Builder).WriteString
12+
fmt.Fprintf
13+
fmt.Printf
14+
fmt.Println
15+
16+
# resource teardown
17+
(*cloud.google.com/go/storage.Reader).Close
18+
(*database/sql.Conn).Close
19+
(*database/sql.Rows).Close
20+
(*database/sql.Stmt).Close
21+
(*database/sql.Tx).Rollback
22+
(*github.com/drakkan/sftpgo/v2/internal/common.BaseConnection).CloseFS
23+
(*github.com/drakkan/sftpgo/v2/internal/common.DirListerAt).Close
24+
(*github.com/drakkan/sftpgo/v2/internal/dataprovider.User).CloseFs
25+
(*github.com/drakkan/sftpgo/v2/internal/httpd.Connection).CloseFS
26+
(*github.com/drakkan/sftpgo/v2/internal/sftpd.Connection).CloseFS
27+
(*github.com/drakkan/sftpgo/v2/internal/sftpd.transfer).Close
28+
(*github.com/drakkan/sftpgo/v2/internal/vfs.SFTPFs).Close
29+
(*github.com/pkg/sftp.File).Close
30+
(*github.com/pkg/sftp.RequestServer).Close
31+
(*gocloud.dev/secrets.Keeper).Close
32+
(*golang.org/x/crypto/ssh.Client).Close
33+
(*golang.org/x/crypto/ssh.ServerConn).Close
34+
(*golang.org/x/sys/windows/svc/mgr.Mgr).Disconnect
35+
(*golang.org/x/sys/windows/svc/mgr.Service).Close
36+
(*io.PipeWriter).Close
37+
(*mime/multipart.Form).RemoveAll
38+
(*mime/multipart.Writer).Close
39+
(*os.File).Close
40+
(github.com/drakkan/sftpgo/v2/internal/dataprovider.User).CloseFs
41+
(github.com/drakkan/sftpgo/v2/internal/vfs.DirLister).Close
42+
(github.com/drakkan/sftpgo/v2/internal/vfs.Fs).Close
43+
(github.com/drakkan/sftpgo/v2/internal/vfs.PipeWriter).Close
44+
(github.com/drakkan/sftpgo/v2/internal/vfs.pipeReaderAt).Close
45+
(github.com/drakkan/sftpgo/v2/internal/vfs.pipeReaderAt).CloseWithError
46+
(github.com/drakkan/sftpgo/v2/internal/vfs.pipeWriterAt).Close
47+
(github.com/drakkan/sftpgo/v2/internal/vfs.pipeWriterAt).CloseWithError
48+
(io.Closer).Close
49+
(io.ReadCloser).Close
50+
(io.ReadWriteCloser).Close
51+
(io.WriteCloser).Close
52+
(mime/multipart.File).Close
53+
(net.Conn).Close
54+
(net.Listener).Close
55+
(net/http.File).Close
56+
57+
# Close promoted from an embedded type: errcheck names the declaring type
58+
(golang.org/x/crypto/ssh.Conn).Close

.github/workflows/development.yml

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -547,16 +547,42 @@ jobs:
547547
name: sftpgo-${{ steps.build_linux_pkgs.outputs.pkg-version }}-${{ matrix.go-arch }}-rpm
548548
path: pkgs/dist/rpm/*
549549

550-
golangci-lint:
551-
name: golangci-lint
550+
lint:
551+
name: lint
552552
runs-on: ubuntu-latest
553+
553554
steps:
555+
- uses: actions/checkout@v7
556+
554557
- name: Set up Go
555558
uses: actions/setup-go@v7
556559
with:
557560
go-version: '1.26'
558-
- uses: actions/checkout@v7
559-
- name: Run golangci-lint
560-
uses: golangci/golangci-lint-action@v9
561-
with:
562-
version: latest
561+
562+
- name: Lint
563+
run: |
564+
export PATH="$(go env GOPATH)/bin:$PATH"
565+
go install honnef.co/go/tools/cmd/staticcheck@v0.8.1
566+
go install github.com/kisielk/errcheck@v1.20.0
567+
go install mvdan.cc/unparam@v0.0.0-20260823230713-2fa3d841b0c8
568+
569+
set +e
570+
rc=0
571+
flags="-ignoretests -exclude .errcheck-excludes"
572+
573+
echo "==> go vet"; go vet ./... || rc=1
574+
echo "==> staticcheck"; staticcheck ./... || rc=1
575+
echo "==> errcheck"; errcheck $flags ./... || rc=1
576+
echo "==> unparam"
577+
out=$(unparam -tests ./... | grep -vFf .unparam-excludes)
578+
[ -z "$out" ] || { echo "$out"; rc=1; }
579+
580+
echo "==> go vet (windows)"; GOOS=windows go vet ./... || rc=1
581+
echo "==> staticcheck (windows)"; GOOS=windows staticcheck ./... || rc=1
582+
echo "==> errcheck (windows)"; GOOS=windows errcheck $flags ./... || rc=1
583+
584+
echo "==> gofmt"
585+
out=$(gofmt -s -l .)
586+
[ -z "$out" ] || { echo "$out"; rc=1; }
587+
588+
exit $rc

.golangci.yml

Lines changed: 0 additions & 65 deletions
This file was deleted.

.unparam-excludes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
streamJSONArray - chunkSize always receives

internal/cmd/install_windows.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ func getCustomServeFlags() []string {
103103
result = append(result, "--"+logLevelFlag)
104104
result = append(result, logLevel)
105105
}
106-
if logUTCTime != defaultLogUTCTime {
106+
if logUTCTime {
107107
result = append(result, "--"+logUTCTimeFlag+"=true")
108108
}
109-
if logCompress != defaultLogCompress {
109+
if logCompress {
110110
result = append(result, "--"+logCompressFlag+"=true")
111111
}
112112
if graceTime != defaultGraceTime {

internal/cmd/resetpwd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ Please take a look at the usage below to customize the options.`,
122122
func init() {
123123
addConfigFlags(resetPwdCmd)
124124
resetPwdCmd.Flags().StringVar(&resetPwdAdmin, "admin", "", `Administrator username whose password to reset`)
125-
resetPwdCmd.MarkFlagRequired("admin") //nolint:errcheck
125+
_ = resetPwdCmd.MarkFlagRequired("admin")
126126

127127
rootCmd.AddCommand(resetPwdCmd)
128128
}

internal/cmd/root.go

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ func Execute() {
111111

112112
func addConfigFlags(cmd *cobra.Command) {
113113
viper.SetDefault(configDirKey, defaultConfigDir)
114-
viper.BindEnv(configDirKey, "SFTPGO_CONFIG_DIR") //nolint:errcheck // err is not nil only if the key to bind is missing
114+
_ = viper.BindEnv(configDirKey, "SFTPGO_CONFIG_DIR") // err is not nil only if the key to bind is missing
115115
cmd.Flags().StringVarP(&configDir, configDirFlag, "c", viper.GetString(configDirKey),
116116
`Location of the config dir. This directory
117117
is used as the base for files with a relative
@@ -127,10 +127,10 @@ file name is "sftpgo" and therefore
127127
searched.
128128
This flag can be set using SFTPGO_CONFIG_DIR
129129
env var too.`)
130-
viper.BindPFlag(configDirKey, cmd.Flags().Lookup(configDirFlag)) //nolint:errcheck
130+
_ = viper.BindPFlag(configDirKey, cmd.Flags().Lookup(configDirFlag))
131131

132132
viper.SetDefault(configFileKey, defaultConfigFile)
133-
viper.BindEnv(configFileKey, "SFTPGO_CONFIG_FILE") //nolint:errcheck
133+
_ = viper.BindEnv(configFileKey, "SFTPGO_CONFIG_FILE")
134134
cmd.Flags().StringVar(&configFile, configFileFlag, viper.GetString(configFileKey),
135135
`Path to SFTPGo configuration file.
136136
This flag explicitly defines the path, name
@@ -141,12 +141,12 @@ name must have a supported extension (JSON,
141141
YAML, TOML, HCL or Java properties).
142142
This flag can be set using SFTPGO_CONFIG_FILE
143143
env var too.`)
144-
viper.BindPFlag(configFileKey, cmd.Flags().Lookup(configFileFlag)) //nolint:errcheck
144+
_ = viper.BindPFlag(configFileKey, cmd.Flags().Lookup(configFileFlag))
145145
}
146146

147147
func addBaseLoadDataFlags(cmd *cobra.Command) {
148148
viper.SetDefault(loadDataFromKey, defaultLoadDataFrom)
149-
viper.BindEnv(loadDataFromKey, "SFTPGO_LOADDATA_FROM") //nolint:errcheck
149+
_ = viper.BindEnv(loadDataFromKey, "SFTPGO_LOADDATA_FROM")
150150
cmd.Flags().StringVar(&loadDataFrom, loadDataFromFlag, viper.GetString(loadDataFromKey),
151151
`Load users and folders from this file.
152152
The file must be specified as absolute path
@@ -155,10 +155,10 @@ the "dumpdata" REST API or compatible content.
155155
This flag can be set using SFTPGO_LOADDATA_FROM
156156
env var too.
157157
`)
158-
viper.BindPFlag(loadDataFromKey, cmd.Flags().Lookup(loadDataFromFlag)) //nolint:errcheck
158+
_ = viper.BindPFlag(loadDataFromKey, cmd.Flags().Lookup(loadDataFromFlag))
159159

160160
viper.SetDefault(loadDataModeKey, defaultLoadDataMode)
161-
viper.BindEnv(loadDataModeKey, "SFTPGO_LOADDATA_MODE") //nolint:errcheck
161+
_ = viper.BindEnv(loadDataModeKey, "SFTPGO_LOADDATA_MODE")
162162
cmd.Flags().IntVar(&loadDataMode, loadDataModeFlag, viper.GetInt(loadDataModeKey),
163163
`Restore mode for data to load:
164164
0 - new users are added, existing users are
@@ -168,71 +168,71 @@ env var too.
168168
This flag can be set using SFTPGO_LOADDATA_MODE
169169
env var too.
170170
`)
171-
viper.BindPFlag(loadDataModeKey, cmd.Flags().Lookup(loadDataModeFlag)) //nolint:errcheck
171+
_ = viper.BindPFlag(loadDataModeKey, cmd.Flags().Lookup(loadDataModeFlag))
172172

173173
viper.SetDefault(loadDataCleanKey, defaultLoadDataClean)
174-
viper.BindEnv(loadDataCleanKey, "SFTPGO_LOADDATA_CLEAN") //nolint:errcheck
174+
_ = viper.BindEnv(loadDataCleanKey, "SFTPGO_LOADDATA_CLEAN")
175175
cmd.Flags().BoolVar(&loadDataClean, loadDataCleanFlag, viper.GetBool(loadDataCleanKey),
176176
`Determine if the loaddata-from file should
177177
be removed after a successful load. This flag
178178
can be set using SFTPGO_LOADDATA_CLEAN env var
179179
too. (default "false")
180180
`)
181-
viper.BindPFlag(loadDataCleanKey, cmd.Flags().Lookup(loadDataCleanFlag)) //nolint:errcheck
181+
_ = viper.BindPFlag(loadDataCleanKey, cmd.Flags().Lookup(loadDataCleanFlag))
182182
}
183183

184184
func addServeFlags(cmd *cobra.Command) {
185185
addConfigFlags(cmd)
186186

187187
viper.SetDefault(logFilePathKey, defaultLogFile)
188-
viper.BindEnv(logFilePathKey, "SFTPGO_LOG_FILE_PATH") //nolint:errcheck
188+
_ = viper.BindEnv(logFilePathKey, "SFTPGO_LOG_FILE_PATH")
189189
cmd.Flags().StringVarP(&logFilePath, logFilePathFlag, "l", viper.GetString(logFilePathKey),
190190
`Location for the log file. Leave empty to write
191191
logs to the standard output. This flag can be
192192
set using SFTPGO_LOG_FILE_PATH env var too.
193193
`)
194-
viper.BindPFlag(logFilePathKey, cmd.Flags().Lookup(logFilePathFlag)) //nolint:errcheck
194+
_ = viper.BindPFlag(logFilePathKey, cmd.Flags().Lookup(logFilePathFlag))
195195

196196
viper.SetDefault(logMaxSizeKey, defaultLogMaxSize)
197-
viper.BindEnv(logMaxSizeKey, "SFTPGO_LOG_MAX_SIZE") //nolint:errcheck
197+
_ = viper.BindEnv(logMaxSizeKey, "SFTPGO_LOG_MAX_SIZE")
198198
cmd.Flags().IntVarP(&logMaxSize, logMaxSizeFlag, "s", viper.GetInt(logMaxSizeKey),
199199
`Maximum size in megabytes of the log file
200200
before it gets rotated. This flag can be set
201201
using SFTPGO_LOG_MAX_SIZE env var too. It is
202202
unused if log-file-path is empty.
203203
`)
204-
viper.BindPFlag(logMaxSizeKey, cmd.Flags().Lookup(logMaxSizeFlag)) //nolint:errcheck
204+
_ = viper.BindPFlag(logMaxSizeKey, cmd.Flags().Lookup(logMaxSizeFlag))
205205

206206
viper.SetDefault(logMaxBackupKey, defaultLogMaxBackup)
207-
viper.BindEnv(logMaxBackupKey, "SFTPGO_LOG_MAX_BACKUPS") //nolint:errcheck
207+
_ = viper.BindEnv(logMaxBackupKey, "SFTPGO_LOG_MAX_BACKUPS")
208208
cmd.Flags().IntVarP(&logMaxBackups, "log-max-backups", "b", viper.GetInt(logMaxBackupKey),
209209
`Maximum number of old log files to retain.
210210
This flag can be set using SFTPGO_LOG_MAX_BACKUPS
211211
env var too. It is unused if log-file-path is
212212
empty.`)
213-
viper.BindPFlag(logMaxBackupKey, cmd.Flags().Lookup(logMaxBackupFlag)) //nolint:errcheck
213+
_ = viper.BindPFlag(logMaxBackupKey, cmd.Flags().Lookup(logMaxBackupFlag))
214214

215215
viper.SetDefault(logMaxAgeKey, defaultLogMaxAge)
216-
viper.BindEnv(logMaxAgeKey, "SFTPGO_LOG_MAX_AGE") //nolint:errcheck
216+
_ = viper.BindEnv(logMaxAgeKey, "SFTPGO_LOG_MAX_AGE")
217217
cmd.Flags().IntVarP(&logMaxAge, "log-max-age", "a", viper.GetInt(logMaxAgeKey),
218218
`Maximum number of days to retain old log files.
219219
This flag can be set using SFTPGO_LOG_MAX_AGE env
220220
var too. It is unused if log-file-path is empty.
221221
`)
222-
viper.BindPFlag(logMaxAgeKey, cmd.Flags().Lookup(logMaxAgeFlag)) //nolint:errcheck
222+
_ = viper.BindPFlag(logMaxAgeKey, cmd.Flags().Lookup(logMaxAgeFlag))
223223

224224
viper.SetDefault(logCompressKey, defaultLogCompress)
225-
viper.BindEnv(logCompressKey, "SFTPGO_LOG_COMPRESS") //nolint:errcheck
225+
_ = viper.BindEnv(logCompressKey, "SFTPGO_LOG_COMPRESS")
226226
cmd.Flags().BoolVarP(&logCompress, logCompressFlag, "z", viper.GetBool(logCompressKey),
227227
`Determine if the rotated log files
228228
should be compressed using gzip. This flag can
229229
be set using SFTPGO_LOG_COMPRESS env var too.
230230
It is unused if log-file-path is empty.
231231
`)
232-
viper.BindPFlag(logCompressKey, cmd.Flags().Lookup(logCompressFlag)) //nolint:errcheck
232+
_ = viper.BindPFlag(logCompressKey, cmd.Flags().Lookup(logCompressFlag))
233233

234234
viper.SetDefault(logLevelKey, defaultLogLevel)
235-
viper.BindEnv(logLevelKey, "SFTPGO_LOG_LEVEL") //nolint:errcheck
235+
_ = viper.BindEnv(logLevelKey, "SFTPGO_LOG_LEVEL")
236236
cmd.Flags().StringVar(&logLevel, logLevelFlag, viper.GetString(logLevelKey),
237237
`Set the log level. Supported values:
238238
@@ -241,20 +241,20 @@ debug, info, warn, error.
241241
This flag can be set
242242
using SFTPGO_LOG_LEVEL env var too.
243243
`)
244-
viper.BindPFlag(logLevelKey, cmd.Flags().Lookup(logLevelFlag)) //nolint:errcheck
244+
_ = viper.BindPFlag(logLevelKey, cmd.Flags().Lookup(logLevelFlag))
245245

246246
viper.SetDefault(logUTCTimeKey, defaultLogUTCTime)
247-
viper.BindEnv(logUTCTimeKey, "SFTPGO_LOG_UTC_TIME") //nolint:errcheck
247+
_ = viper.BindEnv(logUTCTimeKey, "SFTPGO_LOG_UTC_TIME")
248248
cmd.Flags().BoolVar(&logUTCTime, logUTCTimeFlag, viper.GetBool(logUTCTimeKey),
249249
`Use UTC time for logging. This flag can be set
250250
using SFTPGO_LOG_UTC_TIME env var too.
251251
`)
252-
viper.BindPFlag(logUTCTimeKey, cmd.Flags().Lookup(logUTCTimeFlag)) //nolint:errcheck
252+
_ = viper.BindPFlag(logUTCTimeKey, cmd.Flags().Lookup(logUTCTimeFlag))
253253

254254
addBaseLoadDataFlags(cmd)
255255

256256
viper.SetDefault(loadDataQuotaScanKey, defaultLoadDataQuotaScan)
257-
viper.BindEnv(loadDataQuotaScanKey, "SFTPGO_LOADDATA_QUOTA_SCAN") //nolint:errcheck
257+
_ = viper.BindEnv(loadDataQuotaScanKey, "SFTPGO_LOADDATA_QUOTA_SCAN")
258258
cmd.Flags().IntVar(&loadDataQuotaScan, loadDataQuotaScanFlag, viper.GetInt(loadDataQuotaScanKey),
259259
`Quota scan mode after data load:
260260
0 - no quota scan
@@ -263,10 +263,10 @@ using SFTPGO_LOG_UTC_TIME env var too.
263263
This flag can be set using SFTPGO_LOADDATA_QUOTA_SCAN
264264
env var too.
265265
(default 0)`)
266-
viper.BindPFlag(loadDataQuotaScanKey, cmd.Flags().Lookup(loadDataQuotaScanFlag)) //nolint:errcheck
266+
_ = viper.BindPFlag(loadDataQuotaScanKey, cmd.Flags().Lookup(loadDataQuotaScanFlag))
267267

268268
viper.SetDefault(graceTimeKey, defaultGraceTime)
269-
viper.BindEnv(graceTimeKey, "SFTPGO_GRACE_TIME") //nolint:errcheck
269+
_ = viper.BindEnv(graceTimeKey, "SFTPGO_GRACE_TIME")
270270
cmd.Flags().IntVar(&graceTime, graceTimeFlag, viper.GetInt(graceTimeKey),
271271
`Graceful shutdown is an option to initiate a
272272
shutdown without abrupt cancellation of the
@@ -279,5 +279,5 @@ A graceful shutdown is triggered by an
279279
interrupt signal.
280280
This flag can be set using SFTPGO_GRACE_TIME env
281281
var too. 0 means disabled. (default 0)`)
282-
viper.BindPFlag(graceTimeKey, cmd.Flags().Lookup(graceTimeFlag)) //nolint:errcheck
282+
_ = viper.BindPFlag(graceTimeKey, cmd.Flags().Lookup(graceTimeFlag))
283283
}

internal/cmd/serve.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func setBoolFromEnv(receiver *bool, val string) {
8686
}
8787
}
8888

89-
func checkServeParamsFromEnvFiles(configDir string) { //nolint:gocyclo
89+
func checkServeParamsFromEnvFiles(configDir string) {
9090
// The logger is not yet initialized here, we have no way to report errors.
9191
envd := filepath.Join(configDir, "env.d")
9292
entries, err := os.ReadDir(envd)

internal/cmd/smtptest.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ If the SMTP configuration is correct you should receive this email.`,
7070
func init() {
7171
addConfigFlags(smtpTestCmd)
7272
smtpTestCmd.Flags().StringVar(&smtpTestRecipient, "recipient", "", `email address to send the test e-mail to`)
73-
smtpTestCmd.MarkFlagRequired("recipient") //nolint:errcheck
73+
_ = smtpTestCmd.MarkFlagRequired("recipient")
7474

7575
rootCmd.AddCommand(smtpTestCmd)
7676
}

0 commit comments

Comments
 (0)