147 lines
5.9 KiB
Bash
147 lines
5.9 KiB
Bash
|
|
#!/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."
|