#!/usr/bin/env sh # copilot-update.sh # Zieht die neueste Version des Copilot-Setup-Repos und aktualisiert: # - Globale Git-Templates (~/.git-templates/) # - VS Code Prompt-Dateien # - Git-Hooks im aktuellen Repo (pre-commit, post-commit) # - .github/copilot-instructions.md (nur wenn noch TODO-Platzhalter enthalten) # # 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" # ── 2. Globale Git-Templates aktualisieren ──────────────────────────────────── 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/" cp "$SOURCE/git-templates/hooks/post-commit" "$GIT_TEMPLATE_DIR/hooks/" chmod +x "$GIT_TEMPLATE_DIR/hooks/pre-commit" "$GIT_TEMPLATE_DIR/hooks/post-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 post-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: nur wenn TODO-Platzhalter vorhanden ───────── COPILOT_INSTRUCTIONS="$REPO_ROOT/.github/copilot-instructions.md" if [ -f "$COPILOT_INSTRUCTIONS" ]; then if grep -q "TODO" "$COPILOT_INSTRUCTIONS" 2>/dev/null; then BACKUP="${COPILOT_INSTRUCTIONS}.bak" cp "$COPILOT_INSTRUCTIONS" "$BACKUP" cp "$SOURCE/git-templates/.github/copilot-instructions.md" "$COPILOT_INSTRUCTIONS" echo " ✓ .github/copilot-instructions.md aktualisiert" echo " (Backup: .github/copilot-instructions.md.bak)" else echo " ─ .github/copilot-instructions.md übersprungen (keine TODOs – 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."