rd13_copilot_setup/scripts/copilot-update.fish

178 lines
7.1 KiB
Fish
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 fish
# copilot-update.fish
# Zieht die neueste Version des Copilot-Setup-Repos und aktualisiert:
# - Dieses Script selbst (~/.local/bin/copilot-update.fish)
# - 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:
# fish ~/.local/bin/copilot-update.fish
# git copilot-update (via Alias, ruft copilot-update.sh auf)
set SETUP_REPO_SSH "ssh://git@192.168.178.6:2222/cschulz/rd13_copilot_setup.git"
set SETUP_REPO_HTTP "http://192.168.178.6:8083/cschulz/rd13_copilot_setup.git"
if set -q COPILOT_SETUP_DIR
set CACHE_DIR $COPILOT_SETUP_DIR
else
set CACHE_DIR $HOME/.copilot-setup
end
echo "=== Copilot Update ==="
# ── 1. Setup-Repo Cache aktuell halten ───────────────────────────────────────
if test -d $CACHE_DIR/.git
echo " → Pulling latest from setup repo..."
if git -C $CACHE_DIR pull --ff-only --quiet 2>/dev/null
echo " ✓ Cache aktualisiert: $CACHE_DIR"
else
echo " ✗ git pull fehlgeschlagen versuche neu zu klonen..."
rm -rf $CACHE_DIR
end
end
if not test -d $CACHE_DIR/.git
echo " → Klone Setup-Repo (SSH)..."
if git clone --quiet $SETUP_REPO_SSH $CACHE_DIR 2>/dev/null
echo " ✓ Geklont via SSH"
else
echo " ✗ SSH fehlgeschlagen versuche HTTP-Fallback..."
if git clone --quiet $SETUP_REPO_HTTP $CACHE_DIR 2>/dev/null
echo " ✓ Geklont via HTTP"
else
echo ""
echo " ✗ FEHLER: Setup-Repo nicht erreichbar."
echo " SSH: $SETUP_REPO_SSH"
echo " HTTP: $SETUP_REPO_HTTP"
exit 1
end
end
end
set SOURCE $CACHE_DIR
# ── 1b. Self-update ──────────────────────────────────────────────────────
set SELF $HOME/.local/bin/copilot-update.fish
if test -f $SOURCE/scripts/copilot-update.fish
if not diff -q $SOURCE/scripts/copilot-update.fish $SELF >/dev/null 2>&1
cp $SOURCE/scripts/copilot-update.fish $SELF
chmod +x $SELF
echo " ✓ copilot-update.fish selbst aktualisiert starte neue Version..."
exec fish $SELF $argv
end
end
# ── 2. ~/.git-templates/ aktualisieren ──────────────────────────────────────
set 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 test -f $SOURCE/git-templates/hooks/post-merge
cp $SOURCE/git-templates/hooks/post-merge $GIT_TEMPLATE_DIR/hooks/
chmod +x $GIT_TEMPLATE_DIR/hooks/post-merge
end
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 test -d $HOME/.vscode-server/data/User
set VSCODE_USER $HOME/.vscode-server/data/User
else if test -d "$HOME/Library/Application Support/Code/User"
set VSCODE_USER "$HOME/Library/Application Support/Code/User"
else
set VSCODE_USER $HOME/.config/Code/User
end
if test -d $VSCODE_USER
mkdir -p $VSCODE_USER/prompts
set PROMPTS_UPDATED 0
for f in $SOURCE/prompts/*.prompt.md
set fname (basename $f)
cp $f $VSCODE_USER/prompts/$fname
set PROMPTS_UPDATED (math $PROMPTS_UPDATED + 1)
end
echo "$PROMPTS_UPDATED Prompt-Dateien aktualisiert → $VSCODE_USER/prompts/"
else
echo " ─ VS Code User-Verzeichnis nicht gefunden, Prompts übersprungen"
end
# ── 4. Repo-lokale Updates (nur wenn in einem Git-Repo) ──────────────────────
set REPO_ROOT (git rev-parse --show-toplevel 2>/dev/null)
if test -z "$REPO_ROOT"
echo ""
echo " ─ Kein Git-Repo erkannt repo-lokale Updates übersprungen"
echo ""
echo "=== Done ==="
exit 0
end
echo ""
echo " Git-Repo erkannt: $REPO_ROOT"
# ── 4a. Git-Hooks aktualisieren ───────────────────────────────────────────────
set HOOKS_DIR $REPO_ROOT/.git/hooks
mkdir -p $HOOKS_DIR
set HOOKS_UPDATED 0
for hook in pre-commit
if test -f $SOURCE/git-templates/hooks/$hook
cp $SOURCE/git-templates/hooks/$hook $HOOKS_DIR/$hook
chmod +x $HOOKS_DIR/$hook
set HOOKS_UPDATED (math $HOOKS_UPDATED + 1)
echo " ✓ .git/hooks/$hook aktualisiert"
end
end
if test $HOOKS_UPDATED -eq 0
echo " ─ Keine Hook-Templates gefunden"
end
# ── 4b. copilot-instructions.md: Framework-Sektion immer aktualisieren ─────────
set COPILOT_INSTRUCTIONS $REPO_ROOT/.github/copilot-instructions.md
set TEMPLATE_INSTRUCTIONS $SOURCE/git-templates/.github/copilot-instructions.md
if test -f $COPILOT_INSTRUCTIONS; and test -f $TEMPLATE_INSTRUCTIONS
set framework (awk '/^---$/{exit} {print}' $TEMPLATE_INSTRUCTIONS)
set project (awk '/^---$/{found=1} found{print}' $COPILOT_INSTRUCTIONS)
if test -n "$project"
printf '%s\n%s\n' (string join \n $framework) (string join \n $project) > $COPILOT_INSTRUCTIONS
echo " ✓ .github/copilot-instructions.md Framework-Sektion aktualisiert"
else
cp $TEMPLATE_INSTRUCTIONS $COPILOT_INSTRUCTIONS
echo " ✓ .github/copilot-instructions.md aktualisiert (noch nicht angepasst)"
end
else
echo " ─ .github/copilot-instructions.md nicht vorhanden, übersprungen"
end
# ── 4c. Fehlende 3-Zielgruppen-Docs anlegen (nur wenn noch nicht vorhanden) ──
if test -d $REPO_ROOT/docs
set DOCS_CREATED 0
for doc in USER.md ADMIN.md MAINTAINER.md
if not test -f $REPO_ROOT/docs/$doc; and test -f $GIT_TEMPLATE_DIR/docs/$doc
cp $GIT_TEMPLATE_DIR/docs/$doc $REPO_ROOT/docs/$doc
echo " ✓ docs/$doc angelegt (Template)"
set DOCS_CREATED (math $DOCS_CREATED + 1)
end
end
if test $DOCS_CREATED -eq 0
echo " ─ docs/ 3-Zielgruppen-Docs bereits vorhanden"
end
end
echo ""
echo "=== Done ==="
echo "Tipp: 'git copilot-update' jederzeit ausführen um Templates aktuell zu halten."