Create a separate module for our golangci-lint version (#80)

## Summary:
In principle, it's not a problem to have test-only deps in your go.mod,
because they won't end up in your importers' builds (and in newer Go
versions may not even be downloaded.  (Which is why there's no
annotation to do so.)  In practice, that doesn't really work for
golangci-lint, because it doesn't really use semver (reasonably, in that
any updated linter may break lint in your codebase).  And we don't
really need it other than to run the binary at a particular version.

So now, I put it in its own go module.  This requires a bit more
throat-clearing to run it (we can't just `go run`), but it's not so bad
and avoids anyone getting annoyed at us because we upgraded their
golangci-lint for them.

We could do the same for `internal/integration`, which adds quite a lot,
including gqlgen, to our dependency tree, but it's not clear there's a
need.

Fixes #62.

Issue: https://github.com/Khan/genqlient/issues/62

## Test plan:
make check


Author: benjaminjkraft

Reviewers: dnerdy, StevenACoffman, benjaminjkraft, aberkan, MiguelCastillo

Required Reviewers: 

Approved By: dnerdy, StevenACoffman

Checks:  Test (1.17),  Test (1.16),  Test (1.15),  Test (1.14),  Test (1.13),  Lint,  Test (1.17),  Test (1.16),  Test (1.15),  Test (1.14),  Test (1.13),  Lint

Pull Request URL: https://github.com/Khan/genqlient/pull/80
This commit is contained in:
Ben Kraft
2021-09-09 09:23:00 -07:00
committed by GitHub
parent 6c86eed770
commit 1c061b153a
9 changed files with 1231 additions and 1161 deletions
+1 -1
View File
@@ -42,4 +42,4 @@ jobs:
- name: Run lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.42 # should match go.mod
version: v1.42 # should match internal/lint/go.mod
+1
View File
@@ -1,4 +1,5 @@
generate/testdata/tmp
internal/lint/golangci-lint
## Go standard gitignore
# Binaries for programs and plugins
+6 -2
View File
@@ -2,9 +2,13 @@ example:
go generate ./...
go run ./example/cmd/example/main.go
check:
go run github.com/golangci/golangci-lint/cmd/golangci-lint run ./...
lint:
( cd internal/lint && go build -o golangci-lint github.com/golangci/golangci-lint/cmd/golangci-lint )
internal/lint/golangci-lint run ./...
check: lint
go test -cover ./...
go mod tidy
genqlient.png: genqlient.svg
convert -density 600 -background transparent "$<" "$@"
-2
View File
@@ -5,8 +5,6 @@ go 1.13
require (
github.com/99designs/gqlgen v0.13.0
github.com/bradleyjkemp/cupaloy/v2 v2.6.0
// Should match golangci-lint version in .github/workflows/go.yml
github.com/golangci/golangci-lint v1.42.0
github.com/stretchr/testify v1.7.0
github.com/vektah/gqlparser/v2 v2.1.0
golang.org/x/tools v0.1.5
+7 -1143
View File
File diff suppressed because it is too large Load Diff
+6
View File
@@ -0,0 +1,6 @@
module github.com/Khan/genqlient/internal/lint
go 1.14
// Should match golangci-lint version in .github/workflows/go.yml
require github.com/golangci/golangci-lint v1.42.0
+1202
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
// Package lint exists to pin a version of golangci-lint, but to keep it out of
// our main go.mod. This is useful because end-users typically want to pin
// their own version of golangci-lint (since any new lint check may fail on
// their codebase) but go mod doesn't really like doing that. Luckily, we only
// need it for lint, so we just put it in a separate module.
package lint
import _ "github.com/golangci/golangci-lint/cmd/golangci-lint"
-13
View File
@@ -1,13 +0,0 @@
// Conventionally this sort of thing would use the "ignore" tag, but
// `go mod tidy` ignores so-tagged files explicitly, so we use another build
// tag we never intend to set.
// +build tools
//go:build tools
package testutil
import (
// Keep golangci-lint from getting pruned from the go.mod. We need it in
// go.mod so that we can easily `go run` it in `make check`.
_ "github.com/golangci/golangci-lint/cmd/golangci-lint"
)