Files
hugo_docker/site/entrypoint.sh
T
jonnybravo cfb0a60b3b
Test & Deploy Hugo Docker CMS / test-and-deploy (push) Successful in 5m17s
Molecule 7/7: ansible_remote_tmp fix
2026-09-10 09:52:09 +02:00

96 lines
2.9 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"
# Architektur erkennen (x86_64 / arm64 Raspberry Pi etc.)
case "$(uname -m)" in
x86_64|amd64) PAGEFIND_ARCH="x86_64" ;;
aarch64|arm64) PAGEFIND_ARCH="aarch64" ;;
*) PAGEFIND_ARCH="x86_64" ;;
esac
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}-${PAGEFIND_ARCH}-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"