Also fix issues found by updated static checkers.
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
+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
# 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?
Addrs []netip.Prefix
}
B struct {
- *Node
+ Node *Node
Addrs []netip.Prefix
}
}
if err != nil {
return nil, err
}
- defer f.Close()
+ defer f.Close() //nolint:errcheck
cfg := Config{
Nets: make(map[string]*Net),
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
as = append(as, fmt.Sprintf(" <font point-size=\"10\">%s</font> <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 {
abs = append(abs, fmt.Sprintf(" %s <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 {
module linux-network-namespace-labs
-go 1.19
+go 1.26
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
+ }
}
}