.PHONY: bootstrap setup check lint test fmt fmt-check build clean docker docker-smoke docker-versioned docker-test devserver devserver-stop hooks loadtest 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 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 git --run ' NIX_RUN_SUFFIX = ' endif # Default target: run all checks check: @script/check bootstrap: @script/bootstrap setup: @script/setup # Check formatting without modifying files fmt-check: @script/fmt-check # Format code fmt: @script/fmt # Run linter (the lint phase of the Dockerfile) lint: @script/lint # Run tests (the test phase of the Dockerfile) test: @script/test # 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 (tagged via script/projectname) docker: @script/docker # Build the image, start it, and wait for its healthcheck (needs Docker; # not part of check) docker-smoke: @script/docker-smoke # Measure throughput, latency and peak memory with the default duration and # number of clients (needs Docker and Go; a benchmark, not part of check) loadtest: @script/loadtest # Build Docker image as `make docker` does, and also tag it pixa:$(VERSION) docker-versioned: @script/docker docker tag pixa pixa:$(VERSION) # Run tests in Docker, as `make test` does docker-test: @script/test # Run local dev server in Docker devserver: docker-versioned devserver-stop docker run -d --name pixad-dev -p 8080:8080 \ -v $(CURDIR)/config.dev.yml:/etc/pixa/config.yml:ro \ pixa: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: @script/install-precommit