COMPOSE := docker compose GO := $(if $(shell command -v go),,docker run --rm -v $(CURDIR):/src -v usoscal-gomod:/go/pkg/mod -v usoscal-gocache:/root/.cache -w /src golang:1.27) go LINT := $(GO) run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.14.0 .PHONY: env recreate rebuild restart logs down fmt check test build fmt: $(GO) mod tidy $(LINT) fmt check: $(LINT) run $(MAKE) test test: $(GO) test -race ./... build: $(COMPOSE) build api env: @fresh=; test -f .env || { cp .env.example .env; fresh=1; }; \ if ! test -f docker-compose.override.yml; then \ cp docker-compose.override.yml.example docker-compose.override.yml; \ for port in $$(sed -n 's/.*127\.0\.0\.1:\([0-9]*\):.*/\1/p' docker-compose.override.yml | sort -u); do \ random=$$((20000 + $$(od -An -N2 -tu2 /dev/urandom) % 40000)); \ sed "s/127\.0\.0\.1:$$port:/127.0.0.1:$$random:/" docker-compose.override.yml > docker-compose.override.yml.tmp && mv docker-compose.override.yml.tmp docker-compose.override.yml; \ test -z "$$fresh" || { sed "s|localhost:$$port/|localhost:$$random/|" .env > .env.tmp && mv .env.tmp .env; }; \ done; \ fi recreate: $(COMPOSE) up -d --force-recreate rebuild: build $(COMPOSE) up -d restart: $(COMPOSE) restart logs: $(COMPOSE) logs -f --tail=100 down: $(COMPOSE) down