Skip to content

Commit

Permalink
go1.21 support (#3922)
Browse files Browse the repository at this point in the history
  • Loading branch information
ldez committed Aug 9, 2023
1 parent c37828a commit e0a8bd8
Show file tree
Hide file tree
Showing 14 changed files with 55 additions and 16 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/documentation.yml
Expand Up @@ -11,7 +11,7 @@ jobs:
name: Build and deploy documentation
runs-on: ubuntu-latest
env:
GO_VERSION: '1.20'
GO_VERSION: '1.21'
NODE_VERSION: '20.x'
CGO_ENABLED: 0

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/post-release.yml
Expand Up @@ -18,7 +18,7 @@ jobs:
# ex:
# - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20'
go-version: '1.21'

- name: Update GitHub action config
run: make assets/github-action-config.json
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr-extra.yml
Expand Up @@ -17,7 +17,7 @@ jobs:
# ex:
# - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20'
go-version: '1.21'
- name: Run go list
run: go list -json -m all > go.list
- name: Nancy
Expand Down
8 changes: 5 additions & 3 deletions .github/workflows/pr.yml
Expand Up @@ -6,7 +6,7 @@ on:
pull_request:

env:
GO_VERSION: '1.20'
GO_VERSION: '1.21'

jobs:
# Check if there is any dirty change for go mod tidy
Expand Down Expand Up @@ -41,7 +41,9 @@ jobs:
# ex:
# - 1.18beta1 -> 1.18.0-beta.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
uses: golangci/golangci-lint-action@v3.6.0
with:
Expand Down Expand Up @@ -88,8 +90,8 @@ jobs:
strategy:
matrix:
golang:
- 1.19
- '1.20'
- '1.21'
steps:
- uses: actions/checkout@v3
- name: Install Go
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/tag.yml
Expand Up @@ -18,7 +18,7 @@ jobs:
# ex:
# - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20'
go-version: '1.21'
- name: Unshallow
run: git fetch --prune --unshallow

Expand Down Expand Up @@ -48,7 +48,7 @@ jobs:
# ex:
# - 1.18beta1 -> 1.18.0-beta.1
# - 1.18rc1 -> 1.18.0-rc.1
go-version: '1.20'
go-version: '1.21'

- name: Unshallow
run: git fetch --prune --unshallow
Expand Down
2 changes: 2 additions & 0 deletions .golangci.yml
Expand Up @@ -155,6 +155,8 @@ issues:
text: "SA1019: (.+).(GoVersion|LangVersion) is deprecated: use the global `run.go` instead."
- path: pkg/golinters/unused.go
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:
timeout: 5m
Expand Down
4 changes: 2 additions & 2 deletions build/Dockerfile
@@ -1,5 +1,5 @@
# stage 1 building the code
FROM golang:1.20 as builder
FROM golang:1.21 as builder

ARG VERSION
ARG SHORT_COMMIT
Expand All @@ -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

# stage 2
FROM golang:1.20
FROM golang:1.21
# related to https://github.com/golangci/golangci-lint/issues/3107
ENV GOROOT /usr/local/go
# don't place it into $GOPATH/bin because Drone mounts $GOPATH as volume
Expand Down
4 changes: 2 additions & 2 deletions build/alpine.Dockerfile
@@ -1,5 +1,5 @@
# stage 1 building the code
FROM golang:1.20-alpine as builder
FROM golang:1.21-alpine as builder

ARG VERSION
ARG SHORT_COMMIT
Expand All @@ -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

# stage 2
FROM golang:1.20-alpine
FROM golang:1.21-alpine
# related to https://github.com/golangci/golangci-lint/issues/3107
ENV GOROOT /usr/local/go
# gcc is required to support cgo;
Expand Down
2 changes: 1 addition & 1 deletion go.mod
@@ -1,6 +1,6 @@
module github.com/golangci/golangci-lint

go 1.19
go 1.20

require (
4d63.com/gocheckcompilerdirectives v1.2.1
Expand Down
4 changes: 2 additions & 2 deletions pkg/config/config.go
Expand Up @@ -41,13 +41,13 @@ type Version struct {
Debug bool `mapstructure:"debug"`
}

func IsGreaterThanOrEqualGo118(v string) bool {
func IsGreaterThanOrEqualGo121(v string) bool {
v1, err := hcversion.NewVersion(strings.TrimPrefix(v, "go"))
if err != nil {
return false
}

limit, err := hcversion.NewVersion("1.18")
limit, err := hcversion.NewVersion("1.21")
if err != nil {
return false
}
Expand Down
14 changes: 14 additions & 0 deletions pkg/golinters/gocritic.go
Expand Up @@ -283,6 +283,20 @@ func newGoCriticSettingsWrapper(settings *config.GoCriticSettings, logger loguti
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{
GoCriticSettings: settings,
logger: logger,
Expand Down
2 changes: 1 addition & 1 deletion pkg/lint/linter/config.go
Expand Up @@ -134,7 +134,7 @@ func (lc *Config) Name() string {
}

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{
name: lc.Linter.Name(),
desc: lc.Linter.Desc(),
Expand Down
14 changes: 14 additions & 0 deletions test/fix_test.go
Expand Up @@ -43,6 +43,13 @@ func TestFix(t *testing.T) {

for _, input := range sources {
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.Parallel()

Expand Down Expand Up @@ -80,6 +87,13 @@ func TestFix_pathPrefix(t *testing.T) {

for _, input := range sources {
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.Parallel()

Expand Down
7 changes: 7 additions & 0 deletions test/linters_test.go
Expand Up @@ -62,6 +62,13 @@ func testSourcesFromDir(t *testing.T, dir string) {

for _, source := range sources {
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) {
subTest.Parallel()

Expand Down

0 comments on commit e0a8bd8

Please sign in to comment.