go1.21 support (#3922)

This commit is contained in:
Ludovic Fernandez 2023-08-09 12:09:20 +02:00 committed by GitHub
parent c37828a8af
commit e0a8bd8543
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 55 additions and 16 deletions

View File

@ -11,7 +11,7 @@ jobs:
name: Build and deploy documentation name: Build and deploy documentation
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:
GO_VERSION: '1.20' GO_VERSION: '1.21'
NODE_VERSION: '20.x' NODE_VERSION: '20.x'
CGO_ENABLED: 0 CGO_ENABLED: 0

View File

@ -18,7 +18,7 @@ jobs:
# ex: # ex:
# - 1.18beta1 -> 1.18.0-beta.1 # - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1 # - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20' go-version: '1.21'
- name: Update GitHub action config - name: Update GitHub action config
run: make assets/github-action-config.json run: make assets/github-action-config.json

View File

@ -17,7 +17,7 @@ jobs:
# ex: # ex:
# - 1.18beta1 -> 1.18.0-beta.1 # - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1 # - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20' go-version: '1.21'
- name: Run go list - name: Run go list
run: go list -json -m all > go.list run: go list -json -m all > go.list
- name: Nancy - name: Nancy

View File

@ -6,7 +6,7 @@ on:
pull_request: pull_request:
env: env:
GO_VERSION: '1.20' GO_VERSION: '1.21'
jobs: jobs:
# Check if there is any dirty change for go mod tidy # Check if there is any dirty change for go mod tidy
@ -41,7 +41,9 @@ jobs:
# ex: # ex:
# - 1.18beta1 -> 1.18.0-beta.1 # - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1 # - 1.18rc1 -> 1.18.0-rc.1
go-version: ${{ env.GO_VERSION }} # TODO(ldez) must be changed after the first release of golangci-lint with go1.21
# go-version: ${{ env.GO_VERSION }}
go-version: '1.20'
- name: lint - name: lint
uses: golangci/golangci-lint-action@v3.6.0 uses: golangci/golangci-lint-action@v3.6.0
with: with:
@ -88,8 +90,8 @@ jobs:
strategy: strategy:
matrix: matrix:
golang: golang:
- 1.19
- '1.20' - '1.20'
- '1.21'
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Install Go - name: Install Go

View File

@ -18,7 +18,7 @@ jobs:
# ex: # ex:
# - 1.18beta1 -> 1.18.0-beta.1 # - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1 # - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20' go-version: '1.21'
- name: Unshallow - name: Unshallow
run: git fetch --prune --unshallow run: git fetch --prune --unshallow
@ -48,7 +48,7 @@ jobs:
# ex: # ex:
# - 1.18beta1 -> 1.18.0-beta.1 # - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1 # - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20' go-version: '1.21'
- name: Unshallow - name: Unshallow
run: git fetch --prune --unshallow run: git fetch --prune --unshallow

View File

@ -155,6 +155,8 @@ issues:
text: "SA1019: (.+).(GoVersion|LangVersion) is deprecated: use the global `run.go` instead." text: "SA1019: (.+).(GoVersion|LangVersion) is deprecated: use the global `run.go` instead."
- path: pkg/golinters/unused.go - path: pkg/golinters/unused.go
text: "rangeValCopy: each iteration copies 160 bytes \\(consider pointers or indexing\\)" text: "rangeValCopy: each iteration copies 160 bytes \\(consider pointers or indexing\\)"
- path: test/(fix|linters)_test.go
text: "string `gocritic.go` has 3 occurrences, make it a constant"
run: run:
timeout: 5m timeout: 5m

View File

@ -1,5 +1,5 @@
# stage 1 building the code # stage 1 building the code
FROM golang:1.20 as builder FROM golang:1.21 as builder
ARG VERSION ARG VERSION
ARG SHORT_COMMIT ARG SHORT_COMMIT
@ -10,7 +10,7 @@ WORKDIR /golangci
RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X main.version=$VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X main.version=$VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go
# stage 2 # stage 2
FROM golang:1.20 FROM golang:1.21
# related to https://github.com/golangci/golangci-lint/issues/3107 # related to https://github.com/golangci/golangci-lint/issues/3107
ENV GOROOT /usr/local/go ENV GOROOT /usr/local/go
# don't place it into $GOPATH/bin because Drone mounts $GOPATH as volume # don't place it into $GOPATH/bin because Drone mounts $GOPATH as volume

View File

@ -1,5 +1,5 @@
# stage 1 building the code # stage 1 building the code
FROM golang:1.20-alpine as builder FROM golang:1.21-alpine as builder
ARG VERSION ARG VERSION
ARG SHORT_COMMIT ARG SHORT_COMMIT
@ -15,7 +15,7 @@ RUN apk --no-cache add gcc musl-dev git mercurial
RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X main.version=$VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w -X main.version=$VERSION -X main.commit=$SHORT_COMMIT -X main.date=$DATE" -o golangci-lint ./cmd/golangci-lint/main.go
# stage 2 # stage 2
FROM golang:1.20-alpine FROM golang:1.21-alpine
# related to https://github.com/golangci/golangci-lint/issues/3107 # related to https://github.com/golangci/golangci-lint/issues/3107
ENV GOROOT /usr/local/go ENV GOROOT /usr/local/go
# gcc is required to support cgo; # gcc is required to support cgo;

2
go.mod
View File

@ -1,6 +1,6 @@
module github.com/golangci/golangci-lint module github.com/golangci/golangci-lint
go 1.19 go 1.20
require ( require (
4d63.com/gocheckcompilerdirectives v1.2.1 4d63.com/gocheckcompilerdirectives v1.2.1

View File

@ -41,13 +41,13 @@ type Version struct {
Debug bool `mapstructure:"debug"` Debug bool `mapstructure:"debug"`
} }
func IsGreaterThanOrEqualGo118(v string) bool { func IsGreaterThanOrEqualGo121(v string) bool {
v1, err := hcversion.NewVersion(strings.TrimPrefix(v, "go")) v1, err := hcversion.NewVersion(strings.TrimPrefix(v, "go"))
if err != nil { if err != nil {
return false return false
} }
limit, err := hcversion.NewVersion("1.18") limit, err := hcversion.NewVersion("1.21")
if err != nil { if err != nil {
return false return false
} }

View File

@ -283,6 +283,20 @@ func newGoCriticSettingsWrapper(settings *config.GoCriticSettings, logger loguti
allCheckerMap[checkInfo.Name] = checkInfo allCheckerMap[checkInfo.Name] = checkInfo
} }
if settings != nil && config.IsGreaterThanOrEqualGo121(settings.Go) {
var enabledChecks []string
for _, check := range settings.EnabledChecks {
if check == "ruleguard" {
logger.Warnf("%s: check %q is disabled for go1.21 https://github.com/golangci/golangci-lint/issues/3933", goCriticName, "ruleguard")
continue
}
enabledChecks = append(enabledChecks, check)
}
settings.EnabledChecks = enabledChecks
}
return &goCriticSettingsWrapper{ return &goCriticSettingsWrapper{
GoCriticSettings: settings, GoCriticSettings: settings,
logger: logger, logger: logger,

View File

@ -134,7 +134,7 @@ func (lc *Config) Name() string {
} }
func (lc *Config) WithNoopFallback(cfg *config.Config) *Config { func (lc *Config) WithNoopFallback(cfg *config.Config) *Config {
if cfg != nil && config.IsGreaterThanOrEqualGo118(cfg.Run.Go) { if cfg != nil && config.IsGreaterThanOrEqualGo121(cfg.Run.Go) {
lc.Linter = &Noop{ lc.Linter = &Noop{
name: lc.Linter.Name(), name: lc.Linter.Name(),
desc: lc.Linter.Desc(), desc: lc.Linter.Desc(),

View File

@ -43,6 +43,13 @@ func TestFix(t *testing.T) {
for _, input := range sources { for _, input := range sources {
input := input input := input
// TODO(ldez): remove this limitation when gocritic/ruleguard will be fixed.
if filepath.Base(input) == "gocritic.go" {
t.Logf("skip gocritic because of a bug with ruleguard")
continue
}
t.Run(filepath.Base(input), func(t *testing.T) { t.Run(filepath.Base(input), func(t *testing.T) {
t.Parallel() t.Parallel()
@ -80,6 +87,13 @@ func TestFix_pathPrefix(t *testing.T) {
for _, input := range sources { for _, input := range sources {
input := input input := input
// TODO(ldez): remove this limitation when gocritic/ruleguard will be fixed.
if filepath.Base(input) == "gocritic.go" {
t.Logf("skip gocritic because of a bug with ruleguard")
continue
}
t.Run(filepath.Base(input), func(t *testing.T) { t.Run(filepath.Base(input), func(t *testing.T) {
t.Parallel() t.Parallel()

View File

@ -62,6 +62,13 @@ func testSourcesFromDir(t *testing.T, dir string) {
for _, source := range sources { for _, source := range sources {
source := source source := source
// TODO(ldez): remove this limitation when gocritic/ruleguard will be fixed.
if filepath.Base(source) == "gocritic.go" {
t.Logf("skip gocritic because of a bug with ruleguard")
continue
}
t.Run(filepath.Base(source), func(subTest *testing.T) { t.Run(filepath.Base(source), func(subTest *testing.T) {
subTest.Parallel() subTest.Parallel()