From f5d54e5be62072c0097fce439afa89ab3e399e4e Mon Sep 17 00:00:00 2001 From: Simon Pasquier Date: Wed, 24 Apr 2019 14:18:40 +0200 Subject: [PATCH] *: enable golangci-lint (#5437) * *: enable golangci-lint Signed-off-by: Simon Pasquier * Remove freebsd from supported platforms for lint Signed-off-by: Simon Pasquier * Update CONTRIBUTING.md Signed-off-by: Simon Pasquier * Update CONTRIBUTING.md Signed-off-by: Simon Pasquier * Add common-staticcheck for compatibility Signed-off-by: Simon Pasquier --- .circleci/config.yml | 2 +- .gitignore | 1 + .golangci.yml | 8 ++++++++ .travis.yml | 2 +- CONTRIBUTING.md | 2 ++ Makefile | 4 ---- Makefile.common | 36 +++++++++++++++++++----------------- 7 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 .golangci.yml diff --git a/.circleci/config.yml b/.circleci/config.yml index 2bbf7cf4951..ea8b1804e99 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -15,7 +15,7 @@ jobs: steps: - checkout - run: make promu - - run: make check_license style unused staticcheck build check_assets + - run: make check_license style unused lint build check_assets - run: command: | curl -s -L https://github.com/protocolbuffers/protobuf/releases/download/v3.5.1/protoc-3.5.1-linux-x86_64.zip > /tmp/protoc.zip diff --git a/.gitignore b/.gitignore index 142a637cced..de38f8dc750 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,6 @@ benchmark.txt !/.travis.yml !/.promu.yml +!/.golangci.yml /documentation/examples/remote_storage/remote_storage_adapter/remote_storage_adapter /documentation/examples/remote_storage/example_write_adapter/example_writer_adapter diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000000..fd975b2dd77 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,8 @@ +run: + modules-download-mode: vendor + +# Run only staticcheck for now. Additional linters will be enabled one-by-one. +linters: + enable: + - staticcheck + disable-all: true diff --git a/.travis.yml b/.travis.yml index 61ee373a0ce..f1e2287aaef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,5 +14,5 @@ before_install: - travis_retry make deps script: -- make check_license style unused test staticcheck check_assets +- make check_license style unused test lint check_assets - git diff --exit-code diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a1042960a18..e2277a78880 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,6 +40,8 @@ go build ./cmd/prometheus/ make test # Make sure all the tests pass before you commit and push :) ``` +We use `golangci-lint`[https://github.com/golangci/golangci-lint] for linting the code. If it reports an issue and you think that the warning needs to be disregarded or is a false-positive, you can add a special comment `//nolint:linter1[,linter2,...]` before the offending line. Use this sparingly though, fixing the code to comply with the linter's recommendation is in general the preferred course of action. + All our issues are regularly tagged so that you can also filter down the issues involving the components you want to work on. For our labeling policy refer [the wiki page](https://github.com/prometheus/prometheus/wiki/Label-Names-and-Descriptions). ## Pull Request Checklist diff --git a/Makefile b/Makefile index ae0d3d16f73..6b13f9b67c3 100644 --- a/Makefile +++ b/Makefile @@ -16,10 +16,6 @@ DOCKER_ARCHS ?= amd64 armv7 arm64 include Makefile.common -STATICCHECK_IGNORE = \ - github.com/prometheus/prometheus/pkg/textparse/promlex.l.go:SA4006 \ - github.com/prometheus/prometheus/pkg/textparse/openmetricslex.l.go:SA4006 - DOCKER_IMAGE_NAME ?= prometheus .PHONY: assets diff --git a/Makefile.common b/Makefile.common index 873964fb4ae..73052b3c09c 100644 --- a/Makefile.common +++ b/Makefile.common @@ -72,14 +72,13 @@ endif PROMU_VERSION ?= 0.3.0 PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz -STATICCHECK := -# staticcheck only supports linux, freebsd, darwin and windows platforms on i386/amd64 +GOLANGCI_LINT := +GOLANGCI_LINT_VERSION ?= v1.16.0 +# golangci-lint only supports linux, darwin and windows platforms on i386/amd64. # windows isn't included here because of the path separator being different. -ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin)) +ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) ifeq ($(GOHOSTARCH),$(filter $(GOHOSTARCH),amd64 i386)) - STATICCHECK := $(FIRST_GOPATH)/bin/staticcheck - STATICCHECK_VERSION ?= 2019.1 - STATICCHECK_URL := https://github.com/dominikh/go-tools/releases/download/$(STATICCHECK_VERSION)/staticcheck_$(GOHOSTOS)_$(GOHOSTARCH) + GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint endif endif @@ -107,7 +106,7 @@ endif %: common-% ; .PHONY: common-all -common-all: precheck style check_license staticcheck unused build test +common-all: precheck style check_license lint unused build test .PHONY: common-style common-style: @@ -159,21 +158,24 @@ common-vet: @echo ">> vetting code" GO111MODULE=$(GO111MODULE) $(GO) vet $(GOOPTS) $(pkgs) -.PHONY: common-staticcheck -common-staticcheck: $(STATICCHECK) -ifdef STATICCHECK - @echo ">> running staticcheck" - chmod +x $(STATICCHECK) +.PHONY: common-lint +common-lint: $(GOLANGCI_LINT) +ifdef GOLANGCI_LINT + @echo ">> running golangci-lint" ifdef GO111MODULE # 'go list' needs to be executed before staticcheck to prepopulate the modules cache. # Otherwise staticcheck might fail randomly for some reason not yet explained. GO111MODULE=$(GO111MODULE) $(GO) list -e -compiled -test=true -export=false -deps=true -find=false -tags= -- ./... > /dev/null - GO111MODULE=$(GO111MODULE) $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) + GO111MODULE=$(GO111MODULE) $(GOLANGCI_LINT) run $(pkgs) else - $(STATICCHECK) -ignore "$(STATICCHECK_IGNORE)" $(pkgs) + $(GOLANGCI_LINT) run $(pkgs) endif endif +# For backward-compatibility. +.PHONY: common-staticcheck +common-staticcheck: lint + .PHONY: common-unused common-unused: $(GOVENDOR) ifdef GOVENDOR @@ -241,10 +243,10 @@ proto: @echo ">> generating code from proto files" @./scripts/genproto.sh -ifdef STATICCHECK -$(STATICCHECK): +ifdef GOLANGCI_LINT +$(GOLANGCI_LINT): mkdir -p $(FIRST_GOPATH)/bin - curl -s -L $(STATICCHECK_URL) > $(STATICCHECK) + curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION) endif ifdef GOVENDOR