feat: go1.19 support (#3037)

This commit is contained in:
Ludovic Fernandez 2022-08-03 20:53:06 +02:00 committed by GitHub
parent 6313fa9a67
commit 1557692e59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 62 additions and 78 deletions

View File

@ -14,8 +14,10 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
go-version: 1.18
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: 1.19
- name: Update GitHub action config
run: make assets/github-action-config.json

View File

@ -13,8 +13,10 @@ jobs:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
go-version: 1.18
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: 1.19
- name: Run go list
run: go list -json -m all > go.list
- name: Nancy

View File

@ -6,7 +6,7 @@ on:
pull_request:
env:
GO_VERSION: 1.18
GO_VERSION: 1.19
jobs:
# Check if there any dirty change for go mod tidy
@ -16,7 +16,9 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: ${{ env.GO_VERSION }}
- name: Checkout code
uses: actions/checkout@v3
@ -34,8 +36,11 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
go-version: ${{ env.GO_VERSION }}
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
# go-version: ${{ env.GO_VERSION }} # todo(ldez) uncomment after the next release v1.48.0
go-version: 1.18
- name: lint
uses: golangci/golangci-lint-action@v3.2.0
with:
@ -52,7 +57,9 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: ${{ env.GO_VERSION }} # test only the latest go version to speed up CI
- name: Run tests
run: make.exe test
@ -66,7 +73,9 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: ${{ env.GO_VERSION }} # test only the latest go version to speed up CI
- name: Run tests
run: make test
@ -77,14 +86,16 @@ jobs:
strategy:
matrix:
golang:
- 1.17
- 1.18
- 1.19
steps:
- uses: actions/checkout@v3
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: ${{ matrix.golang }}
- uses: actions/cache@v3
with:
@ -108,7 +119,9 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: ${{ env.GO_VERSION }}
- name: Check generated files are up to date
run: make fast_check_generated

View File

@ -14,8 +14,10 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
go-version: 1.18
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: 1.19
- name: Unshallow
run: git fetch --prune --unshallow
@ -41,8 +43,10 @@ jobs:
- name: Install Go
uses: actions/setup-go@v3
with:
# stable: 'false' # Keep this line to be able to use rc and beta version of Go (ex: 1.18.0-rc1).
go-version: 1.18
# Keep the following comment to be able to use rc and beta version of Go (ex: 1.18.0-rc.1).
# https://github.com/actions/setup-go#supported-version-syntax
# stable: 'false'
go-version: 1.19
- name: Unshallow
run: git fetch --prune --unshallow

View File

@ -68,9 +68,9 @@ run:
allow-parallel-runners: false
# Define the Go version limit.
# Mainly related to generics support in go1.18.
# Default: use Go version from the go.mod file, fallback on the env var `GOVERSION`, fallback on 1.17
go: '1.18'
# 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

View File

@ -1,5 +1,5 @@
# stage 1 building the code
FROM golang:1.18 as builder
FROM golang:1.19 as builder
ARG VERSION
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
# stage 2
FROM golang:1.18
FROM golang:1.19
# don't place it into $GOPATH/bin because Drone mounts $GOPATH as volume
COPY --from=builder /golangci/golangci-lint /usr/bin/
CMD ["golangci-lint"]

View File

@ -1,5 +1,5 @@
# stage 1 building the code
FROM golang:1.18-alpine as builder
FROM golang:1.19-alpine as builder
ARG VERSION
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
# stage 2
FROM golang:1.18-alpine
FROM golang:1.19-alpine
# gcc is required to support cgo;
# git and mercurial are needed most times for go get`, etc.
# See https://github.com/docker-library/golang/issues/80

2
go.mod
View File

@ -1,6 +1,6 @@
module github.com/golangci/golangci-lint
go 1.18
go 1.19
require (
4d63.com/gochecknoglobals v0.1.0

View File

@ -121,7 +121,15 @@ func (lp *loadingPackage) loadFromSource(loadMode LoadMode) error {
pkg.IllTyped = true
pkg.TypesInfo = newTypesInfo()
pkg.TypesInfo = &types.Info{
Types: make(map[ast.Expr]types.TypeAndValue),
Instances: make(map[*ast.Ident]types.Instance),
Defs: make(map[*ast.Ident]types.Object),
Uses: make(map[*ast.Ident]types.Object),
Implicits: make(map[ast.Node]types.Object),
Scopes: make(map[ast.Node]*types.Scope),
Selections: make(map[*ast.SelectorExpr]*types.Selection),
}
importer := func(path string) (*types.Package, error) {
if path == unsafePkgName {

View File

@ -1,21 +0,0 @@
//go:build go1.18
// +build go1.18
package goanalysis
import (
"go/ast"
"go/types"
)
func newTypesInfo() *types.Info {
return &types.Info{
Types: make(map[ast.Expr]types.TypeAndValue),
Instances: make(map[*ast.Ident]types.Instance),
Defs: make(map[*ast.Ident]types.Object),
Uses: make(map[*ast.Ident]types.Object),
Implicits: make(map[ast.Node]types.Object),
Scopes: make(map[ast.Node]*types.Scope),
Selections: make(map[*ast.SelectorExpr]*types.Selection),
}
}

View File

@ -1,20 +0,0 @@
//go:build go1.17 && !go1.18
// +build go1.17,!go1.18
package goanalysis
import (
"go/ast"
"go/types"
)
func newTypesInfo() *types.Info {
return &types.Info{
Types: make(map[ast.Expr]types.TypeAndValue),
Defs: make(map[*ast.Ident]types.Object),
Uses: make(map[*ast.Ident]types.Object),
Implicits: make(map[ast.Node]types.Object),
Scopes: make(map[ast.Node]*types.Scope),
Selections: make(map[*ast.SelectorExpr]*types.Selection),
}
}

View File

@ -98,6 +98,7 @@ func staticCheckConfig(settings *config.StaticCheckSettings) *scconfig.Config {
}
// https://github.com/dominikh/go-tools/blob/9bf17c0388a65710524ba04c2d821469e639fdc2/lintcmd/lint.go#L437-L477
//
//nolint:gocritic // Keep the original source code.
func filterAnalyzerNames(analyzers []string, checks []string) map[string]bool {
allowedChecks := map[string]bool{}

View File

@ -21,8 +21,8 @@ type Noop struct {
}
func (n Noop) Run(_ context.Context, lintCtx *Context) ([]result.Issue, error) {
lintCtx.Log.Warnf("%s is disabled because of go1.18."+
" You can track the evolution of the go1.18 support by following the https://github.com/golangci/golangci-lint/issues/2649.", n.name)
lintCtx.Log.Warnf("%s is disabled because of generics."+
" You can track the evolution of the generics support by following the https://github.com/golangci/golangci-lint/issues/2649.", n.name)
return nil, nil
}

View File

@ -312,15 +312,10 @@ func extractRunContextFromComments(t *testing.T, sourcePath string) *runContext
require.Failf(t, "invalid prefix of comment line %s", line)
}
// TODO(ldez) replace that by strings.Cut when we will drop go1.17
var before string
var after string
if i := strings.Index(line, " "); i >= 0 {
before = line[:i]
after = strings.TrimSpace(line[i+len(" "):])
} else {
require.Failf(t, "invalid prefix of comment line %s", line)
}
before, after, found := strings.Cut(line, " ")
require.Truef(t, found, "invalid prefix of comment line %s", line)
after = strings.TrimSpace(after)
switch before {
case "//golangcitest:args":