diff --git a/.forgejo/workflows/tests.yml b/.forgejo/workflows/tests.yml index d448a87..14b9edf 100644 --- a/.forgejo/workflows/tests.yml +++ b/.forgejo/workflows/tests.yml @@ -7,10 +7,17 @@ jobs: steps: - uses: actions/checkout@v3 - - name: golangci-lint - uses: https://github.com/golangci/golangci-lint-action@v2 + - name: Set up Go + uses: actions/setup-go@v3 with: - version: latest + go-version: '1.21' + cache: true + + - name: Install linters + run: make lint-install + + - name: Run linters + run: make lint tests: name: Tests diff --git a/.golangci.yml b/.golangci.yml index a271450..5459bde 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -24,6 +24,16 @@ linters-settings: govet: # report about shadowed variables check-shadowing: false + custom: + truecloudlab-linters: + path: bin/external_linters.so + original-url: git.frostfs.info/TrueCloudLab/linters.git + settings: + noliteral: + enable: true + target-methods: ["Fatal"] + disable-packages: ["req", "r"] + constants-package: "git.frostfs.info/TrueCloudLab/frostfs-http-gw/internal/logs" linters: enable: @@ -45,6 +55,7 @@ linters: - gofmt - whitespace - goimports + - truecloudlab-linters disable-all: true fast: false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4fde2a0..e97fc23 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -37,9 +37,21 @@ repos: - repo: local hooks: - - id: go-unit-tests - name: go unit tests - entry: make test - pass_filenames: false - types: [go] - language: system + - id: make-lint-install + name: install linters + entry: make lint-install + language: system + pass_filenames: false + + - id: make-lint + name: run linters + entry: make lint + language: system + pass_filenames: false + + - id: go-unit-tests + name: go unit tests + entry: make test + pass_filenames: false + types: [go] + language: system diff --git a/Makefile b/Makefile index 6b6fa72..c5296e1 100755 --- a/Makefile +++ b/Makefile @@ -3,7 +3,8 @@ REPO ?= $(shell go list -m) VERSION ?= $(shell git describe --tags --match "v*" --dirty --always --abbrev=8 2>/dev/null || cat VERSION 2>/dev/null || echo "develop") GO_VERSION ?= 1.20 -LINT_VERSION ?= 1.49.0 +LINT_VERSION ?= 1.54.0 +TRUECLOUDLAB_LINT_VERSION ?= 0.0.2 BUILD ?= $(shell date -u --iso=seconds) HUB_IMAGE ?= truecloudlab/frostfs-http-gw @@ -11,6 +12,10 @@ HUB_TAG ?= "$(shell echo ${VERSION} | sed 's/^v//')" METRICS_DUMP_OUT ?= ./metrics-dump.json +OUTPUT_LINT_DIR ?= $(shell pwd)/bin +LINT_DIR = $(OUTPUT_LINT_DIR)/golangci-lint-$(LINT_VERSION)-v$(TRUECLOUDLAB_LINT_VERSION) +TMP_DIR := .cache + # List of binaries to build. For now just one. BINDIR = bin DIRS = $(BINDIR) @@ -103,9 +108,23 @@ dirty-image: -f Dockerfile.dirty \ -t $(HUB_IMAGE)-dirty:$(HUB_TAG) . +# Install linters + lint-install: + @mkdir -p $(TMP_DIR) + @rm -rf $(TMP_DIR)/linters + @git -c advice.detachedHead=false clone --branch v$(TRUECLOUDLAB_LINT_VERSION) https://git.frostfs.info/TrueCloudLab/linters.git $(TMP_DIR)/linters + @@make -C $(TMP_DIR)/linters lib CGO_ENABLED=1 OUT_DIR=$(OUTPUT_LINT_DIR) + @rm -rf $(TMP_DIR)/linters + @rmdir $(TMP_DIR) 2>/dev/null || true + @CGO_ENABLED=1 GOBIN=$(LINT_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@v$(LINT_VERSION) + # Run linters lint: - @golangci-lint --timeout=5m run + @if [ ! -d "$(LINT_DIR)" ]; then \ + echo "Run make lint-install"; \ + exit 1; \ + fi + $(LINT_DIR)/golangci-lint --timeout=5m run # Run linters in Docker docker/lint: