All checks were successful
check / check (pull_request) Successful in 5m22s
Rewrites CI to use a multi-stage Dockerfile per REPO_POLICIES: - Lint stage: golangci/golangci-lint:v2.1.6-alpine runs make fmt-check and make lint - Build stage: golang:1.24.4-alpine runs make test, then builds binary with CGO enabled (required for mattn/go-sqlite3) - Runtime stage: alpine:3.21 copies binary, runs as non-root user All base images pinned by @sha256 hash. CI workflow simplified to just 'docker build .' since the Dockerfile already runs make check (fmt-check + lint + test). Makefile aligned with REPO_POLICIES: - check target uses prereqs (fmt-check lint test) - fmt-check is read-only (gofmt -l, not go fmt) - Added docker and hooks targets - test uses -race -timeout 30s Added .dockerignore for efficient build context.
70 lines
1.7 KiB
Makefile
70 lines
1.7 KiB
Makefile
.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
|