From 0ff3a118a01854571e5bd3a3219bf2b7def66bce Mon Sep 17 00:00:00 2001 From: Matt Dale <9760375+matthewdale@users.noreply.github.com> Date: Thu, 31 Jul 2025 14:13:54 -0700 Subject: [PATCH] Use a pinned Go version for golangci-lint. --- .github/workflows/test.yml | 3 +++ .pre-commit-config.yaml | 9 +++++++-- Makefile | 18 +++++++----------- etc/golangci-lint.sh | 24 ++++++++++++++++++++++++ 4 files changed, 41 insertions(+), 13 deletions(-) create mode 100755 etc/golangci-lint.sh diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c4e5498fbf..a72ffa4ad9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,4 +18,7 @@ jobs: steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 + - uses: actions/setup-go@v5 + with: + go-version: 'stable' - uses: pre-commit/action@v3.0.1 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f78a95601b..db12c76224 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -50,7 +50,12 @@ repos: - id: markdown-link-check exclude: ^(vendor) -- repo: https://github.com/golangci/golangci-lint - rev: v1.60.1 +- repo: local hooks: - id: golangci-lint + name: golangci-lint + language: system + types: [go] + require_serial: true + pass_filenames: false + entry: etc/golangci-lint.sh diff --git a/Makefile b/Makefile index a3db27e0d1..f6045ba766 100644 --- a/Makefile +++ b/Makefile @@ -70,22 +70,18 @@ doc: fmt: go fmt ./... -.PHONY: install-golangci-lint -install-golangci-lint: - go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.60.1 - # Lint with various GOOS and GOARCH targets to catch static analysis failures that may only affect # specific operating systems or architectures. For example, staticcheck will only check for 64-bit # alignment of atomically accessed variables on 32-bit architectures (see # https://staticcheck.io/docs/checks#SA1027) .PHONY: lint -lint: install-golangci-lint - GOOS=linux GOARCH=386 golangci-lint run --config .golangci.yml ./... - GOOS=linux GOARCH=arm golangci-lint run --config .golangci.yml ./... - GOOS=linux GOARCH=arm64 golangci-lint run --config .golangci.yml ./... - GOOS=linux GOARCH=amd64 golangci-lint run --config .golangci.yml ./... - GOOS=linux GOARCH=ppc64le golangci-lint run --config .golangci.yml ./... - GOOS=linux GOARCH=s390x golangci-lint run --config .golangci.yml ./... +lint: + GOOS=linux GOARCH=386 etc/golangci-lint.sh + GOOS=linux GOARCH=arm etc/golangci-lint.sh + GOOS=linux GOARCH=arm64 etc/golangci-lint.sh + GOOS=linux GOARCH=amd64 etc/golangci-lint.sh + GOOS=linux GOARCH=ppc64le etc/golangci-lint.sh + GOOS=linux GOARCH=s390x etc/golangci-lint.sh .PHONY: update-notices update-notices: diff --git a/etc/golangci-lint.sh b/etc/golangci-lint.sh new file mode 100755 index 0000000000..8d7903e927 --- /dev/null +++ b/etc/golangci-lint.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -ex + +# Keep this in sync with go version used in static-analysis Evergreen build variant. +GO_VERSION=1.22.8 +GOLANGCI_LINT_VERSION=1.60.1 + +# Unset the cross-compiler overrides while downloading binaries. +GOOS_ORIG=${GOOS:-} +export GOOS= +GOARCH_ORIG=${GOARCH:-} +export GOARCH= + +go install golang.org/dl/go$GO_VERSION@latest +go${GO_VERSION} download +GOROOT="$(go${GO_VERSION} env GOROOT)" +PATH="$GOROOT/bin:$PATH" +export PATH +export GOROOT +go install github.com/golangci/golangci-lint/cmd/golangci-lint@v${GOLANGCI_LINT_VERSION} + +export GOOS=$GOOS_ORIG +export GOARCH=$GOARCH_ORIG +golangci-lint run --config .golangci.yml ./...