feat: initialize serverAppConfigs with podman stacks for Dankserver and Dankclaw
- Dankserver stack: RomM, Copyparty, Calibre-Web, node-exporter - Dankclaw stack: Gluetun VPN (SearXNG tunnel), SearXNG+Valkey, ComfyUI (CPU backend), OpenWebUI, Hermes, Gitea+Postgres (migrated), Caddy reverse proxy, Grafana+Prometheus+Loki+Alloy observability - Caddyfiles with .local hostname convention and basicauth homepage - bind-mount storage policy, no named volumes - deploy.sh mirroring vllmScripts git workflow (push -> pull -> restart -> health) - docs/ Obsidian vault: per-service docs from frank-default-small research subagents (promtail EOL -> Alloy; gitea SECRET_KEY preservation; ComfyUI --cpu) - bats test suite at 6 seams — 22 tests green
This commit is contained in:
commit
e3eb5334cb
57 files changed
+3033
No files matched your search
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bats
|
||||
# Seam: documentation completeness.
|
||||
# Every service defined in a compose.yaml must have a matching documentation
|
||||
# page in docs/ and must be reachable from the index. This is the "docs first"
|
||||
# contract of this repo: no service ships without documentation.
|
||||
|
||||
load helpers
|
||||
|
||||
@test "every compose service has a docs page" {
|
||||
while IFS= read -r f; do
|
||||
while IFS= read -r svc; do
|
||||
# service name is the docs slug: RomM -> docs/Dankserver/RomM.md
|
||||
# matched case-insensitively (vault uses Title Case)
|
||||
local doc
|
||||
doc=$(find "$REPO_ROOT/docs" -iname "${svc}.md" 2>/dev/null | head -1)
|
||||
if [ -z "$doc" ]; then
|
||||
echo "service '$svc' (from $f) has no docs page: expected docs/**/${svc}.md"
|
||||
return 1
|
||||
fi
|
||||
done < <(services_in "$f")
|
||||
done < <(find "$REPO_ROOT" -name 'compose.yaml' -not -path '*/.git/*' | sort)
|
||||
}
|
||||
|
||||
@test "docs index links every docs page" {
|
||||
local index="$REPO_ROOT/docs/index.md"
|
||||
[ -f "$index" ] || { echo "missing $index"; return 1; }
|
||||
while IFS= read -r page; do
|
||||
local base
|
||||
base=$(basename "$page" .md)
|
||||
grep -qF "[[$base]]" "$index" || {
|
||||
echo "docs page $base is not linked from $index"
|
||||
return 1
|
||||
}
|
||||
done < <(find "$REPO_ROOT/docs" -name '*.md' -not -name 'index.md' -not -path '*/.obsidian/*' | sort)
|
||||
}
|
||||
Reference in new issue
Block a user