Files
website/Makefile
Jimmy bf110d0bc7 Split compose dev/prod and relax contact form friction.
Use compose.dev.yaml and compose.prod.yaml with fixed Go cache mounts, block sudo make dev, build Air outside app/tmp for rootless Docker, soften English spam checks, and simplify contact error copy.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-07 11:41:13 +12:00

60 lines
1.7 KiB
Makefile

COMPOSE ?= docker compose
COMPOSE_DEV := $(COMPOSE) -f compose.dev.yaml
COMPOSE_PROD := $(COMPOSE) -f compose.prod.yaml
# Compose does not support nested ${VAR:-${HOME}/...}; set host cache paths here (override in .env).
-include .env
HOST_GOMODCACHE := $(if $(strip $(GOMODCACHE)),$(strip $(GOMODCACHE)),$(HOME)/go/pkg/mod)
HOST_GOCACHE := $(if $(strip $(GOCACHE)),$(strip $(GOCACHE)),$(HOME)/.cache/go-build)
export HOST_GOMODCACHE HOST_GOCACHE
DEV_ENV := env HOST_GOMODCACHE="$(HOST_GOMODCACHE)" HOST_GOCACHE="$(HOST_GOCACHE)"
DEV_RUN := $(DEV_ENV) $(COMPOSE_DEV) run --rm --no-deps -T dev
.PHONY: dev build up down generate tidy logs thumbs sync-media publish convert-videos
.DEFAULT_GOAL := dev
dev:
@test -f .env || cp -n .env.example .env
@if [ "$$(id -u)" = "0" ]; then \
echo "Do not run 'sudo make dev' — it creates root-owned files under app/ and breaks rootless Docker."; \
echo "Run: make dev"; \
exit 1; \
fi
$(DEV_ENV) $(COMPOSE_DEV) up --build dev
build:
$(COMPOSE_PROD) build website
up:
@test -f .env || cp -n .env.example .env
$(COMPOSE_PROD) up --build website
down:
-$(COMPOSE_DEV) down
-$(COMPOSE_PROD) down
generate:
$(DEV_RUN) sh -c "templ generate"
tidy:
$(DEV_RUN) go mod tidy
logs:
$(COMPOSE_DEV) logs -f dev
# Pre-build gallery thumbnails and video poster JPEGs (ffmpeg in dev image).
thumbs:
$(DEV_RUN) go run ./cmd/server -thumbs
# Copy photos and convert videos from upload/ into app/images/.
sync-media:
$(DEV_RUN) sh -c 'UPLOAD_DIR=/upload IMAGES_DIR=/app/images ./scripts/sync-media.sh $(ARGS)'
# sync-media then rebuild thumbs/hero derivatives under app/images/.
publish: sync-media thumbs
# Alias for sync-media (videos are converted as part of sync).
convert-videos: sync-media