rd13_copilot_setup/scripts/copilot-update.sh
Conrad Schulz 0d42b4fb55 feat: copilot-update.sh + git copilot-update alias + post-merge auto-deploy
- scripts/copilot-update.sh: zieht Setup-Repo (SSH+HTTP-Fallback) in ~/.copilot-setup/,
  aktualisiert ~/.git-templates/, VS Code Prompts und repo-lokale Git-Hooks;
  copilot-instructions.md nur bei TODO-Erkennung (mit .bak Backup)
- scripts/copilot-update.fish: Fish-Variante desselben Scripts
- git-templates/hooks/post-merge: opt-in Template-Hook (ruft copilot-update.sh auf)
- scripts/deploy.sh: installiert copilot-update.sh/.fish, setzt 'git copilot-update'
  Alias, installiert post-merge Hook im Setup-Repo selbst (auto-deploy nach git pull)
- scripts/deploy.fish: analog
- scripts/copilot-bootstrap.sh: --with-update-hook Flag + post-commit Hook Installation
2026-06-02 10:36:16 +00:00

146 lines
5.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:
# - 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."