script/loadtest [duration [clients]], or make loadtest, is a benchmark that script/check does not run. It builds the image and vegeta from a pinned commit, then for each scenario starts a new pixad container and a new cmd/loadtest-origin container, an upstream host that answers every path with one generated JPEG: a cached image (hit), a new source image per request (miss), and each new source image asked for by all clients at once (herd). It prints vegeta's report, pixad's peak resident memory and the requests the origin got. The containers share a network in 203.0.113.0/24, as pixad refuses private and local upstream addresses. README.md says how to run and read it; TODO.md records a small baseline. 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
|