rd13_copilot_setup/scripts/copilot-update.sh
Conrad Schulz fa007dbcbc fix: copilot-update self-update + copilot-instructions Framework-Sektion immer aktualisieren
- copilot-update.sh: Self-Update (Schritt 1b) via cmp -s + exec
- copilot-update.fish: dasselbe in fish
- copilot-instructions.md Update: Framework-Sektion (vor ---) aus Template,
  Projekt-Sektion (ab ---) bleibt unveraendert
- docs/ADMIN.md: git copilot-update Abschnitt dokumentiert
2026-06-03 09:21:53 +00:00

164 lines
6.9 KiB
Bash
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
# copilot-update.sh
# Zieht die neueste Version des Copilot-Setup-Repos und aktualisiert:
# - Dieses Script selbst (~/.local/bin/copilot-update.sh)
# - Globale Git-Templates (~/.git-templates/)
# - VS Code Prompt-Dateien
# - Git-Hooks im aktuellen Repo (pre-commit)
# - .github/copilot-instructions.md (Framework-Sektion immer, Projekt-Teil bleibt)
#
# Usage:
# copilot-update.sh # aktuelles Verzeichnis (Git-Repo optional)
# git copilot-update # via Git-Alias
SETUP_REPO_SSH="ssh://git@192.168.178.6:2222/cschulz/rd13_copilot_setup.git"
SETUP_REPO_HTTP="http://192.168.178.6:8083/cschulz/rd13_copilot_setup.git"
CACHE_DIR="${COPILOT_SETUP_DIR:-$HOME/.copilot-setup}"
echo "=== Copilot Update ==="
# ── 1. Setup-Repo Cache aktuell halten ───────────────────────────────────────
if [ -d "$CACHE_DIR/.git" ]; then
echo " → Pulling latest from setup repo..."
if git -C "$CACHE_DIR" pull --ff-only --quiet 2>/dev/null; then
echo " ✓ Cache aktualisiert: $CACHE_DIR"
else
echo " ✗ git pull fehlgeschlagen versuche neu zu klonen..."
rm -rf "$CACHE_DIR"
fi
fi
if [ ! -d "$CACHE_DIR/.git" ]; then
echo " → Klone Setup-Repo (SSH)..."
if git clone --quiet "$SETUP_REPO_SSH" "$CACHE_DIR" 2>/dev/null; then
echo " ✓ Geklont via SSH"
else
echo " ✗ SSH fehlgeschlagen versuche HTTP-Fallback..."
if git clone --quiet "$SETUP_REPO_HTTP" "$CACHE_DIR" 2>/dev/null; then
echo " ✓ Geklont via HTTP"
else
echo ""
echo " ✗ FEHLER: Setup-Repo nicht erreichbar."
echo " SSH: $SETUP_REPO_SSH"
echo " HTTP: $SETUP_REPO_HTTP"
exit 1
fi
fi
fi
SOURCE="$CACHE_DIR"
# ── 1b. Self-update: dieses Script selbst aktualisieren ─────────────────────
SELF="$HOME/.local/bin/copilot-update.sh"
if [ -f "$SOURCE/scripts/copilot-update.sh" ]; then
if ! cmp -s "$SOURCE/scripts/copilot-update.sh" "$SELF" 2>/dev/null; then
cp "$SOURCE/scripts/copilot-update.sh" "$SELF"
chmod +x "$SELF"
echo " ✓ copilot-update.sh selbst aktualisiert starte neue Version..."
exec "$SELF" "$@"
fi
fi ────────────────────────────────────
GIT_TEMPLATE_DIR="$HOME/.git-templates"
mkdir -p "$GIT_TEMPLATE_DIR/.github" "$GIT_TEMPLATE_DIR/.vscode" \
"$GIT_TEMPLATE_DIR/hooks" "$GIT_TEMPLATE_DIR/docs" \
"$GIT_TEMPLATE_DIR/history/summary"
cp "$SOURCE/git-templates/.github/copilot-instructions.md" "$GIT_TEMPLATE_DIR/.github/"
cp "$SOURCE/git-templates/.vscode/settings.json" "$GIT_TEMPLATE_DIR/.vscode/"
cp "$SOURCE/git-templates/.vscode/extensions.json" "$GIT_TEMPLATE_DIR/.vscode/"
cp "$SOURCE/git-templates/hooks/pre-commit" "$GIT_TEMPLATE_DIR/hooks/"
chmod +x "$GIT_TEMPLATE_DIR/hooks/pre-commit"
if [ -f "$SOURCE/git-templates/hooks/post-merge" ]; then
cp "$SOURCE/git-templates/hooks/post-merge" "$GIT_TEMPLATE_DIR/hooks/"
chmod +x "$GIT_TEMPLATE_DIR/hooks/post-merge"
fi
cp "$SOURCE/git-templates/docs/USER.md" "$GIT_TEMPLATE_DIR/docs/"
cp "$SOURCE/git-templates/docs/ADMIN.md" "$GIT_TEMPLATE_DIR/docs/"
cp "$SOURCE/git-templates/docs/MAINTAINER.md" "$GIT_TEMPLATE_DIR/docs/"
cp "$SOURCE/git-templates/history/summary/PROJECT_CONTEXT.md" "$GIT_TEMPLATE_DIR/history/summary/"
echo " ✓ ~/.git-templates/ aktualisiert"
# ── 3. VS Code Prompt-Dateien aktualisieren ───────────────────────────────────
if [ -d "$HOME/.vscode-server/data/User" ]; then
VSCODE_USER="$HOME/.vscode-server/data/User"
elif [ -d "$HOME/Library/Application Support/Code/User" ]; then
VSCODE_USER="$HOME/Library/Application Support/Code/User"
else
VSCODE_USER="$HOME/.config/Code/User"
fi
if [ -d "$VSCODE_USER" ]; then
mkdir -p "$VSCODE_USER/prompts"
PROMPTS_UPDATED=0
for f in "$SOURCE/prompts/"*.prompt.md; do
fname="$(basename "$f")"
cp "$f" "$VSCODE_USER/prompts/$fname"
PROMPTS_UPDATED=$((PROMPTS_UPDATED + 1))
done
echo "$PROMPTS_UPDATED Prompt-Dateien aktualisiert → $VSCODE_USER/prompts/"
else
echo " ─ VS Code User-Verzeichnis nicht gefunden, Prompts übersprungen"
fi
# ── 4. Repo-lokale Updates (nur wenn in einem Git-Repo) ──────────────────────
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -z "$REPO_ROOT" ]; then
echo ""
echo " ─ Kein Git-Repo erkannt repo-lokale Updates übersprungen"
echo ""
echo "=== Done ==="
exit 0
fi
echo ""
echo " Git-Repo erkannt: $REPO_ROOT"
# ── 4a. Git-Hooks aktualisieren ───────────────────────────────────────────────
HOOKS_DIR="$REPO_ROOT/.git/hooks"
mkdir -p "$HOOKS_DIR"
HOOKS_UPDATED=0
for hook in pre-commit; do
if [ -f "$SOURCE/git-templates/hooks/$hook" ]; then
cp "$SOURCE/git-templates/hooks/$hook" "$HOOKS_DIR/$hook"
chmod +x "$HOOKS_DIR/$hook"
HOOKS_UPDATED=$((HOOKS_UPDATED + 1))
echo " ✓ .git/hooks/$hook aktualisiert"
fi
done
if [ "$HOOKS_UPDATED" -eq 0 ]; then
echo " ─ Keine Hook-Templates gefunden"
fi
# ── 4b. copilot-instructions.md: Framework-Sektion immer aktualisieren ─────────
# Die Datei besteht aus zwei Teilen:
# 1) Framework-Sektion (bis zum ersten ---): Session-Protokoll, Verbotene Aktionen
# 2) Projekt-Sektion (ab ---): Stack, Architecture, Conventions (repo-spezifisch)
# Der Framework-Teil wird immer aus dem Template aktualisiert.
# Der Projekt-Teil bleibt unverändert.
COPILOT_INSTRUCTIONS="$REPO_ROOT/.github/copilot-instructions.md"
TEMPLATE_INSTRUCTIONS="$SOURCE/git-templates/.github/copilot-instructions.md"
if [ -f "$COPILOT_INSTRUCTIONS" ] && [ -f "$TEMPLATE_INSTRUCTIONS" ]; then
# Framework-Sektion aus Template (alles vor erstem ---)
framework=$(awk '/^---$/{exit} {print}' "$TEMPLATE_INSTRUCTIONS")
# Projekt-Sektion aus Ziel-Datei (ab erstem --- inkl.)
project=$(awk '/^---$/{found=1} found{print}' "$COPILOT_INSTRUCTIONS")
if [ -n "$project" ]; then
printf '%s\n%s\n' "$framework" "$project" > "$COPILOT_INSTRUCTIONS"
echo " ✓ .github/copilot-instructions.md Framework-Sektion aktualisiert"
else
# Keine Projekt-Sektion vorhanden (noch nicht angepasst) komplett ersetzen
cp "$TEMPLATE_INSTRUCTIONS" "$COPILOT_INSTRUCTIONS"
echo " ✓ .github/copilot-instructions.md aktualisiert (noch nicht angepasst)"
fi
else
echo " ─ .github/copilot-instructions.md nicht vorhanden, übersprungen"
fi
echo ""
echo "=== Done ==="
echo "Tipp: 'git copilot-update' jederzeit ausführen um Templates aktuell zu halten."