48 lines
1.5 KiB
Bash
Executable File
48 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Documentation: serve the pages, and re-render the diagrams.
|
|
#
|
|
# Usage: docs.sh serve [port] | graphs [theme]
|
|
#
|
|
# The docs are a static SPA — index.html plus data/*.md read at runtime — so
|
|
# they need a server only because fetch() refuses file:// origins. Any static
|
|
# server does; python is already a hard dependency here (build.py is python), so
|
|
# there is no reason to reach for docker the way rig does.
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
DOCS_DIR="$ROOT_DIR/docs"
|
|
|
|
PYTHON="${PYTHON:-python3}"
|
|
PORT="${DOCS_PORT:-8080}"
|
|
|
|
serve() {
|
|
[ -n "${1:-}" ] && PORT="$1"
|
|
if [ ! -f "$DOCS_DIR/index.html" ]; then
|
|
echo "no docs/index.html" >&2
|
|
exit 1
|
|
fi
|
|
echo "docs on http://localhost:${PORT}/"
|
|
echo " (ctrl-c to stop; nothing is installed and nothing persists)"
|
|
cd "$DOCS_DIR"
|
|
exec "$PYTHON" -m http.server "$PORT"
|
|
}
|
|
|
|
# Re-render docs/graphs/*.dot through every theme. The sources carry structure;
|
|
# the palette lives in docs/graphs/themes/*.gvpr. See docs/graphs/README.md.
|
|
graphs() {
|
|
if [ ! -x "$DOCS_DIR/graphs/render.sh" ]; then
|
|
echo "no docs/graphs/render.sh" >&2
|
|
exit 1
|
|
fi
|
|
exec bash "$DOCS_DIR/graphs/render.sh" "$@"
|
|
}
|
|
|
|
case "${1:-serve}" in
|
|
serve) shift || true; serve "$@" ;;
|
|
graphs) shift || true; graphs "$@" ;;
|
|
# `make docs 8090` is the obvious thing to type, so take it.
|
|
''|*[!0-9]*) echo "usage: $0 [serve [port]|graphs [theme]]" >&2; exit 1 ;;
|
|
*) serve "$1" ;;
|
|
esac
|