- Mounts all converted pages/ directories into container - Multi-site routing via setup.php hostname mapping - Port 12000 exposed for development access All 21 mdbook sites converted to Grav format: - charters.turnsys.com (199 pages) - plan.afabn.org, plan.ap4ap.org, plan.ezeda.org, plan.ezpodstack.org - plan.hfnoc.net, plan.knownelement.com (7 pages) - plan.meetmorse.com, plan.merchantsofhope.org, plan.rackrental.net - plan.redwfo.com, plan.rwscp.net, plan.sidedoorgroup.org - plan.sol-calc.com, plan.suborbital-systems.com (2 pages) - plan.teamrental.net, plan.thecampustradingcompany.com - plan.thepeernet.com, plan.turnsys.com - plan.yourdreamnamehere.com, plan.startinglineproductions.com (10 pages) Assisted-by: GLM-5 via Crush <crush@charm.land>
96 lines
2.4 KiB
Bash
Executable File
96 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Convert mdbook to Grav format in-place
|
|
# Usage: convert-mdbook-to-grav.sh <repo_path>
|
|
|
|
REPO="$1"
|
|
SRC="$REPO/src"
|
|
|
|
if [ ! -d "$SRC" ]; then
|
|
echo "ERROR: No src/ directory in $REPO"
|
|
exit 1
|
|
fi
|
|
|
|
cd "$REPO" || exit 1
|
|
|
|
echo "Converting: $REPO"
|
|
|
|
# Parse SUMMARY.md to get page order
|
|
SUMMARY="$SRC/SUMMARY.md"
|
|
if [ ! -f "$SUMMARY" ]; then
|
|
echo "ERROR: No SUMMARY.md found"
|
|
exit 1
|
|
fi
|
|
|
|
# Create Grav pages directory structure
|
|
# mdbook: src/chapter/file.md -> Grav: pages/02.chapter/file.md (with frontmatter)
|
|
|
|
# Step 1: Rename src/ to pages/ temporarily
|
|
mv src pages_tmp
|
|
|
|
# Step 2: Create proper Grav structure
|
|
mkdir -p pages
|
|
|
|
# Step 3: Process each markdown file
|
|
ORDER=1
|
|
find pages_tmp -name "*.md" -type f | while read MD_FILE; do
|
|
REL_PATH="${MD_FILE#pages_tmp/}"
|
|
DIRNAME=$(dirname "$REL_PATH")
|
|
BASENAME=$(basename "$REL_PATH" .md)
|
|
|
|
# Create numbered folder (01.home, 02.chapter, etc.)
|
|
if [ "$BASENAME" = "introduction" ] || [ "$BASENAME" = "Introduction" ]; then
|
|
FOLDER_NAME="01.home"
|
|
ORDER=1
|
|
elif [ "$BASENAME" = "SUMMARY" ]; then
|
|
# Skip SUMMARY.md - Grav doesn't need it
|
|
continue
|
|
else
|
|
ORDER=$((ORDER + 1))
|
|
FOLDER_NAME=$(printf "%02d.%s" $ORDER "$BASENAME")
|
|
fi
|
|
|
|
mkdir -p "pages/$FOLDER_NAME"
|
|
|
|
# Add Grav frontmatter if not present
|
|
TARGET_FILE="pages/$FOLDER_NAME/default.md"
|
|
|
|
# Get title from first heading or filename
|
|
TITLE=$(grep -m1 "^#" "$MD_FILE" 2>/dev/null | sed 's/^#*\s*//' | head -1)
|
|
[ -z "$TITLE" ] && TITLE="$BASENAME"
|
|
|
|
# Check if file already has frontmatter
|
|
if head -1 "$MD_FILE" | grep -q "^---"; then
|
|
# Has frontmatter, copy as-is
|
|
cp "$MD_FILE" "$TARGET_FILE"
|
|
else
|
|
# Add frontmatter
|
|
{
|
|
echo "---"
|
|
echo "title: '$TITLE'"
|
|
echo "menu: '$TITLE'"
|
|
echo "---"
|
|
echo ""
|
|
cat "$MD_FILE"
|
|
} > "$TARGET_FILE"
|
|
fi
|
|
|
|
echo " Created: $FOLDER_NAME/default.md"
|
|
done
|
|
|
|
# Copy any non-md assets (images, etc.)
|
|
find pages_tmp -type f ! -name "*.md" | while read ASSET; do
|
|
REL_PATH="${ASSET#pages_tmp/}"
|
|
mkdir -p "pages/$(dirname "$REL_PATH")"
|
|
cp "$ASSET" "pages/$REL_PATH"
|
|
echo " Copied asset: $REL_PATH"
|
|
done
|
|
|
|
# Cleanup
|
|
rm -rf pages_tmp
|
|
|
|
# Remove mdbook-specific files
|
|
rm -f book.toml
|
|
|
|
echo "Conversion complete for $REPO"
|
|
echo "Files now in: $REPO/pages/"
|