89 lines
2.7 KiB
Bash
Executable File
89 lines
2.7 KiB
Bash
Executable File
#!/bin/sh
|
|
# Auto-Frontmatter für Hugo 0.165+
|
|
# Fügt fehlenden --- Titel-Block in .md-Dateien ein.
|
|
# Installiert zusätzlich Pagefind und hält den Suchindex im Watch-Modus aktuell.
|
|
|
|
CONTENT_DIR="/src/content"
|
|
PAGEFIND_DIR="/src/.pagefind"
|
|
PAGEFIND_BIN="$PAGEFIND_DIR/pagefind"
|
|
PAGEFIND_VERSION="v1.5.2"
|
|
|
|
for md in "$CONTENT_DIR"/*.md; do
|
|
[ -f "$md" ] || continue
|
|
first_line=$(head -1 "$md")
|
|
if [ "$first_line" != "---" ]; then
|
|
title=$(grep -m1 '^# ' "$md" | sed 's/^# //')
|
|
[ -z "$title" ] && title=$(basename "$md" .md)
|
|
date=$(date -r "$md" +%Y-%m-%d 2>/dev/null || date +%Y-%m-%d)
|
|
|
|
tmp="${md}.tmp"
|
|
{
|
|
echo "---"
|
|
echo "title: \"$title\""
|
|
echo "date: \"$date\""
|
|
echo "---"
|
|
echo
|
|
cat "$md"
|
|
} > "$tmp" && mv "$tmp" "$md"
|
|
|
|
# Besitzer zurückgeben an Host-User
|
|
chown "${HOST_UID}:${HOST_GID}" "$md" 2>/dev/null || true
|
|
|
|
echo "[frontmatter] $title"
|
|
fi
|
|
done
|
|
|
|
# ── Pagefind installieren (einmalig, persistent via site-Mount) ──
|
|
if [ ! -x "$PAGEFIND_BIN" ]; then
|
|
echo "[pagefind] installiere ${PAGEFIND_VERSION} ..."
|
|
mkdir -p "$PAGEFIND_DIR"
|
|
wget -q -O /tmp/pagefind.tar.gz \
|
|
"https://github.com/CloudCannon/pagefind/releases/download/${PAGEFIND_VERSION}/pagefind-${PAGEFIND_VERSION}-x86_64-unknown-linux-musl.tar.gz" \
|
|
&& tar -xzf /tmp/pagefind.tar.gz -C "$PAGEFIND_DIR" \
|
|
&& chmod +x "$PAGEFIND_BIN" \
|
|
&& rm -f /tmp/pagefind.tar.gz \
|
|
&& echo "[pagefind] installiert: $("$PAGEFIND_BIN" --version 2>&1 | head -1)"
|
|
fi
|
|
|
|
# ── Pagefind-Index (neu) bauen ──
|
|
build_pagefind() {
|
|
if [ -x "$PAGEFIND_BIN" ] && [ -d /src/public ]; then
|
|
"$PAGEFIND_BIN" --site /src/public --output-subdir pagefind >/dev/null 2>&1 \
|
|
&& echo "[pagefind] Index aktualisiert"
|
|
fi
|
|
}
|
|
|
|
# Hugo im Hintergrund starten (Watch-Modus)
|
|
hugo server \
|
|
--watch \
|
|
--bind=0.0.0.0 \
|
|
--port=1313 \
|
|
--disableFastRender \
|
|
--baseURL=https://localhost:5443/ \
|
|
--renderStaticToDisk &
|
|
|
|
HUGO_PID=$!
|
|
|
|
# Warten bis der erste Build fertig ist, dann initial indizieren
|
|
i=0
|
|
while [ $i -lt 60 ]; do
|
|
[ -f /src/public/index.html ] && break
|
|
sleep 1
|
|
i=$((i + 1))
|
|
done
|
|
build_pagefind
|
|
|
|
# ── Watch-Loop: Pagefind neu bauen, wenn sich HTML in public ändert ──
|
|
PAGEFIND_MARKER=/tmp/pagefind.marker
|
|
touch "$PAGEFIND_MARKER"
|
|
while true; do
|
|
sleep 2
|
|
if find /src/public -name '*.html' -newer "$PAGEFIND_MARKER" 2>/dev/null | grep -q .; then
|
|
touch "$PAGEFIND_MARKER"
|
|
build_pagefind
|
|
fi
|
|
done &
|
|
|
|
# Hugo im Vordergrund halten; bei dessen Ende den Container beenden
|
|
wait "$HUGO_PID"
|