51 lines
1.8 KiB
Bash
Executable File
51 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# Erzeugt die Skill-Tabelle in README.md zwischen <!-- skills:start --> und <!-- skills:end -->
|
||
# neu. Mit --check wird nur geprüft, ob die Tabelle aktuell ist (Exit-Code 1, wenn nicht).
|
||
# Aufruf: scripts/update-index.sh [--check]
|
||
set -euo pipefail
|
||
source "$(dirname "$0")/lib.sh"
|
||
|
||
REPO_WEB="https://git.gundel.dev/dg/claude-skills"
|
||
readme="$ROOT/README.md"
|
||
check=0
|
||
[[ "${1:-}" == "--check" ]] && check=1
|
||
|
||
if ! grep -q '<!-- skills:start -->' "$readme" || ! grep -q '<!-- skills:end -->' "$readme"; then
|
||
echo "README.md enthält die Marker <!-- skills:start --> / <!-- skills:end --> nicht." >&2
|
||
exit 1
|
||
fi
|
||
|
||
table="$(mktemp)"
|
||
trap 'rm -f "$table"' EXIT
|
||
{
|
||
echo "| Skill | Kurzbeschreibung | Version | Doku | Download |"
|
||
echo "|---|---|---|---|---|"
|
||
while IFS= read -r name; do
|
||
[[ -z "$name" ]] && continue
|
||
desc=""
|
||
ver="$(skill_version "$SKILLS_DIR/$name")"
|
||
if fm="$(frontmatter "$SKILLS_DIR/$name/SKILL.md" 2>/dev/null)"; then
|
||
desc="$(fm_value "$fm" description || true)"
|
||
fi
|
||
desc="${desc//|/\\|}"
|
||
printf '| [%s](skills/%s/) | %s | %s | [README](skills/%s/README.md) | [%s-v%s.zip](%s/releases/tag/%s/v%s) |\n' \
|
||
"$name" "$name" "$desc" "$ver" "$name" "$name" "$ver" "$REPO_WEB" "$name" "$ver"
|
||
done < <(skill_names)
|
||
} > "$table"
|
||
|
||
new="$(tr -d '\r' < "$readme" | awk -v t="$table" '
|
||
/<!-- skills:start -->/ { print; while ((getline l < t) > 0) print l; skip = 1; next }
|
||
/<!-- skills:end -->/ { skip = 0 }
|
||
!skip { print }')"
|
||
|
||
if [[ $check -eq 1 ]]; then
|
||
if [[ "$new" != "$(tr -d '\r' < "$readme")" ]]; then
|
||
echo "README.md ist nicht aktuell – scripts/update-index.sh ausführen und committen." >&2
|
||
exit 1
|
||
fi
|
||
echo "README.md ist aktuell."
|
||
else
|
||
printf '%s\n' "$new" > "$readme"
|
||
echo "README.md aktualisiert."
|
||
fi
|