pixa/Makefile
sneak 429926fb71 chore: use nix-shell for CGO-dependent Makefile targets
Wrap test, lint, and build targets with nix-shell to provide
pkg-config, vips, libheif, and golangci-lint automatically.
2026-02-25 20:08:04 +07:00

68 lines
2.0 KiB
Makefile

.PHONY: check lint test fmt fmt-check build clean docker docker-test devserver devserver-stop hooks
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
LDFLAGS := -X main.Version=$(VERSION)
# nix-shell wrapper for targets that need CGO dependencies (libvips, pkg-config)
NIX_SHELL := nix-shell -p pkg-config vips libheif golangci-lint git --run
# Default target: run all checks
check: fmt-check lint test
# Check formatting without modifying files
fmt-check:
@echo "Checking formatting..."
@test -z "$$(gofmt -l . | grep -v '^vendor/')" || (echo "Files need formatting:"; gofmt -l . | grep -v '^vendor/'; exit 1)
# Format code
fmt:
@echo "Formatting code..."
gofmt -w $$(find . -name '*.go' -not -path './vendor/*')
# Run linter
lint:
@echo "Running linter..."
$(NIX_SHELL) "golangci-lint run"
# Run tests (30-second timeout)
test:
@echo "Running tests..."
$(NIX_SHELL) "CGO_ENABLED=1 go test -timeout 30s -v ./..."
# Build the binary
build:
@echo "Building pixad..."
$(NIX_SHELL) "CGO_ENABLED=1 go build -ldflags '$(LDFLAGS)' -o ./bin/pixad ./cmd/pixad"
# Clean build artifacts
clean:
rm -rf bin/
rm -rf ./data
# Build Docker image
docker:
docker build --build-arg VERSION=$(VERSION) -t pixad:$(VERSION) -t pixad:latest .
# Run tests in Docker (needed for CGO/libvips)
docker-test:
docker build --target builder --build-arg VERSION=$(VERSION) -t pixad-builder .
docker run --rm pixad-builder sh -c "CGO_ENABLED=1 GOTOOLCHAIN=auto go test -v ./..."
# Run local dev server in Docker
devserver: docker devserver-stop
docker run -d --name pixad-dev -p 8080:8080 \
-v $(CURDIR)/config.dev.yml:/etc/pixa/config.yml:ro \
pixad:latest
@echo "pixad running at http://localhost:8080"
# Stop dev server
devserver-stop:
-docker stop pixad-dev 2>/dev/null
-docker rm pixad-dev 2>/dev/null
# Install pre-commit hook
hooks:
@printf '#!/bin/sh\nset -e\n' > .git/hooks/pre-commit
@printf 'make check\n' >> .git/hooks/pre-commit
@chmod +x .git/hooks/pre-commit