]> ruderich.org/simon Gitweb - safcm/safcm.git/commitdiff
ci/run: run golangci-lint
authorSimon Ruderich <simon@ruderich.org>
Thu, 23 Dec 2021 17:21:35 +0000 (18:21 +0100)
committerSimon Ruderich <simon@ruderich.org>
Thu, 23 Dec 2021 17:21:35 +0000 (18:21 +0100)
Currently golangci-lint doesn't call all staticcheck linters:
https://github.com/golangci/golangci-lint/issues/357

20 files changed:
.golangci.yml [new file with mode: 0644]
ci/run
cmd/safcm/config/files_test.go
cmd/safcm/config/groups_test.go
cmd/safcm/config/hosts_test.go
cmd/safcm/config/permissions_test.go
cmd/safcm/config/templates_test.go
cmd/safcm/config/triggers_test.go
cmd/safcm/main_sync_test.go
cmd/safcm/sync.go
cmd/safcm/sync_sync_test.go
cmd/safcm/sync_test.go
frontend/loop.go
remote/ainsl/ainsl.go
remote/ainsl/ainsl_test.go
remote/main.go
remote/sync/files.go
remote/sync/files_test.go
rpc/conn.go
rpc/dial.go

diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644 (file)
index 0000000..13bcd7f
--- /dev/null
@@ -0,0 +1,37 @@
+linters:
+  disable-all: true
+  enable:
+    # Enabled by default
+    - deadcode
+    - errcheck
+    - gosimple
+    - govet
+    - ineffassign
+    - staticcheck
+    - structcheck
+    - typecheck
+    - unused
+    - varcheck
+    # Additional checks
+    - bodyclose
+    - contextcheck
+    - durationcheck
+    - errname
+    - exhaustive
+    - exportloopref
+    - gofmt
+    - nilerr
+    - nolintlint
+    - predeclared
+    - rowserrcheck
+    - unconvert
+    - wastedassign
+
+  issues:
+    # Don't hide potential important issues
+    exclude-use-default: false
+
+linters-settings:
+  exhaustive:
+    # "default" is good enough to be exhaustive
+    default-signifies-exhaustive: true
diff --git a/ci/run b/ci/run
index 97354dc384365dad2eea65060989f0c9af975d7f..f858a461d3559a40cd0599a2cf0f3fa4d711aafb 100755 (executable)
--- a/ci/run
+++ b/ci/run
@@ -34,6 +34,8 @@ make test $flags
 # Additional static checks only run in CI
 go install honnef.co/go/tools/cmd/staticcheck@latest
 staticcheck ./...
+go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
+golangci-lint run
 
 test -z "$(git clean -nd)" # any untracked files left?
 make clean
