make targets each do one thing now: lint, fmt, fmt-check, test. Use 'make check' for combined lint + fmt-check + test (the standard pre-commit gate). Release builds are pure-Go (CGO_ENABLED=0) cross-compiling to linux/darwin × amd64/arm64.
81 lines
2.0 KiB
Makefile
81 lines
2.0 KiB
Makefile
.PHONY: all check test lint fmt fmt-check build clean deps test-coverage test-integration local install release release-snapshot
|
||
|
||
# Version number
|
||
VERSION := 1.0.0-rc.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
|
||
|
||
# Combined pre-commit/CI gate: lint, format check, then tests.
|
||
check: lint fmt-check test
|
||
|
||
# Run tests only.
|
||
test:
|
||
@echo "Running tests..."
|
||
@if ! go test -v -timeout 10s ./... 2>&1; then \
|
||
echo ""; \
|
||
echo "TEST FAILURES DETECTED"; \
|
||
echo "Run 'go test -v ./internal/database' to see database test details"; \
|
||
exit 1; \
|
||
fi
|
||
|
||
# Check if code is formatted.
|
||
fmt-check:
|
||
@if [ -n "$$(go fmt ./...)" ]; then \
|
||
echo "Error: Code is not formatted. Run 'make fmt' to fix."; \
|
||
exit 1; \
|
||
fi
|
||
|
||
# Format code.
|
||
fmt:
|
||
go fmt ./...
|
||
|
||
# Run linter only.
|
||
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
|
||
|
||
# Install dependencies.
|
||
deps:
|
||
go mod download
|
||
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||
|
||
# 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/
|
||
|
||
# Build and publish release artifacts (linux/darwin × amd64/arm64) via goreleaser.
|
||
release:
|
||
goreleaser release --clean
|
||
|
||
# Dry-run a release build without publishing or tagging.
|
||
release-snapshot:
|
||
goreleaser release --clean --snapshot
|