check / check (push) Failing after 2s
script/loadtest [duration [clients]] (make loadtest, defaults 10s and 4) measures pixad in three scenarios: hit (one cached image), miss (a new source image every request) and herd (each new source image asked for by all clients at once). For each it prints vegeta's report (requests per second, p50/p95/p99 latency, status codes), pixad's peak resident memory and how many requests reached the origin. It is a benchmark, not run by script/check. The origin it uses, internal/loadtestorigin behind cmd/loadtest-origin, answers every path with one generated JPEG. Bad arguments are refused before the build. README.md says how to run and read it and keeps 1-5k r/s as a target not yet measured at scale. Model: opus-5-5
91 lines
2.3 KiB
Makefile
91 lines
2.3 KiB
Makefile
.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 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 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
|
|
lint:
|
|
@script/lint
|
|
|
|
# Run tests (30-second timeout)
|
|
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 tagged pixad:$(VERSION) and pixad:latest
|
|
docker-versioned:
|
|
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-versioned 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:
|
|
@script/install-precommit
|