.PHONY: test fmt lint fmt-check check build clean all docker hooks # Version number VERSION := 0.0.1 # Build variables GIT_REVISION := $(shell git rev-parse HEAD 2>/dev/null || echo "unknown") # Linker flags LDFLAGS := -X 'git.eeqj.de/sneak/vaultik/internal/globals.Version=$(VERSION)' \ -X 'git.eeqj.de/sneak/vaultik/internal/globals.Commit=$(GIT_REVISION)' # Default target all: vaultik # Run tests test: go test -race -timeout 30s ./... # Check if code is formatted (read-only) fmt-check: @test -z "$$(gofmt -l .)" || (echo "Files not formatted:" && gofmt -l . && exit 1) # Format code fmt: go fmt ./... # Run linter lint: golangci-lint run ./... # Build binary vaultik: internal/*/*.go cmd/vaultik/*.go go build -ldflags "$(LDFLAGS)" -o $@ ./cmd/vaultik # Clean build artifacts clean: rm -f vaultik go clean # Run tests with coverage test-coverage: go test -v -coverprofile=coverage.out ./... go tool cover -html=coverage.out -o coverage.html # Run integration tests test-integration: go test -v -tags=integration ./... local: VAULTIK_CONFIG=$(HOME)/etc/vaultik/config.yml ./vaultik snapshot --debug list 2>&1 VAULTIK_CONFIG=$(HOME)/etc/vaultik/config.yml ./vaultik snapshot --debug create 2>&1 install: vaultik cp ./vaultik $(HOME)/bin/ # Run all checks (formatting, linting, tests) without modifying files check: fmt-check lint test # Build Docker image docker: docker build -t vaultik . # Install pre-commit hook hooks: @printf '#!/bin/sh\nset -e\n' > .git/hooks/pre-commit @printf 'go mod tidy\ngo fmt ./...\ngit diff --exit-code -- go.mod go.sum || { echo "go mod tidy changed files; please stage and retry"; exit 1; }\n' >> .git/hooks/pre-commit @printf 'make check\n' >> .git/hooks/pre-commit @chmod +x .git/hooks/pre-commit