diff --git a/.golangci.yml b/.golangci.yml new file mode 100644 index 00000000..30b479c6 --- /dev/null +++ b/.golangci.yml @@ -0,0 +1,92 @@ +# This file was inspired by the golangci-lint one: +# https://github.com/golangci/golangci-lint/blob/master/.golangci.yml +run: + # default concurrency is a available CPU number + concurrency: 4 + + # timeout for analysis, e.g. 30s, 5m, default is 1m + timeout: 5m +linters-settings: + govet: + check-shadowing: true + golint: + min-confidence: 0 + gocyclo: + min-complexity: 20 + gocognit: + min-complexity: 100 + maligned: + suggest-new: true + dupl: + threshold: 100 + goconst: + min-len: 2 + min-occurrences: 2 + misspell: + locale: UK + lll: + line-length: 140 + gofmt: + simplify: false + gocritic: + enabled-tags: + - diagnostic + - experimental + - opinionated + - performance + - style + disabled-checks: + - wrapperFunc + - dupImport # https://github.com/go-critic/go-critic/issues/845 + - ifElseChain + - octalLiteral + - hugeParam + # lines: 100 + # statements: 100 + +linters: + # please, do not use `enable-all`: it's deprecated and will be removed soon. + # inverted configuration with `enable-all` and `disable` is not scalable during updates of golangci-lint + disable-all: true + enable: + - depguard + - dogsled + - gochecknoinits + - gocritic + - gocyclo + - gofmt + - goimports + - revive + - gosec + - govet + - ineffassign + - nakedret + - unconvert + - whitespace + - gocognit + - prealloc + +issues: + exclude-rules: + - path: _test\.go + linters: + - gocyclo + - errcheck + - dupl + - gosec + - goconst + - revive + - gocritic + - ineffassign + - govet + - path: main.go|handlers + linters: + - typecheck + new: false + +# golangci.com configuration +# https://github.com/golangci/golangci/wiki/Configuration +service: + golangci-lint-version: 1.52.x # use the fixed version to not introduce new linters unexpectedly + prepare: + - echo "here I can run custom commands, but no preparation needed for this repo" diff --git a/Makefile b/Makefile index 2cc2595c..3e87fe6e 100644 --- a/Makefile +++ b/Makefile @@ -21,6 +21,11 @@ debug: generate-debug go build -tags 'debug' -o $(BINPATH)/dp-frontend-dataset-controller -ldflags "-X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT) -X main.Version=$(VERSION)" HUMAN_LOG=1 DEBUG=1 $(BINPATH)/dp-frontend-dataset-controller +.PHONY: lint +lint: + go install github.com/golangci/golangci-lint/cmd/golangci-lint@v1.52.2 + golangci-lint run ./... + .PHONY: run run: HUMAN_LOG=1 go run -tags 'production' -ldflags "-X main.BuildTime=$(BUILD_TIME) -X main.GitCommit=$(GIT_COMMIT) -X main.Version=$(VERSION)" -race $(LDFLAGS) main.go diff --git a/ci/lint.yml b/ci/lint.yml new file mode 100644 index 00000000..e96a6da8 --- /dev/null +++ b/ci/lint.yml @@ -0,0 +1,18 @@ +--- + +platform: linux + +image_resource: + type: docker-image + source: + repository: golang + tag: 1.20.4 + +inputs: + - name: dp-frontend-dataset-controller + +caches: + - path: go/ + +run: + path: dp-frontend-dataset-controller/ci/scripts/lint.sh diff --git a/ci/scripts/lint.sh b/ci/scripts/lint.sh new file mode 100644 index 00000000..b72e901a --- /dev/null +++ b/ci/scripts/lint.sh @@ -0,0 +1,7 @@ +#!/bin/bash -eux + +cwd=$(pwd) + +pushd $cwd/dp-frontend-dataset-controller + make lint +popd