index 110c012a18125c3a50360586c631353547be1859..552ffb775686de733aa67ed7dba457acb14bd268 100644 (file)
@@ -39,7 +39,7 @@ func TestLoadFiles(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("../testdata/project")
        if err != nil {
index 2c9658baba4bf940942aa147b6fb78a124c1e079..a12b6fb5d446729707a2a3ed94db145183155798 100644 (file)
@@ -29,7 +29,7 @@ func TestLoadGroups(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("../testdata/project")
        if err != nil {
@@ -216,7 +216,7 @@ func TestResolveHostGroups(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("../testdata/project")
        if err != nil {
index 5d3c3342955ec494bacec29c6a622a01e0332044..4b5dcafe194d9921241a6935498bdfdb0ec75fcd 100644 (file)
@@ -29,7 +29,7 @@ func TestLoadHosts(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        sliceToHosts := func(hosts []*Host) *Hosts {
                res := &Hosts{
index 001489e903e2d6c4507c4235f92793761198a94a..de21f3c48e1b79aa91d14558db74831c8644aee5 100644 (file)
@@ -30,7 +30,7 @@ func TestLoadPermissions(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("../testdata/project")
        if err != nil {
index fd9ecb7570e24491cfdb67b5b247c17f3ff31431..3ed9bbfceda47e85d93314daf52342878b4409d5 100644 (file)
@@ -30,7 +30,7 @@ func TestLoadTemplates(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("../testdata/project")
        if err != nil {
index 63d702aeda97b9bfed0e1545771082a32a3b53e8..1997e86682061dc137fdf0a17b6f4246d8087a36 100644 (file)
@@ -30,7 +30,7 @@ func TestLoadTriggers(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("../testdata/project")
        if err != nil {
index 387caeebef07972ebbb8fce8d24097fc1d8ea4c1..64252560500590023f7f07c0e6473880da37bb62 100644 (file)
@@ -35,7 +35,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        var suffix string
        // Needs different options in sshd_config
@@ -56,7 +56,7 @@ func TestSyncSshEndToEnd(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer sshCmd.Process.Kill()
+       defer sshCmd.Process.Kill() //nolint:errcheck
 
        // Wait until SSH server is ready (up to 30 seconds)
        for i := 0; i < 30; i++ {
index 65745af55a68367d1fd4a2625f44cf3901bdb6b2..841898a3448b41cddd99ddb9de241242a854ef51 100644 (file)
@@ -65,7 +65,7 @@ func MainSync(args []string) error {
        optionSshConfig := flag.String("sshconfig", "",
                "`path` to ssh configuration file; used for tests")
 
-       flag.CommandLine.Parse(args[2:])
+       flag.CommandLine.Parse(args[2:]) //nolint:errcheck
 
        level, err := safcm.ParseLogLevel(*optionLog)
        if err != nil {
index cfa47fac38e9b50294a1e1d7a3675fd91ccfd6d1..7f478ffc0c7c465430e407fb6b562d43ce7d0703 100644 (file)
@@ -33,7 +33,7 @@ func TestHostSyncReq(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        tests := []struct {
                name      string
index 8cde5ab612e7d6aeaf967ee01943fea4ddc06c8f..10ffec1c430dca2d6961410a1bd7cccf89ddc20e 100644 (file)
@@ -29,7 +29,7 @@ func TestHostsToSync(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.Chdir("testdata/project")
        if err != nil {
index 5e232a3aaad6165d4d7305fb1b116056abca5ef9..232b43aa8f184709015fde6e99cf1d3fe426aa72 100644 (file)
@@ -144,10 +144,10 @@ func (l *Loop) syncHost(wg *sync.WaitGroup, host Host) error {
 
        err := host.Dial(conn)
        if err != nil {
-               conn.Kill()
+               conn.Kill() //nolint:errcheck
                return err
        }
-       defer conn.Kill()
+       defer conn.Kill() //nolint:errcheck
 
        err = l.SyncHostFunc(conn, host)
        if err != nil {
index 2a64d63439871954379b26630dabc763c1a73f44..8a65d4d98f54667d85c3043658be0346bad9706d 100644 (file)
@@ -47,7 +47,7 @@ func Main(args []string) error {
        optionCreate := flag.Bool("create", false,
                "create the path if it does not exist")
 
-       flag.CommandLine.Parse(args[2:])
+       flag.CommandLine.Parse(args[2:]) //nolint:errcheck
 
        if flag.NArg() != 2 {
                flag.Usage()
@@ -119,7 +119,7 @@ func handle(path string, line string, create bool) ([]string, error) {
                gid = int(x.Gid)
                mode = stat.Mode()
        }
-       stat = nil // prevent accidental use
+       stat = nil //nolint:wastedassign // prevent accidental use
 
        // Check if the expected line is present
        var found bool
@@ -161,7 +161,7 @@ func handle(path string, line string, create bool) ([]string, error) {
        }
        err = unix.Renameat(parentFd, tmpBase, parentFd, baseName)
        if err != nil {
-               unix.Unlinkat(parentFd, tmpBase, 0)
+               unix.Unlinkat(parentFd, tmpBase, 0) //nolint:errcheck
                return nil, err
        }
        err = unix.Fsync(parentFd)
index 07d92420b59a076e19c8022a690577a299971a26..2e5d2ef93fc56bf20d325604c82d75fbf61453c0 100644 (file)
@@ -33,7 +33,7 @@ func TestHandle(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.RemoveAll("testdata")
        if err != nil {
index 61a6237ae9b94abd3b6c1ce90d8f124bacbb047a..903af0a4d3d9dffe612c0b8fb8ca09e406ac7515 100644 (file)
@@ -75,7 +75,10 @@ func mainLoop() error {
        var logLevel safcm.LogLevel
        logFunc := func(level safcm.LogLevel, msg string) {
                if logLevel >= level {
-                       conn.Send(safcm.MsgLog{
+                       // Handling errors here is complex and quite verbose.
+                       // If it happens the connection is gone anyway so skip
+                       // the error handling.
+                       conn.Send(safcm.MsgLog{ //nolint:errcheck
                                Level: level,
                                Text:  msg,
                        })
index 507cc174010bdb68ba0d478d07001fe5b66167d2..9803e936093d1c3edf59c3881ac2966a041ab3c2 100644 (file)
@@ -250,7 +250,7 @@ reopen:
                }
 
                // Compare file content (if possible)
-               switch change.Old.Mode.Type() {
+               switch change.Old.Mode.Type() { //nolint:exhaustive
                case 0: // regular file
                        x, err := io.ReadAll(oldFh)
                        if err != nil {
@@ -446,7 +446,7 @@ reopen:
                err = unix.Fchownat(parentFd, tmpBase, file.Uid, file.Gid,
                        unix.AT_SYMLINK_NOFOLLOW)
                if err != nil {
-                       unix.Unlinkat(parentFd, tmpBase, 0)
+                       unix.Unlinkat(parentFd, tmpBase, 0) //nolint:errcheck
                        return err
                }
                // Permissions are irrelevant for symlinks (on most systems)
@@ -458,7 +458,7 @@ reopen:
        debugf("renaming %q", slashpath.Join(dir, tmpBase))
        err = unix.Renameat(parentFd, tmpBase, parentFd, baseName)
        if err != nil {
-               unix.Unlinkat(parentFd, tmpBase, 0)
+               unix.Unlinkat(parentFd, tmpBase, 0) //nolint:errcheck
                return err
        }
        // To guarantee durability fsync must be called on a parent directory
@@ -659,31 +659,31 @@ func WriteTempAt(dirFd int, base string, data []byte, uid, gid int,
        _, err = fh.Write(data)
        if err != nil {
                fh.Close()
-               unix.Unlinkat(dirFd, tmpBase, 0)
+               unix.Unlinkat(dirFd, tmpBase, 0) //nolint:errcheck
                return "", err
        }
        // createTempAt() creates the file with 0600
        err = fh.Chown(uid, gid)
        if err != nil {
                fh.Close()
-               unix.Unlinkat(dirFd, tmpBase, 0)
+               unix.Unlinkat(dirFd, tmpBase, 0) //nolint:errcheck
                return "", err
        }
        err = fh.Chmod(mode)
        if err != nil {
                fh.Close()
-               unix.Unlinkat(dirFd, tmpBase, 0)
+               unix.Unlinkat(dirFd, tmpBase, 0) //nolint:errcheck
                return "", err
        }
        err = fh.Sync()
        if err != nil {
                fh.Close()
-               unix.Unlinkat(dirFd, tmpBase, 0)
+               unix.Unlinkat(dirFd, tmpBase, 0) //nolint:errcheck
                return "", err
        }
        err = fh.Close()
        if err != nil {
-               unix.Unlinkat(dirFd, tmpBase, 0)
+               unix.Unlinkat(dirFd, tmpBase, 0) //nolint:errcheck
                return "", err
        }
 
index 34751ae360e6fb09f09b860ef690274790c81ca0..bdf432acf1be2b289aae28cd0be0d7b8c912948d 100644 (file)
@@ -36,7 +36,7 @@ func TestSyncFiles(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.RemoveAll("testdata")
        if err != nil {
@@ -887,7 +887,7 @@ func TestSyncFile(t *testing.T) {
        if err != nil {
                t.Fatal(err)
        }
-       defer os.Chdir(cwd)
+       defer os.Chdir(cwd) //nolint:errcheck
 
        err = os.RemoveAll("testdata")
        if err != nil {
index 3f7ade144c1c2905254da49eb7924552aa3c362d..0ca9cd411a62829abbb30fc43c16d5eec3ea1124 100644 (file)
@@ -140,7 +140,7 @@ func (c *Conn) Kill() error {
 
        c.debugf("Kill: killing connection")
 
-       c.cmd.Process.Kill()
+       c.cmd.Process.Kill() //nolint:errcheck
        return c.wait()
 }
 
index c098714cc0759388dd32e0d723819c4b4c598665..fc702d3518d0c875ba2b9ce1104971e740290fec 100644 (file)
@@ -90,7 +90,7 @@ func (c *Conn) DialSSH(cfg SSHConfig) error {
 
        err = c.dialSSH(stdin, stdout)
        if err != nil {
-               c.Kill()
+               c.Kill() //nolint:errcheck
                return err
        }
        c.conn = safcm.NewGobConn(stdout, stdin)