From 43ab764098359b777b6851dbae49adbbcfa7d67e Mon Sep 17 00:00:00 2001 From: AntiD2ta Date: Fri, 26 Jun 2026 15:57:23 +0200 Subject: [PATCH] Migrate golangci-lint to v2 golangci-lint v1.64.8 (bundled go1.24 type-checker) cannot type-check the go1.26 standard library that GitHub's runners now provide via setup-go '^1.22', producing "file requires newer Go version go1.26" errors that break the lint job on every PR since ~2026-06-26 (master passed on 06-23, before the runner image started serving go1.26.4). Bump golangci/golangci-lint-action to v7 (pinned golangci-lint v2.12.2, built against go1.26) and migrate .golangci.yml to the v2 schema via `golangci-lint migrate`, preserving the project's effective ruleset: - enable-all -> default: all; stylecheck merged into staticcheck (-ST1000 carried over); gofmt/gofumpt/goimports moved to the formatters section. - Drop gci (now a formatter) and tenv (removed in v2) from the disable list. - Disable wsl_v5 alongside wsl: v2 default:all enables both the deprecated alias and its replacement, so both must be off to keep wsl disabled. - Disable new-in-v2 linters that conflict with established idioms: noinlineerr (the codebase uses inline `if err := ...` throughout) and modernize. - Disable the deprecated gomodguard to silence its warning (consistent with depguard already being disabled). Validated locally with golangci-lint v2.12.2 under go1.26: `config verify` passes and a full run completes with no typecheck or deprecation warnings; the only remaining findings are pre-existing prealloc/staticcheck issues that only-new-issues filters on CI. --- .github/workflows/golangci-lint.yml | 4 +- .golangci.yml | 148 +++++++++------------------- 2 files changed, 49 insertions(+), 103 deletions(-) diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index fa368e9..db908ec 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -21,9 +21,9 @@ jobs: cache: false go-version: '^1.22' - uses: 'actions/checkout@v4' - - uses: 'golangci/golangci-lint-action@v6' + - uses: 'golangci/golangci-lint-action@v7' with: - version: 'latest' + version: 'v2.12.2' args: '--timeout=60m' only-new-issues: true skip-cache: true diff --git a/.golangci.yml b/.golangci.yml index 2a61d0a..7bb0b15 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,109 +1,14 @@ -# This file contains all available configuration options -# with their default values (in comments). -# -# This file is not a configuration example, -# it contains the exhaustive configuration with explanations of the options. - -issues: - # Which files to exclude: they will be analyzed, but issues from them won't be reported. - # There is no need to include all autogenerated files, - # we confidently recognize autogenerated files. - # If it's not, please let us know. - # "/" will be replaced by current OS file path separator to properly work on Windows. - # Default: [] - exclude-files: - - ".*_ssz\\.go$" - -# Options for analysis running. +version: "2" run: - # The default concurrency value is the number of available CPU. - # concurrency: 4 - - # Timeout for analysis, e.g. 30s, 5m. - # Default: 1m - timeout: 10m - - # Exit code when at least one issue was found. - # Default: 1 - # issues-exit-code: 2 - - # Include test files or not. - # Default: true - tests: false - - # List of build tags, all linters use it. - # Default: []. - # build-tags: - # - mytag - - # Which dirs to skip: issues from them won't be reported. - # Can use regexp here: `generated.*`, regexp is applied on full path. - # Default value is empty list, - # but default dirs are skipped independently of this option's value (see skip-dirs-use-default). - # "/" will be replaced by current OS file path separator to properly work on Windows. - # skip-dirs: - # - autogenerated_by_my_lib - - # Enables skipping of directories: - # - vendor$, third_party$, testdata$, examples$, Godeps$, builtin$ - # Default: true - # skip-dirs-use-default: false - - # If set we pass it to "go list -mod={option}". From "go help modules": - # If invoked with -mod=readonly, the go command is disallowed from the implicit - # automatic updating of go.mod described above. Instead, it fails when any changes - # to go.mod are needed. This setting is most useful to check that go.mod does - # not need updates, such as in a continuous integration and testing system. - # If invoked with -mod=vendor, the go command assumes that the vendor - # directory holds the correct copies of dependencies and ignores - # the dependency descriptions in go.mod. - # - # Allowed values: readonly|vendor|mod - # By default, it isn't set. modules-download-mode: readonly - - # Allow multiple parallel golangci-lint instances running. - # If false (default) - golangci-lint acquires file lock on start. + tests: false allow-parallel-runners: true - - # Define the Go version limit. - # Mainly related to generics support since go1.18. - # Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.18 - # go: '1.19' - - -# output configuration options output: formats: - - format: colored-line-number + text: path: stderr - -# All available settings of specific linters. -linters-settings: - gosec: - excludes: - # Flags for potentially-unsafe casting of ints, but generates a lot of false positives. - - 'G115' - - lll: - line-length: 132 - - stylecheck: - checks: [ "all", "-ST1000" ] - - tagliatelle: - case: - # use-field-name: true - rules: - json: snake - yaml: snake - linters: - # Enable all available linters. - # Default: false - enable-all: true - # Disable specific linter - # https://golangci-lint.run/usage/linters/#disabled-by-default + default: all disable: - contextcheck - cyclop @@ -116,28 +21,69 @@ linters: - forbidigo - forcetypeassert - funlen - - gci - gochecknoglobals - gochecknoinits - gocognit - goconst - goheader + - gomodguard - ireturn - lll - maintidx - mnd + - modernize - musttag - nestif - nilnil - nlreturn + - noinlineerr - nolintlint - perfsprint - promlinter - rowserrcheck - sqlclosecheck - - tenv - unparam - varnamelen - wastedassign - wrapcheck - wsl + - wsl_v5 + settings: + gosec: + excludes: + - G115 + lll: + line-length: 132 + staticcheck: + checks: + - all + - -ST1000 + tagliatelle: + case: + rules: + json: snake + yaml: snake + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - .*_ssz\.go$ + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + - gofumpt + - goimports + exclusions: + generated: lax + paths: + - .*_ssz\.go$ + - third_party$ + - builtin$ + - examples$