2026-05-05 09:33:51 -05:00
|
|
|
SHELL := /usr/bin/env bash
|
|
|
|
|
|
|
|
|
|
.PHONY: help
|
|
|
|
|
help:
|
2026-05-26 11:52:32 -05:00
|
|
|
@echo "make build — build server + frontend locally (sanity check)"
|
|
|
|
|
@echo "make check — type-check + go vet"
|
|
|
|
|
@echo "make audio-pull — copy source WAVs from Dropbox into content/audio/"
|
|
|
|
|
@echo "make audio — transcode each side WAV → Opus"
|
|
|
|
|
@echo "make images — convert content/images/*.jpg → WebP"
|
|
|
|
|
@echo "make artists — regenerate artists.json from audio.yaml"
|
|
|
|
|
@echo "make content — artists + images + audio"
|
2026-05-26 12:00:41 -05:00
|
|
|
@echo "make deploy-assets — rsync web/static/{audio,images}/ to sprade for production"
|
2026-05-05 09:33:51 -05:00
|
|
|
@echo "make tag V=patch|minor|major — bump version tag and push"
|
2026-05-26 11:52:32 -05:00
|
|
|
@echo "make prefetch — print sha256 + npmDepsHash + vendorHash for the homelab module"
|
|
|
|
|
|
|
|
|
|
.PHONY: audio-pull
|
|
|
|
|
audio-pull:
|
|
|
|
|
bin/pull-audio
|
|
|
|
|
|
|
|
|
|
.PHONY: audio
|
|
|
|
|
audio:
|
|
|
|
|
bin/build-audio
|
|
|
|
|
|
|
|
|
|
.PHONY: images
|
|
|
|
|
images:
|
|
|
|
|
bin/build-images
|
|
|
|
|
|
|
|
|
|
.PHONY: artists
|
|
|
|
|
artists:
|
|
|
|
|
bin/build-artists
|
|
|
|
|
|
|
|
|
|
.PHONY: content
|
|
|
|
|
content: artists images audio
|
2026-05-05 09:33:51 -05:00
|
|
|
|
2026-05-26 12:00:41 -05:00
|
|
|
.PHONY: deploy-assets
|
|
|
|
|
deploy-assets:
|
|
|
|
|
@if [ ! -d web/static/audio ] || [ -z "$$(ls web/static/audio 2>/dev/null)" ]; then \
|
|
|
|
|
echo "error: web/static/audio is empty. Run \`make audio\` first." >&2; exit 1; \
|
|
|
|
|
fi
|
|
|
|
|
@if [ ! -d web/static/images ] || [ -z "$$(ls web/static/images 2>/dev/null)" ]; then \
|
|
|
|
|
echo "error: web/static/images is empty. Run \`make images\` first." >&2; exit 1; \
|
|
|
|
|
fi
|
|
|
|
|
rsync -av --delete --progress web/static/audio/ deploy@sprade:/var/lib/docent/audio/
|
|
|
|
|
rsync -av --delete --progress web/static/images/ deploy@sprade:/var/lib/docent/images/
|
|
|
|
|
|
2026-05-05 09:33:51 -05:00
|
|
|
.PHONY: build
|
|
|
|
|
build:
|
|
|
|
|
cd web && npm install && npm run build
|
|
|
|
|
cd server && go build -o docent ./...
|
|
|
|
|
|
|
|
|
|
.PHONY: check
|
|
|
|
|
check:
|
|
|
|
|
cd web && npm run check
|
|
|
|
|
cd server && go vet ./...
|
|
|
|
|
|
|
|
|
|
.PHONY: tag
|
|
|
|
|
tag:
|
|
|
|
|
@if [ -z "$(V)" ]; then echo "usage: make tag V=patch|minor|major" >&2; exit 1; fi
|
|
|
|
|
@latest=$$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.0"); \
|
|
|
|
|
IFS=. read -r maj min pat <<< "$$latest"; \
|
|
|
|
|
case "$(V)" in \
|
|
|
|
|
major) maj=$$((maj+1)); min=0; pat=0 ;; \
|
|
|
|
|
minor) min=$$((min+1)); pat=0 ;; \
|
|
|
|
|
patch) pat=$$((pat+1)) ;; \
|
|
|
|
|
*) echo "V must be patch|minor|major" >&2; exit 1 ;; \
|
|
|
|
|
esac; \
|
|
|
|
|
new="v$${maj}.$${min}.$${pat}"; \
|
|
|
|
|
echo "tagging $$new"; \
|
|
|
|
|
git tag -a "$$new" -m "$$new"; \
|
|
|
|
|
git push --tags
|
|
|
|
|
|
|
|
|
|
.PHONY: prefetch
|
|
|
|
|
prefetch:
|
|
|
|
|
@latest=$$(git describe --tags --abbrev=0); \
|
|
|
|
|
url=$$(git remote get-url origin); \
|
|
|
|
|
echo "rev = $$latest"; \
|
|
|
|
|
echo "src hash:"; \
|
|
|
|
|
nix-prefetch-git "$$url" --rev "$$latest" --quiet | sed -n 's/.*"sha256": "\(.*\)".*/ \1/p'; \
|
|
|
|
|
echo ""; \
|
|
|
|
|
echo "Run \`nix build .#docent-frontend\` and \`nix build .#docent-server\` once to populate"; \
|
|
|
|
|
echo "npmDepsHash and vendorHash respectively (will fail on mismatch and print correct hash)."
|