aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhinav Gupta <mail@abhinavg.net>2023-10-21 16:59:14 -0700
committerGitHub <noreply@github.com>2023-10-21 16:59:14 -0700
commit4fe6763faf645568b2d1d3fe4cdcfcf6b12cf7e6 (patch)
treed823419085562ed0442d061ffdcb519ebdb410b7
parent5fbb57ed966154dc29730e0ce62824e1b577d8cb (diff)
downloadsally-4fe6763faf645568b2d1d3fe4cdcfcf6b12cf7e6.tar.gz
ci: Use golangci-lint for linting (#121)
Instead of hand-managing and running linters, use golangci-lint. Along with the golangci-lint defaults, enable a couple other linters we generally agree with. See also uber-go/zap#1323 for a similar change. As a result of this, we can: - Drop the dependabot for tools - Run the lint job in parallel with build/test - Simplify the Makefile
-rw-r--r--.github/dependabot.yml5
-rw-r--r--.github/workflows/go.yml26
-rw-r--r--.golangci.yml28
-rw-r--r--Makefile60
-rw-r--r--handler_test.go4
-rw-r--r--tools/doc.go3
-rw-r--r--tools/go.mod27
-rw-r--r--tools/go.sum58
-rw-r--r--tools/tools.go9
9 files changed, 78 insertions, 142 deletions
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index a0787cc..eccc28d 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -5,11 +5,6 @@ updates:
schedule:
interval: "daily"
- - package-ecosystem: "gomod"
- directory: "/tools"
- schedule:
- interval: "daily"
-
- package-ecosystem: "github-actions"
directory: "/"
schedule:
diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index 9c644e1..9c46b19 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -23,8 +23,8 @@ jobs:
go-version: 1.21.x
cache: true
- - name: Lint
- run: make lint
+ - name: Build
+ run: make build
- name: Test
run: make cover
@@ -32,6 +32,28 @@ jobs:
- name: Upload coverage to codecov.io
uses: codecov/codecov-action@v3
+ lint:
+ name: Lint
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+ name: Check out repository
+ - uses: actions/setup-go@v4
+ name: Set up Go
+ with:
+ go-version: 1.21.x
+ cache: false # managed by golangci-lint
+
+ - uses: golangci/golangci-lint-action@v3
+ name: Install golangci-lint
+ with:
+ version: latest
+ args: --version # make lint will run the linter
+
+ - run: make lint
+ name: Lint
+
docker:
runs-on: ubuntu-latest
steps:
diff --git a/.golangci.yml b/.golangci.yml
new file mode 100644
index 0000000..f84e6da
--- /dev/null
+++ b/.golangci.yml
@@ -0,0 +1,28 @@
+output:
+ # Make output more digestible with quickfix in vim/emacs/etc.
+ sort-results: true
+ print-issued-lines: false
+
+linters:
+ enable:
+ - gofumpt
+ - nolintlint
+ - revive
+
+linters-settings:
+ govet:
+ # These govet checks are disabled by default, but they're useful.
+ enable:
+ - niliness
+ - reflectvaluecompare
+ - sortslice
+ - unusedwrite
+
+issues:
+ # Print all issues reported by all linters.
+ max-issues-per-linter: 0
+ max-same-issues: 0
+
+ # Don't ignore some of the issues that golangci-lint considers okay.
+ # This includes documenting all exported entities.
+ exclude-use-default: false
diff --git a/Makefile b/Makefile
index 2bab362..d78e31e 100644
--- a/Makefile
+++ b/Makefile
@@ -1,61 +1,47 @@
-export GOBIN = $(shell pwd)/bin
+# Directory containing the Makefile.
+PROJECT_ROOT = $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
+
+export GOBIN = $(PROJECT_ROOT)/bin
export PATH := $(GOBIN):$(PATH)
GO_FILES = $(shell find . \
-path '*/.*' -prune -o \
'(' -type f -a -name '*.go' ')' -print)
-REVIVE = bin/revive
-STATICCHECK = bin/staticcheck
-TOOLS = $(REVIVE) $(STATICCHECK)
-
TEST_FLAGS ?= -race
.PHONY: all
-all: lint install test
+all: lint build test
.PHONY: lint
-lint: gofmt revive staticcheck
-
-.PHONY: gofmt
-gofmt:
- $(eval FMT_LOG := $(shell mktemp -t gofmt.XXXXX))
- @gofmt -e -s -l $(GO_FILES) > $(FMT_LOG) || true
- @[ ! -s "$(FMT_LOG)" ] || \
- (echo "gofmt failed. Please reformat the following files:" | \
- cat - $(FMT_LOG) && false)
-
-.PHONY: staticcheck
-staticcheck: $(STATICCHECK)
- $(STATICCHECK) ./...
-
-$(STATICCHECK): tools/go.mod
- cd tools && go install honnef.co/go/tools/cmd/staticcheck
-
-.PHONY: revive
-revive: $(REVIVE)
- $(REVIVE) -set_exit_status ./...
+lint: golangci-lint tidy-lint
-$(REVIVE): tools/go.mod
- cd tools && go install github.com/mgechev/revive
-
-.PHONY: install
-install:
+.PHONY: build
+build:
go install .
.PHONY: test
test:
go test $(TEST_FLAGS) ./...
+.PHONY: build
+run: build
+ sally
+
.PHONY: cover
cover:
go test $(TEST_FLAGS) -coverprofile=cover.out -covermode=atomic -coverpkg=./... ./...
go tool cover -html=cover.out -o cover.html
-.PHONY: clean
-clean:
- rm -rf _tmp
+.PHONY: golangci-lint
+golangci-lint:
+ golangci-lint run
-.PHONY: install
-run: install
- sally
+.PHONY: tidy
+tidy:
+ go mod tidy
+
+.PHONY: tidy-lint
+tidy-lint:
+ go mod tidy
+ git diff --exit-code -- go.mod go.sum
diff --git a/handler_test.go b/handler_test.go
index e910897..ac0c1e4 100644
--- a/handler_test.go
+++ b/handler_test.go
@@ -168,7 +168,9 @@ func TestPostRejected(t *testing.T) {
res, err := http.Post(srv.URL+tt.path, "text/plain", strings.NewReader("foo"))
require.NoError(t, err)
- defer res.Body.Close()
+ defer func() {
+ assert.NoError(t, res.Body.Close())
+ }()
body, err := io.ReadAll(res.Body)
require.NoError(t, err)
diff --git a/tools/doc.go b/tools/doc.go
deleted file mode 100644
index c94c1a8..0000000
--- a/tools/doc.go
+++ /dev/null
@@ -1,3 +0,0 @@
-// Package tools specifies the development-time
-// dependencies of sally.
-package tools
diff --git a/tools/go.mod b/tools/go.mod
deleted file mode 100644
index e899c7d..0000000
--- a/tools/go.mod
+++ /dev/null
@@ -1,27 +0,0 @@
-module go.uber.org/sally/tools
-
-require (
- github.com/mgechev/revive v1.3.2
- honnef.co/go/tools v0.4.3
-)
-
-require (
- github.com/BurntSushi/toml v1.2.1 // indirect
- github.com/chavacava/garif v0.0.0-20230519080132-4752330f72df // indirect
- github.com/fatih/color v1.15.0 // indirect
- github.com/fatih/structtag v1.2.0 // indirect
- github.com/mattn/go-colorable v0.1.13 // indirect
- github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/mattn/go-runewidth v0.0.14 // indirect
- github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 // indirect
- github.com/mitchellh/go-homedir v1.1.0 // indirect
- github.com/olekukonko/tablewriter v0.0.5 // indirect
- github.com/pkg/errors v0.9.1 // indirect
- github.com/rivo/uniseg v0.4.4 // indirect
- golang.org/x/exp/typeparams v0.0.0-20230522175609-2e198f4a06a1 // indirect
- golang.org/x/mod v0.10.0 // indirect
- golang.org/x/sys v0.8.0 // indirect
- golang.org/x/tools v0.9.1 // indirect
-)
-
-go 1.19
diff --git a/tools/go.sum b/tools/go.sum
deleted file mode 100644
index b5d6c2c..0000000
--- a/tools/go.sum
+++ /dev/null
@@ -1,58 +0,0 @@
-github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak=
-github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
-github.com/chavacava/garif v0.0.0-20230519080132-4752330f72df h1:1uGdlpQT0irrGcFFOUuitqSCE6BjttfHd+k3k9OQ0fg=
-github.com/chavacava/garif v0.0.0-20230519080132-4752330f72df/go.mod h1:cFP7fAFavJ2DrYBmZYBETNKwSTFJiOIirm5N4/PqY/I=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
-github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
-github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4=
-github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94=
-github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
-github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
-github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
-github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517 h1:zpIH83+oKzcpryru8ceC6BxnoG8TBrhgAvRg8obzup0=
-github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg=
-github.com/mgechev/revive v1.3.2 h1:Wb8NQKBaALBJ3xrrj4zpwJwqwNA6nDpyJSEQWcCka6U=
-github.com/mgechev/revive v1.3.2/go.mod h1:UCLtc7o5vg5aXCwdUTU1kEBQ1v+YXPAkYDIDXbrs5I0=
-github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
-github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
-github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
-github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
-github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY=
-github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-golang.org/x/exp/typeparams v0.0.0-20230522175609-2e198f4a06a1 h1:pnP8r+W8Fm7XJ8CWtXi4S9oJmPBTrkfYN/dNbaPj6Y4=
-golang.org/x/exp/typeparams v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
-golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
-golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
-golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo=
-golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.4.3 h1:o/n5/K5gXqk8Gozvs2cnL0F2S1/g1vcGCAx2vETjITw=
-honnef.co/go/tools v0.4.3/go.mod h1:36ZgoUOrqOk1GxwHhyryEkq8FQWkUO2xGuSMhUCcdvA=
diff --git a/tools/tools.go b/tools/tools.go
deleted file mode 100644
index 437b62d..0000000
--- a/tools/tools.go
+++ /dev/null
@@ -1,9 +0,0 @@
-//go:build tools
-// +build tools
-
-package tools
-
-import (
- _ "github.com/mgechev/revive"
- _ "honnef.co/go/tools/cmd/staticcheck"
-)