rd13_copilot_setup/scripts/selftest.sh
Conrad Schulz 2b20a985a5 refactor(history): move agent history under docs/history + auto-migration
Konvention geaendert: history/ -> docs/history/ (prompts + summary/PROJECT_CONTEXT.md).
Harter Cutover im pre-commit Hook (Check 4 + Check 6 erwarten docs/history/).
Bestehende Repos werden beim naechsten 'git copilot-update' automatisch per git mv migriert (Fallback mv; bei Konflikt Warnung statt Abbruch).
Angepasst: pre-commit Hook, alle 6 Skripte + selftest, beide copilot-instructions.md, settings.json Session-Protokoll, history.prompt.md, README, USER/ADMIN/MAINTAINER (+ ADMIN Migrationsabschnitt). git-templates/history -> git-templates/docs/history (git mv). Validiert: shellcheck clean, fish -n clean, selftest PASS, Migrationstest PASS (sh+fish+both-present).
2026-06-10 12:06:35 +02:00

72 lines
2.3 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env sh
# selftest.sh Funktionspruefung fuer copilot-bootstrap.{sh,fish}.
#
# Baut ein isoliertes Fake-Template-Verzeichnis und ein Ziel-Repo in einem
# temporaeren HOME und prueft, dass Bootstrap die erwartete Struktur erzeugt.
# Veraendert weder das echte HOME noch ein echtes Repo. Lokal und in CI nutzbar:
# sh scripts/selftest.sh
set -eu
REPO_DIR="$(cd "$(dirname "$0")/.." && pwd)"
WORK="$(mktemp -d)"
trap 'rm -rf "$WORK"' EXIT
build_template() {
tpl="$1"
mkdir -p "$tpl/.github" "$tpl/.vscode" "$tpl/hooks" "$tpl/docs" "$tpl/docs/history/summary"
echo "framework" > "$tpl/.github/copilot-instructions.md"
echo '{}' > "$tpl/.vscode/settings.json"
echo '{}' > "$tpl/.vscode/extensions.json"
printf '#!/bin/sh\nexit 0\n' > "$tpl/hooks/pre-commit"
printf '#!/bin/sh\nexit 0\n' > "$tpl/hooks/post-commit"
for d in USER ADMIN MAINTAINER; do
echo "$d" > "$tpl/docs/$d.md"
done
echo ctx > "$tpl/docs/history/summary/PROJECT_CONTEXT.md"
}
assert_file() {
if [ ! -f "$1" ]; then
echo "FAIL: erwartete Datei fehlt: $1" >&2
exit 1
fi
}
run_case() {
label="$1"
runner="$2" # sh | fish
script="$3"
home="$WORK/home_$label"
target="$WORK/target_$label"
mkdir -p "$home/.git-templates" "$target"
build_template "$home/.git-templates"
git -C "$target" init -q
HOME="$home" "$runner" "$REPO_DIR/scripts/$script" "$target" >/dev/null
assert_file "$target/.github/copilot-instructions.md"
assert_file "$target/.vscode/settings.json"
assert_file "$target/.vscode/extensions.json"
assert_file "$target/docs/USER.md"
assert_file "$target/docs/ADMIN.md"
assert_file "$target/docs/MAINTAINER.md"
assert_file "$target/docs/history/summary/PROJECT_CONTEXT.md"
assert_file "$target/.git/hooks/pre-commit"
assert_file "$target/.git/hooks/post-commit"
assert_file "$target/data/.gitkeep"
if ! grep -q ':Zone.Identifier' "$target/.gitignore"; then
echo "FAIL: $label .gitignore enthaelt kein Zone.Identifier-Muster" >&2
exit 1
fi
echo "PASS: $label ($script)"
}
run_case sh_bootstrap sh copilot-bootstrap.sh
if command -v fish >/dev/null 2>&1; then
run_case fish_bootstrap fish copilot-bootstrap.fish
else
echo "SKIP: fish nicht installiert fish-Bootstrap uebersprungen"
fi
echo "selftest OK"