#!/usr/bin/make -f # Common variables REPO ?= $(shell go list -m) VERSION ?= $(shell git describe --tags --dirty --match "v*" --always --abbrev=8 2>/dev/null || cat VERSION 2>/dev/null || echo "develop") GO_VERSION ?= 1.22 LINT_VERSION ?= 1.60.1 TRUECLOUDLAB_LINT_VERSION ?= 0.0.6 BINDIR = bin # Binaries to build CMDS = policy-reader BINS = $(addprefix $(BINDIR)/, $(CMDS)) OUTPUT_LINT_DIR ?= $(shell pwd)/bin LINT_DIR = $(OUTPUT_LINT_DIR)/golangci-lint-$(LINT_VERSION)-v$(TRUECLOUDLAB_LINT_VERSION) TMP_DIR := .cache .PHONY: all $(BINS) $(BINDIR) dep test lint pre-commit unpre-commit version clean # .deb package versioning OS_RELEASE = $(shell lsb_release -cs) PKG_VERSION ?= $(shell echo $(VERSION) | sed "s/^v//" | \ sed -E "s/(.*)-(g[a-fA-F0-9]{6,8})(.*)/\1\3~\2/" | \ sed "s/-/~/")-${OS_RELEASE} .PHONY: debpackage debclean # Make all binaries all: $(BINS) $(BINS): $(BINDIR) dep @echo "⇒ Build $@" CGO_ENABLED=0 \ go build -v -trimpath \ -ldflags "-X $(REPO)/internal/version.Version=$(VERSION)" \ -o $@ . # Run tests test: @go test ./... # 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: @if [ ! -d "$(LINT_DIR)" ]; then \ echo "Run make lint-install"; \ exit 1; \ fi $(LINT_DIR)/golangci-lint --timeout=5m run # Activate pre-commit hooks pre-commit: pre-commit install -t pre-commit -t commit-msg # Deactivate pre-commit hooks unpre-commit: pre-commit uninstall -t pre-commit -t commit-msg # Show current version version: @echo $(VERSION) # Clean up files clean: rm -rf .cache rm -rf $(BINDIR)