]> ruderich.org/simon Gitweb - linux-network-namespace-labs/linux-network-namespace-labs.git/commitdiff
Update static checkers and Go to 1.26
authorSimon Ruderich <simon@ruderich.org>
Sun, 12 Jul 2026 05:32:18 +0000 (07:32 +0200)
committerSimon Ruderich <simon@ruderich.org>
Sun, 12 Jul 2026 05:32:18 +0000 (07:32 +0200)
Also fix issues found by updated static checkers.

.gitlab-ci.yml
.golangci.yml
ci/run
config.go
dot.go
go.mod
setup.go

index 23f32e8fa786ab93252fc0fdb30580de4c747875..615e2ec9ec4aa11d4c7c9f5644c35b74e851fe11 100644 (file)
@@ -1,11 +1,4 @@
 golang:
-  image: golang:1.23-bookworm
+  image: golang:1.26
   script:
     - ./ci/run
-
-golang-debian-stable:
-  image: golang:1.19-bookworm
-  script:
-    # Only check building as not all additional checks work with the old
-    # golang version.
-    - go build
index 7a20a3375717ed81b9dadcf19a53024357aebd9a..8fd35868404154020e2eb3461df976d5f40e7a81 100644 (file)
@@ -1,35 +1,70 @@
+version: "2"
+
 linters:
-  disable-all: true
+  default: none
   enable:
     # Enabled by default
     - errcheck
-    - gosimple
     - govet
     - ineffassign
     - staticcheck
     - unused
     # Additional checks
     - bodyclose
+    - containedctx
     - contextcheck
     - copyloopvar
     - durationcheck
     - errname
     - exhaustive
-    - exportloopref
-    - gofmt
+    - exptostd
+    - gocheckcompilerdirectives
+    - gocritic
+    - iface
+    - importas
     - nilerr
+    - nilnesserr
     - nolintlint
+    - nonamedreturns
+    - nosprintfhostport
     - predeclared
+    - reassign
+    - recvcheck
     - rowserrcheck
-    - typecheck
+    - thelper
+    - tparallel
     - unconvert
+    - usestdlibvars
+    - usetesting
     - wastedassign
 
-  issues:
-    # Don't hide potential important issues
-    exclude-use-default: false
+  settings:
+    exhaustive:
+      # "default" is good enough to be exhaustive
+      default-signifies-exhaustive: true
+    gocritic:
+      disabled-checks:
+        - exitAfterDefer
+        - ifElseChain
+        - singleCaseSwitch
+    staticcheck:
+      checks:
+        # Defaults
+        - "all"
+        - "-ST1000"
+        - "-ST1003"
+        - "-ST1016"
+        - "-ST1020"
+        - "-ST1021"
+        - "-ST1022"
+        #
+        - "-QF1001"
+        - "-QF1003"
+        - "-QF1003"
+        - "-QF1007"
+    usestdlibvars:
+      http-method: false
+
 
-linters-settings:
-  exhaustive:
-    # "default" is good enough to be exhaustive
-    default-signifies-exhaustive: true
+run:
+  timeout: 10m
diff --git a/ci/run b/ci/run
index 5ba8ec2a1fbc08a32e31cc740cca948ecb3c1d55..9c18468aacba69bf611809a914a954fb742399f2 100755 (executable)
--- a/ci/run
+++ b/ci/run
@@ -17,9 +17,7 @@ make
 # Additional static checks only run in CI
 go install golang.org/x/vuln/cmd/govulncheck@latest
 govulncheck ./...
-go install honnef.co/go/tools/cmd/staticcheck@v0.5.1
-staticcheck ./...
-go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.62.0
+go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.12.2
 golangci-lint run
 
 test -z "$(git clean -nd)" # any untracked files left?
index 11963e65d61c52c021144e92ceff5fd708299e73..ffac2bab3544e43094b88758ba221549b2bf263c 100644 (file)
--- a/config.go
+++ b/config.go
@@ -55,7 +55,7 @@ type Link struct {
                Addrs []netip.Prefix
        }
        B struct {
-               *Node
+               Node  *Node
                Addrs []netip.Prefix
        }
 }
@@ -65,7 +65,7 @@ func LoadConfig(path string) (*Config, error) {
        if err != nil {
                return nil, err
        }
-       defer f.Close()
+       defer f.Close() //nolint:errcheck
 
        cfg := Config{
                Nets:  make(map[string]*Net),
diff --git a/dot.go b/dot.go
index c0f058ed9211422a85719fb4245e74a233378836..b33cd3758b67188341be73bbb121ae5945adf346 100644 (file)
--- a/dot.go
+++ b/dot.go
@@ -18,11 +18,17 @@ func writeDot(cfg *Config, path string) error {
        if err != nil {
                return err
        }
-       defer f.Close()
+       defer f.Close() //nolint:errcheck // checked by f.Sync() below
        w := bufio.NewWriter(f)
 
-       fmt.Fprintf(w, "graph {\n")
-       fmt.Fprintf(w, "graph [nodesep=3]\n")
+       _, err = fmt.Fprintf(w, "graph {\n")
+       if err != nil {
+               return err
+       }
+       _, err = fmt.Fprintf(w, "graph [nodesep=3]\n")
+       if err != nil {
+               return err
+       }
 
        for _, node := range cfg.Nodes {
                var as []string
@@ -31,8 +37,11 @@ func writeDot(cfg *Config, path string) error {
                        as = append(as, fmt.Sprintf("&nbsp;<font point-size=\"10\">%s</font>&nbsp;<br/>",
                                html.EscapeString(x.String())))
                }
-               fmt.Fprintf(w, "%q [label=<%s>]\n",
+               _, err := fmt.Fprintf(w, "%q [label=<%s>]\n",
                        node.Name, strings.Join(as, ""))
+               if err != nil {
+                       return err
+               }
        }
 
        for _, link := range cfg.Links {
@@ -46,12 +55,18 @@ func writeDot(cfg *Config, path string) error {
                        abs = append(abs, fmt.Sprintf("&nbsp;%s&nbsp;<br/>",
                                html.EscapeString(x.Addr().String())))
                }
-               fmt.Fprintf(w, "%q -- %q [taillabel=<%s>,headlabel=<%s>,labelfontsize=10]\n",
+               _, err := fmt.Fprintf(w, "%q -- %q [taillabel=<%s>,headlabel=<%s>,labelfontsize=10]\n",
                        link.A.Node.Name, link.B.Node.Name,
                        strings.Join(aas, ""), strings.Join(abs, ""))
+               if err != nil {
+                       return err
+               }
        }
 
-       fmt.Fprintf(w, "}\n")
+       _, err = fmt.Fprintf(w, "}\n")
+       if err != nil {
+               return err
+       }
 
        err = w.Flush()
        if err != nil {
diff --git a/go.mod b/go.mod
index 2cba6657de01f12726b3ac511cd68e64a7e42c90..08607773285fb040fef9903c434580382360e038 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
 module linux-network-namespace-labs
 
-go 1.19
+go 1.26
index bbf42f4207c89814b2c32063b6ab76a5d8624cf3..f220f51fcb8806416215d454efad11e4fb7d4e6c 100644 (file)
--- a/setup.go
+++ b/setup.go
@@ -253,25 +253,42 @@ func writeHosts(cfg *Config, path string) error {
        if err != nil {
                return err
        }
-       defer f.Close()
+       defer f.Close() //nolint:errcheck // checked by f.Sync() below
        w := bufio.NewWriter(f)
 
        // Standard entries
-       fmt.Fprintf(w, "127.0.0.1 localhost\n")
-       fmt.Fprintf(w, "::1 localhost ip6-localhost ip6-loopback\n")
+       _, err = fmt.Fprintf(w, "127.0.0.1 localhost\n")
+       if err != nil {
+               return err
+       }
+       _, err = fmt.Fprintf(w, "::1 localhost ip6-localhost ip6-loopback\n")
+       if err != nil {
+               return err
+       }
 
        for _, node := range cfg.Nodes {
                for _, x := range node.Loopbacks {
-                       fmt.Fprintf(w, "%s %s-loop\n", x.String(), node.Name)
+                       _, err := fmt.Fprintf(w, "%s %s-loop\n", x.String(), node.Name)
+                       if err != nil {
+                               return err
+                       }
                }
        }
 
        for _, link := range cfg.Links {
                for _, x := range link.A.Addrs {
-                       fmt.Fprintf(w, "%s %s\n", x.Addr().String(), link.A.Node.Name)
+                       _, err := fmt.Fprintf(w, "%s %s\n", x.Addr().String(),
+                               link.A.Node.Name)
+                       if err != nil {
+                               return err
+                       }
                }
                for _, x := range link.B.Addrs {
-                       fmt.Fprintf(w, "%s %s\n", x.Addr().String(), link.B.Node.Name)
+                       _, err := fmt.Fprintf(w, "%s %s\n", x.Addr().String(),
+                               link.B.Node.Name)
+                       if err != nil {
+                               return err
+                       }
                }
        }