Files
web/Makefile
T

59 lines
2.1 KiB
Makefile

HUGO ?= hugo
.PHONY: all build serve clean upload upload-check citations
all: build
# Fetch + cache CSL-JSON for the DOIs in data/publications.yaml.
# Cached results are committed, so `build` needs no network.
# make citations # fetch anything not yet cached
# make citations FORCE=1 # re-fetch everything
citations:
./scripts/fetch-citations.sh
# The hextra theme is a git submodule. Pull it if a fresh clone left
# themes/hextra/ empty; the marker file means this runs only when needed.
themes/hextra/theme.toml:
git submodule update --init --recursive
build: themes/hextra/theme.toml
$(HUGO) --minify
serve: themes/hextra/theme.toml
$(HUGO) server --buildDrafts --navigateToChanged
clean:
rm -rf public resources
# --- deploy configuration -------------------------------------------------
DEPLOY_HOST := ovh
DEPLOY_PATH := /var/www/levitation/
# Sync/editor cruft that must never be pushed (patterns are quoted so the
# shell does not expand them before rsync sees them).
DEPLOY_JUNK := --exclude='.syncthing.*.tmp' --exclude='.stfolder' \
--exclude='.stversions' --exclude='.DS_Store'
# The deploy root holds Hugo output only (out-of-band content lives on its own
# subdomain, files.levitation.wales), so --delete is unconditionally safe.
# --no-owner --no-group: the deploy user cannot chown/chgrp on the server, so
# do not try to preserve ownership (avoids "chgrp ... Operation not permitted").
RSYNC := rsync -avz --delete --no-owner --no-group $(DEPLOY_JUNK)
# Preview exactly what a deploy would add, change, and delete, without touching
# the server.
upload-check: build
$(RSYNC) --dry-run ./public/ $(DEPLOY_HOST):$(DEPLOY_PATH)
# Deploy to the VPS, but only from the main branch. `citations` runs first so
# a freshly added DOI is never deployed from a stale cache (do not run under
# `make -j`, which would not guarantee that ordering).
upload: citations build
@branch=$$(git symbolic-ref --short HEAD); \
if [ "$$branch" = "main" ]; then \
$(RSYNC) ./public/ $(DEPLOY_HOST):$(DEPLOY_PATH); \
else \
echo "Refusing to upload from branch '$$branch' (deploy only from main)."; \
exit 1; \
fi