Some checks failed
check / check (push) Failing after 43s
Check for pkg-config at make-time; if present (Docker, existing nix-shell) run commands directly, otherwise wrap with nix-shell.
76 lines
2.2 KiB
Makefile
76 lines
2.2 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)
|
|
|
|
# Use nix-shell to provide CGO dependencies unless they are already available
|
|
# (e.g. inside a Docker build or an existing nix-shell).
|
|
HAS_PKGCONFIG := $(shell command -v pkg-config 2>/dev/null)
|
|
ifdef HAS_PKGCONFIG
|
|
NIX_RUN_PREFIX =
|
|
NIX_RUN_SUFFIX =
|
|
else
|
|
NIX_RUN_PREFIX = nix-shell -p pkg-config vips libheif golangci-lint git --run '
|
|
NIX_RUN_SUFFIX = '
|
|
endif
|
|
|
|
# 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_RUN_PREFIX)golangci-lint run$(NIX_RUN_SUFFIX)
|
|
|
|
# Run tests (30-second timeout)
|
|
test:
|
|
@echo "Running tests..."
|
|
$(NIX_RUN_PREFIX)CGO_ENABLED=1 go test -timeout 30s -v ./...$(NIX_RUN_SUFFIX)
|
|
|
|
# Build the binary
|
|
build:
|
|
@echo "Building pixad..."
|
|
$(NIX_RUN_PREFIX)CGO_ENABLED=1 go build -ldflags "$(LDFLAGS)" -o ./bin/pixad ./cmd/pixad$(NIX_RUN_SUFFIX)
|
|
|
|
# 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
|