docs(ci): Front-Matter + CI-Docs + YT-Sync vorbereitet (MP-7)

This commit is contained in:
2025-10-22 11:11:10 +02:00
parent 79c9d4a71a
commit 1bdd5c38aa
13 changed files with 310 additions and 2 deletions
+30
View File
@@ -0,0 +1,30 @@
#!/usr/bin/env bash
set -euo pipefail
err=0
has() { grep -q "$2" "$1" || { echo "[DRIFT] '$2' fehlt in $1"; err=1; }; }
miss() { grep -q "$2" "$1" && { echo "[DRIFT] Veralteter Begriff '$2' in $1"; err=1; }; }
# Quelle der Wahrheit: Spring Cloud Gateway
has docs/overview/system-overview.md "Spring Cloud Gateway"
has docs/architecture/adr/0007-api-gateway-pattern-de.md "Spring Cloud Gateway"
miss docs/architecture/adr/0007-api-gateway-pattern-de.md "Ktor"
# C4: Container muss Technology korrekt führen
has docs/architecture/c4/02-container-de.puml "Spring Cloud Gateway"
miss docs/architecture/c4/02-container-de.puml "Ktor"
# Verbiete versehentlich verbliebene englische ADR/C4 ohne -de
if ls docs/architecture/adr/*.md 2>/dev/null | grep -E -v '-de\.md$' >/dev/null; then
echo "[DRIFT] Englische ADR-Dateien ohne -de gefunden in docs/architecture/adr/"
ls docs/architecture/adr/*.md | grep -E -v '-de\.md$' || true
err=1
fi
if ls docs/architecture/c4/*.puml 2>/dev/null | grep -E -v '-de\.puml$' >/dev/null; then
echo "[DRIFT] Englische C4-Dateien ohne -de gefunden in docs/architecture/c4/"
ls docs/architecture/c4/*.puml | grep -E -v '-de\.puml$' || true
err=1
fi
exit $err
+9
View File
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -euo pipefail
mkdir -p build/diagrams
shopt -s nullglob
for f in docs/architecture/c4/*.puml; do
docker run --rm -v "$PWD":/data plantuml/plantuml -tsvg "/data/$f" -o "/data/build/diagrams"
echo "Rendered build/diagrams/$(basename "${f%.puml}").svg"
done
+33
View File
@@ -0,0 +1,33 @@
import os, re, yaml, json
from glob import glob
try:
import jsonschema
except ImportError:
# GitHub Actions step will install this before running; provide friendlier message if missing
raise SystemExit("[FM] jsonschema package not installed. Please run: pip install jsonschema pyyaml")
SCHEMA_PATH = 'docs/.frontmatter.schema.json'
FM_REGEX = re.compile(r'^---\n(.*?)\n---', re.S)
with open(SCHEMA_PATH, encoding='utf-8') as f:
schema = json.load(f)
errors = 0
for path in glob('docs/**/*.md', recursive=True):
# Skip generated or non-content files if any (none by default)
with open(path, 'r', encoding='utf-8') as fh:
content = fh.read()
m = FM_REGEX.search(content)
if not m:
print(f"[FM] fehlt: {path}")
errors = 1
continue
try:
fm = yaml.safe_load(m.group(1)) or {}
jsonschema.validate(fm, schema)
except Exception as e:
print(f"[FM] invalid in {path}: {e}")
errors = 1
exit(errors)
+8
View File
@@ -0,0 +1,8 @@
extends: existence
message: "Veralteter Begriff: '%s'"
level: error
ignorecase: true
scope: text
nonword: true
tokens:
- Ktor