From 488a420b6ed67a134db9dc27d461b1ae6f3edd2d Mon Sep 17 00:00:00 2001 From: bwplotka Date: Fri, 27 Jun 2025 10:30:22 +0100 Subject: [PATCH] Upgrade golangci-lint due to timeouts for v1 version. Signed-off-by: bwplotka --- .github/workflows/ci.yml | 14 +-- .golangci.yml | 206 +++++++++++++++++++++++---------------- Makefile.common | 2 +- 3 files changed, 132 insertions(+), 90 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fd84e46e5..22c2e0e785 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -161,20 +161,22 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 - - name: Install Go - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7 # v5.0.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - go-version: 1.23.x + persist-credentials: false + - name: Install Go + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + with: + go-version: 1.24.x - name: Install snmp_exporter/generator dependencies run: sudo apt-get update && sudo apt-get -y install libsnmp-dev if: github.repository == 'prometheus/snmp_exporter' - name: Lint - uses: golangci/golangci-lint-action@a4f60bb28d35aeee14e6880718e0c85ff1882e64 # v6.0.1 + uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0 with: args: --verbose # Make sure to sync this with Makefile.common and scripts/golangci-lint.yml. - version: v1.59.0 + version: v2.1.5 fuzzing: uses: ./.github/workflows/fuzzing.yml if: github.event_name == 'pull_request' diff --git a/.golangci.yml b/.golangci.yml index f81b29ed2d..e05682ca9a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,58 +1,91 @@ -run: - timeout: 15m - skip-files: - # Skip autogenerated files. - - ^.*\.(pb|y)\.go$ - skip-dirs: - # Copied it from a different source - - storage/remote/otlptranslator/prometheusremotewrite - - storage/remote/otlptranslator/prometheus - -output: - sort-results: true - -linters: +# NOTE(bwplotka): Pulled config from 44f78bb3c8fd3d2cdb89ffec9eeb585cd12991bd as +# old golangci-lint was timing out. +# For an old LTS, it's not feasable to apply new lints and formatters, so some are commented. +formatters: enable: - - depguard - - errorlint - - gocritic - - godot - - gofumpt - - goimports - - misspell - - nolintlint - - perfsprint - - predeclared - - revive - - testifylint - - unconvert - - unused - - usestdlibvars - - whitespace + # - gci + # - gofumpt + - goimports + settings: + gci: + sections: + - standard + - default + - prefix(github.com/prometheus/prometheus) + gofumpt: + extra-rules: true + goimports: + local-prefixes: + - github.com/prometheus/prometheus issues: + max-issues-per-linter: 0 max-same-issues: 0 - exclude-rules: - - linters: - - gocritic - text: "appendAssign" - - path: _test.go - linters: - - errcheck - - path: "tsdb/head_wal.go" - linters: - - errorlint - - linters: - - godot - source: "^// ===" - - linters: - - perfsprint - text: "fmt.Sprintf can be replaced with string concatenation" -linters-settings: - depguard: + +linters: + # Keep this list sorted alphabetically + enable: + - depguard + - errorlint + - exptostd + - gocritic + - misspell + - nilnesserr + # TODO(bwplotka): Enable once https://github.com/golangci/golangci-lint/issues/3228 is fixed. + # - nolintlint + - sloglint + - unconvert + - unused + # NOTE(bwplotka): For an old LTS, it's not feasable to apply new lints, skipping. + # - testifylint + # - whitespace + # - usestdlibvars + # - staticcheck + # - revive + # - predeclared + # - perfsprint + # - godot + # - loggercheck + disable: + - staticcheck + - errcheck + + exclusions: + paths: + # Skip autogenerated files. + - ^.*\.(pb|y)\.go$ rules: - main: - deny: + - linters: + - errcheck + # Taken from the default exclusions in v1. + text: Error return value of .((os\.)?std(out|err)\..*|.*Close|.*Flush|os\.Remove(All)?|.*print(f|ln)?|os\.(Un)?Setenv). is not checked + - linters: + - govet + # We use many Seek methods that do not follow the usual pattern. + text: "stdmethods: method Seek.* should have signature Seek" + - linters: + - revive + # We have stopped at some point to write doc comments on exported symbols. + # TODO(beorn7): Maybe we should enforce this again? There are ~500 offenders right now. + text: exported (.+) should have comment( \(or a comment on this block\))? or be unexported + - linters: + - gocritic + text: "appendAssign" + - linters: + - errcheck + path: _test.go + - linters: + - errorlint + path: "tsdb/head_wal.go" + - linters: + - godot + source: "^// ===" + warn-unused: true + settings: + depguard: + rules: + main: + deny: - pkg: "sync/atomic" desc: "Use go.uber.org/atomic instead of sync/atomic" - pkg: "github.com/stretchr/testify/assert" @@ -71,8 +104,8 @@ linters-settings: desc: "Use github.com/klauspost/compress instead of zlib" - pkg: "golang.org/x/exp/slices" desc: "Use 'slices' instead." - errcheck: - exclude-functions: + errcheck: + exclude-functions: # Don't flag lines such as "io.Copy(io.Discard, resp.Body)". - io.Copy # The next two are used in HTTP handlers, any error is handled by the server itself. @@ -80,31 +113,35 @@ linters-settings: - (net/http.ResponseWriter).Write # No need to check for errors on server's shutdown. - (*net/http.Server).Shutdown - # Never check for logger errors. - - (github.com/go-kit/log.Logger).Log # Never check for rollback errors as Rollback() is called when a previous error was detected. - (github.com/prometheus/prometheus/storage.Appender).Rollback - goimports: - local-prefixes: github.com/prometheus/prometheus - gofumpt: - extra-rules: true - perfsprint: - # Optimizes `fmt.Errorf`. - errorf: false - revive: - # By default, revive will enable only the linting rules that are named in the configuration file. - # So, it's needed to explicitly set in configuration all required rules. - # The following configuration enables all the rules from the defaults.toml - # https://github.com/mgechev/revive/blob/master/defaults.toml - rules: + perfsprint: + # Optimizes even if it requires an int or uint type cast. + int-conversion: true + # Optimizes into `err.Error()` even if it is only equivalent for non-nil errors. + err-error: true + # Optimizes `fmt.Errorf`. + errorf: true + # Optimizes `fmt.Sprintf` with only one argument. + sprintf1: true + # Optimizes into strings concatenation. + strconcat: false + revive: + # By default, revive will enable only the linting rules that are named in the configuration file. + # So, it's needed to explicitly enable all required rules here. + rules: # https://github.com/mgechev/revive/blob/master/RULES_DESCRIPTIONS.md - name: blank-imports + - name: comment-spacings - name: context-as-argument arguments: - # allow functions with test or bench signatures - - allowTypesBefore: "*testing.T,testing.TB" + # Allow functions with test or bench signatures. + - allowTypesBefore: '*testing.T,testing.TB' - name: context-keys-type - name: dot-imports + - name: early-return + arguments: + - "preserveScope" # A lot of false positives: incorrectly identifies channel draining as "empty code block". # See https://github.com/mgechev/revive/issues/386 - name: empty-block @@ -116,30 +153,33 @@ linters-settings: - name: exported - name: increment-decrement - name: indent-error-flow + arguments: + - "preserveScope" - name: package-comments + # TODO(beorn7): Currently, we have a lot of missing package doc comments. Maybe we should have them. + disabled: true - name: range - name: receiver-naming - name: redefines-builtin-id - name: superfluous-else + arguments: + - "preserveScope" - name: time-naming - name: unexported-return - name: unreachable-code - name: unused-parameter - disabled: true - name: var-declaration - name: var-naming - testifylint: - disable: + testifylint: + disable: - float-compare - go-require - enable: - - bool-compare - - compares - - empty - - error-is-as - - error-nil - - expected-actual - - len - - require-error - - suite-dont-use-pkg - - suite-extra-assert-call + enable-all: true + +output: + show-stats: false + +run: + timeout: 15m + +version: "2" diff --git a/Makefile.common b/Makefile.common index 1617292350..d869d51b72 100644 --- a/Makefile.common +++ b/Makefile.common @@ -61,7 +61,7 @@ PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_ SKIP_GOLANGCI_LINT := GOLANGCI_LINT := GOLANGCI_LINT_OPTS ?= -GOLANGCI_LINT_VERSION ?= v1.59.0 +GOLANGCI_LINT_VERSION ?= v2.1.6 # golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64. # windows isn't included here because of the path separator being different. ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin))