#!/bin/sh # Re-render every diagram in diagrams/*.mmd to a committed SVG beside it, then # rebuild index.html so the viewer carries the new pictures. # # mermaid-cli drives a real browser through puppeteer. It downloads its own # chrome-headless-shell by default, which fails behind a proxy and wastes # 150 MB; PUPPETEER_EXECUTABLE_PATH points it at the system chromium instead. # --no-sandbox is required because that chromium is not the one puppeteer # provisioned and has no sandbox helper of its own here. # # sh docs/architecture/render.sh # # Run it from anywhere. A parse error in one file leaves the others alone and # prints FAIL with the mermaid error, which is the only way this repo has to # syntax-check a .mmd. set -eu here=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) dia="$here/diagrams" cfg=$(mktemp) trap 'rm -f "$cfg"' EXIT printf '{"args":["--no-sandbox","--disable-gpu"]}' > "$cfg" : "${PUPPETEER_EXECUTABLE_PATH:=$(command -v chromium || command -v chromium-browser || command -v google-chrome-stable || true)}" if [ -z "$PUPPETEER_EXECUTABLE_PATH" ]; then echo "render.sh: no chromium found. Install one, or set PUPPETEER_EXECUTABLE_PATH." >&2 exit 1 fi export PUPPETEER_EXECUTABLE_PATH for f in "$dia"/*.mmd; do n=$(basename "$f" .mmd) err=$(mktemp) if npx --yes @mermaid-js/mermaid-cli@11 -p "$cfg" -t dark -b '#0e1116' \ -i "$f" -o "$dia/$n.svg" >/dev/null 2>"$err" && [ -s "$dia/$n.svg" ]; then echo "OK $n" else echo "FAIL $n" grep -m1 -A3 'Parse error' "$err" || tail -3 "$err" fi rm -f "$err" done python3 "$here/build_viewer.py" # The only check the viewer has. A TypeError in a renderer shows as a blank # panel, not as an error, so run every view against a DOM stub before shipping. if command -v node >/dev/null 2>&1; then node "$here/check_viewer.js" || exit 1 else echo "SKIP check_viewer.js: no node" fi