diff --git a/git-templates/hooks/post-merge b/git-templates/hooks/post-merge new file mode 100644 index 0000000..2a505b2 --- /dev/null +++ b/git-templates/hooks/post-merge @@ -0,0 +1,20 @@ +#!/usr/bin/env sh +# post-merge – Automatisches Copilot-Update nach git pull (opt-in) +# +# Dieser Hook ruft copilot-update.sh auf wenn es installiert ist. +# So werden Templates und Prompt-Dateien nach jedem 'git pull' automatisch +# auf dem neuesten Stand gehalten. +# +# INSTALLATION (opt-in): +# copilot-bootstrap.sh --with-update-hook +# +# DEINSTALLATION: +# rm .git/hooks/post-merge + +UPDATER="$HOME/.local/bin/copilot-update.sh" + +if [ -x "$UPDATER" ]; then + echo "" + echo " [post-merge] Copilot-Templates werden aktualisiert..." + "$UPDATER" +fi diff --git a/history/summary/PROJECT_CONTEXT.md b/history/summary/PROJECT_CONTEXT.md index 4b4bf62..24b7f3e 100644 --- a/history/summary/PROJECT_CONTEXT.md +++ b/history/summary/PROJECT_CONTEXT.md @@ -8,7 +8,7 @@ ## Aktueller Projektstatus -**Letzte Aktualisierung:** 2026-05-31 – Session-History initial angelegt +**Letzte Aktualisierung:** 2026-06-02 – copilot-update.sh + git copilot-update Alias **Phase:** Produktion / stabil – wird bei Bedarf erweitert --- @@ -29,6 +29,7 @@ Quality Gate aus. | Datum | Aufgabe | Ergebnis | Entscheidungen | |---|---|---|---| +| 2026-06-02 | copilot-update.sh + git alias + post-merge Hook | `scripts/copilot-update.sh`, `scripts/copilot-update.fish`, `git-templates/hooks/post-merge` | SSH+HTTP-Fallback; opt-in Update-Hook; copilot-instructions.md nur bei TODO überschreiben | | 2026-05-31 | Bug fix: mkdir -p .git/hooks + eigenes Repo bootstrapped | `e1f912f` | – | | 2026-05-31 | history/prompts/ committed statt gitignored | `95d0360` | Vollständige History bleibt im Repo | | 2026-05-30 | Initiale Erweiterungen: data/, history/, hooks, 3-Zielgruppen-Docs | `045e2e7` | Nur data/ gitignored | @@ -39,7 +40,7 @@ Quality Gate aus. ## Offene Aufgaben & bekannte Probleme - [ ] `.github/copilot-instructions.md` TODO-Felder ausfüllen (Stack, Architecture, NFRs dieses Repos) -- [ ] Bei Änderungen an `git-templates/` immer `deploy.sh` neu ausführen damit die Templates in `~/.git-templates/` aktuell sind +- [ ] Bei Änderungen an `git-templates/` immer `deploy.sh` neu ausführen (oder `git copilot-update` in einem anderen Repo zum Testen) --- @@ -47,6 +48,10 @@ Quality Gate aus. | Entscheidung | Begründung | Wo dokumentiert | |---|---|---| +| `copilot-update.sh` mit SSH+HTTP-Fallback | Funktioniert ohne SSH-Key-Setup auf neuen Maschinen | `scripts/copilot-update.sh` | +| `copilot-instructions.md` nur bei TODO überschreiben | User-Content bleibt erhalten; Backup `.bak` wird erstellt | `scripts/copilot-update.sh` | +| post-merge Hook in bootstrapped Repos: opt-in | Kein Overhead bei jedem `git pull` in anderen Repos | `scripts/copilot-bootstrap.sh --with-update-hook` | +| Setup-Repo selbst: post-merge Hook auto-installed | `deploy.sh` nach jedem `git pull` auf Setup-Repo | `scripts/deploy.sh` Block 7 | | `history/prompts/` committed | Lückenlose Projekt-History im Repo | `docs/MAINTAINER.md` | | `data/` gitignored | Persistente Daten: Größe + Sicherheit | `docs/ADMIN.md` | | POSIX sh für Bootstrap | Läuft überall ohne Abhängigkeiten | `docs/MAINTAINER.md` | @@ -62,6 +67,9 @@ Quality Gate aus. - **Dieser Kontext:** `/history/summary/PROJECT_CONTEXT.md` (committed) - **Deploy:** `bash scripts/deploy.sh` oder `fish scripts/deploy.fish` - **Bootstrap einzelnes Repo:** `sh ~/.local/bin/copilot-bootstrap.sh [/pfad/zum/repo]` +- **Bootstrap mit Auto-Update-Hook:** `sh ~/.local/bin/copilot-bootstrap.sh --with-update-hook [/pfad]` +- **Templates updaten (global + repo-lokal):** `git copilot-update` (in jedem Repo) +- **Setup-Repo Cache:** `~/.copilot-setup/` (überschreibbar mit `COPILOT_SETUP_DIR=...`) - **Git-Templates:** `~/.git-templates/` (nach Deploy) - **Prompts:** `~/.vscode-server/data/User/prompts/` (nach Deploy) diff --git a/scripts/copilot-bootstrap.sh b/scripts/copilot-bootstrap.sh index c036129..ba08bb8 100644 --- a/scripts/copilot-bootstrap.sh +++ b/scripts/copilot-bootstrap.sh @@ -4,11 +4,21 @@ # POSIX-kompatibel: läuft auf bash, dash, sh – kein fish nötig. # # Usage: -# copilot-bootstrap.sh # aktuelles Verzeichnis -# copilot-bootstrap.sh /path/to/repo # anderes Verzeichnis +# copilot-bootstrap.sh # aktuelles Verzeichnis +# copilot-bootstrap.sh /path/to/repo # anderes Verzeichnis +# copilot-bootstrap.sh --with-update-hook # + post-merge Hook (auto-update nach git pull) TEMPLATE_DIR="$HOME/.git-templates" -TARGET="${1:-.}" +WITH_UPDATE_HOOK=0 +TARGET="." + +for arg in "$@"; do + case "$arg" in + --with-update-hook) WITH_UPDATE_HOOK=1 ;; + -*) ;; + *) TARGET="$arg" ;; + esac +done if [ ! -d "$TARGET/.git" ]; then echo "Error: $TARGET is not a git repository" >&2 @@ -85,15 +95,33 @@ else done fi -# ── pre-commit Hook – Agent Quality Gate ───────────────────────────────────── +# ── Git-Hooks – Quality Gate + History ─────────────────────────────────────── +mkdir -p "$TARGET/.git/hooks" if [ ! -f "$TARGET/.git/hooks/pre-commit" ]; then - mkdir -p "$TARGET/.git/hooks" cp "$TEMPLATE_DIR/hooks/pre-commit" "$TARGET/.git/hooks/pre-commit" chmod +x "$TARGET/.git/hooks/pre-commit" echo " ✓ .git/hooks/pre-commit installed (Quality Gate: Tests + Docs)" else echo " ─ .git/hooks/pre-commit already exists, skipping" fi +if [ ! -f "$TARGET/.git/hooks/post-commit" ] && [ -f "$TEMPLATE_DIR/hooks/post-commit" ]; then + cp "$TEMPLATE_DIR/hooks/post-commit" "$TARGET/.git/hooks/post-commit" + chmod +x "$TARGET/.git/hooks/post-commit" + echo " ✓ .git/hooks/post-commit installed (Auto-History-Log)" +fi + +# ── post-merge Hook – opt-in: automatisches copilot-update nach git pull ────── +if [ "$WITH_UPDATE_HOOK" -eq 1 ]; then + if [ -f "$TEMPLATE_DIR/hooks/post-merge" ]; then + if [ ! -f "$TARGET/.git/hooks/post-merge" ]; then + cp "$TEMPLATE_DIR/hooks/post-merge" "$TARGET/.git/hooks/post-merge" + chmod +x "$TARGET/.git/hooks/post-merge" + echo " ✓ .git/hooks/post-merge installed (Copilot-Update nach git pull)" + else + echo " ─ .git/hooks/post-merge already exists, skipping" + fi + fi +fi # ── .gitignore – data/ ausschließen ───────────────────────────────────────── GITIGNORE="$TARGET/.gitignore" @@ -123,3 +151,4 @@ echo " - history/summary/PROJECT_CONTEXT.md" echo " - docs/USER.md, docs/ADMIN.md, docs/MAINTAINER.md" echo " 2. git add .github .vscode docs history .gitignore" echo " git commit -m 'chore: add copilot workspace config'" +echo " 3. Templates aktuell halten: git copilot-update" diff --git a/scripts/copilot-update.fish b/scripts/copilot-update.fish new file mode 100644 index 0000000..a04b0f4 --- /dev/null +++ b/scripts/copilot-update.fish @@ -0,0 +1,151 @@ +#!/usr/bin/env fish +# copilot-update.fish +# 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: +# 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 + +# ── 2. Globale 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/ +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 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 post-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: nur wenn TODO-Platzhalter vorhanden ───────── +set COPILOT_INSTRUCTIONS $REPO_ROOT/.github/copilot-instructions.md + +if test -f $COPILOT_INSTRUCTIONS + if grep -q "TODO" $COPILOT_INSTRUCTIONS 2>/dev/null + set 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)" + end +else + echo " ─ .github/copilot-instructions.md nicht vorhanden, übersprungen" +end + +echo "" +echo "=== Done ===" +echo "Tipp: 'git copilot-update' jederzeit ausführen um Templates aktuell zu halten." diff --git a/scripts/copilot-update.sh b/scripts/copilot-update.sh new file mode 100644 index 0000000..f0a4da0 --- /dev/null +++ b/scripts/copilot-update.sh @@ -0,0 +1,146 @@ +#!/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." diff --git a/scripts/deploy.fish b/scripts/deploy.fish index a04474a..bdbe1dc 100644 --- a/scripts/deploy.fish +++ b/scripts/deploy.fish @@ -62,7 +62,7 @@ git config --global init.templateDir $GIT_TEMPLATE_DIR echo " ✓ git-templates deployed → $GIT_TEMPLATE_DIR" echo " ✓ git config init.templateDir set" -# ── 5. Bootstrap-Skripte ────────────────────────────────────────────────────── +# ── 5. Bootstrap- & Update-Skripte ─────────────────────────────────────────── mkdir -p $HOME/.local/bin cp $REPO_DIR/scripts/copilot-bootstrap.sh $HOME/.local/bin/copilot-bootstrap.sh chmod +x $HOME/.local/bin/copilot-bootstrap.sh @@ -70,12 +70,36 @@ echo " ✓ copilot-bootstrap.sh installed to ~/.local/bin/" cp $REPO_DIR/scripts/copilot-bootstrap.fish $HOME/.local/bin/copilot-bootstrap.fish chmod +x $HOME/.local/bin/copilot-bootstrap.fish echo " ✓ copilot-bootstrap.fish installed to ~/.local/bin/" +cp $REPO_DIR/scripts/copilot-update.sh $HOME/.local/bin/copilot-update.sh +chmod +x $HOME/.local/bin/copilot-update.sh +echo " ✓ copilot-update.sh installed to ~/.local/bin/" +if test -f $REPO_DIR/scripts/copilot-update.fish + cp $REPO_DIR/scripts/copilot-update.fish $HOME/.local/bin/copilot-update.fish + chmod +x $HOME/.local/bin/copilot-update.fish + echo " ✓ copilot-update.fish installed to ~/.local/bin/" +end -# ── 6. Git-Alias: git init → auto-bootstrap ─────────────────────────────────── +# ── 6. Git-Aliase: init → auto-bootstrap | copilot-update → updater ────────── # Verwendet git --exec-path um Rekursion zu vermeiden (kein Alias-Loop). git config --global alias.init '!f() { dir=.; for a in "$@"; do case "$a" in -*) ;; *) dir="$a" ;; esac; done; "$(git --exec-path)/git-init" "$@" && "$HOME/.local/bin/copilot-bootstrap.sh" "$dir"; }; f' echo " ✓ git alias 'init' gesetzt (führt copilot-bootstrap.sh automatisch aus)" +git config --global alias.copilot-update '!~/.local/bin/copilot-update.sh' +echo " ✓ git alias 'copilot-update' gesetzt (aktualisiert Templates & Prompts)" + +# ── 7. post-merge Hook für dieses Setup-Repo ───────────────────────────────── +set SELF_HOOKS_DIR $REPO_DIR/.git/hooks +if test -d $SELF_HOOKS_DIR + echo '#!/usr/bin/env sh +# post-merge – Auto-Deploy nach git pull auf dem Setup-Repo +echo "" +echo " [post-merge] Setup-Repo aktualisiert – deploye Templates neu..." +SCRIPT_DIR="$(cd "$(dirname "$0")/../../scripts" && pwd)" +bash "$SCRIPT_DIR/deploy.sh"' > $SELF_HOOKS_DIR/post-merge + chmod +x $SELF_HOOKS_DIR/post-merge + echo " ✓ post-merge Hook im Setup-Repo installiert (auto-deploy nach git pull)" +end echo "" echo "=== Done ===" echo "Next: Activate Settings Sync in VS Code (Ctrl+Shift+P → 'Settings Sync: Turn On')" +echo " Templates aktuell halten: git copilot-update (in jedem Repo)" diff --git a/scripts/deploy.sh b/scripts/deploy.sh index 12ff4f4..9a4f6fa 100644 --- a/scripts/deploy.sh +++ b/scripts/deploy.sh @@ -62,7 +62,7 @@ git config --global init.templateDir "$GIT_TEMPLATE_DIR" echo " ✓ git-templates deployed → $GIT_TEMPLATE_DIR" echo " ✓ git config init.templateDir set" -# ── 5. Bootstrap-Skripte ───────────────────────────────────────────────────── +# ── 5. Bootstrap- & Update-Skripte ─────────────────────────────────────────── mkdir -p "$HOME/.local/bin" cp "$REPO_DIR/scripts/copilot-bootstrap.sh" "$HOME/.local/bin/copilot-bootstrap.sh" chmod +x "$HOME/.local/bin/copilot-bootstrap.sh" @@ -72,12 +72,40 @@ if [[ -f "$REPO_DIR/scripts/copilot-bootstrap.fish" ]]; then chmod +x "$HOME/.local/bin/copilot-bootstrap.fish" echo " ✓ copilot-bootstrap.fish installed to ~/.local/bin/" fi +cp "$REPO_DIR/scripts/copilot-update.sh" "$HOME/.local/bin/copilot-update.sh" +chmod +x "$HOME/.local/bin/copilot-update.sh" +echo " ✓ copilot-update.sh installed to ~/.local/bin/" +if [[ -f "$REPO_DIR/scripts/copilot-update.fish" ]]; then + cp "$REPO_DIR/scripts/copilot-update.fish" "$HOME/.local/bin/copilot-update.fish" + chmod +x "$HOME/.local/bin/copilot-update.fish" + echo " ✓ copilot-update.fish installed to ~/.local/bin/" +fi -# ── 6. Git-Alias: git init → auto-bootstrap ────────────────────────────────── +# ── 6. Git-Aliase: init → auto-bootstrap | copilot-update → updater ────────── # Verwendet git --exec-path um Rekursion zu vermeiden (kein Alias-Loop). git config --global alias.init '!f() { dir=.; for a in "$@"; do case "$a" in -*) ;; *) dir="$a" ;; esac; done; "$(git --exec-path)/git-init" "$@" && "$HOME/.local/bin/copilot-bootstrap.sh" "$dir"; }; f' echo " ✓ git alias 'init' gesetzt (führt copilot-bootstrap.sh automatisch aus)" +git config --global alias.copilot-update '!~/.local/bin/copilot-update.sh' +echo " ✓ git alias 'copilot-update' gesetzt (aktualisiert Templates & Prompts)" + +# ── 7. post-merge Hook für dieses Setup-Repo ───────────────────────────────── +# Nach jedem 'git pull' auf dem Setup-Repo selbst wird deploy.sh automatisch +# ausgeführt, sodass Templates immer auf dem neuesten Stand sind. +SELF_HOOKS_DIR="$REPO_DIR/.git/hooks" +if [[ -d "$SELF_HOOKS_DIR" ]]; then + cat > "$SELF_HOOKS_DIR/post-merge" << 'HOOK' +#!/usr/bin/env sh +# post-merge – Auto-Deploy nach git pull auf dem Setup-Repo +echo "" +echo " [post-merge] Setup-Repo aktualisiert – deploye Templates neu..." +SCRIPT_DIR="$(cd "$(dirname "$0")/../../scripts" && pwd)" +bash "$SCRIPT_DIR/deploy.sh" +HOOK + chmod +x "$SELF_HOOKS_DIR/post-merge" + echo " ✓ post-merge Hook im Setup-Repo installiert (auto-deploy nach git pull)" +fi echo "" echo "=== Done ===" echo "Next: Activate Settings Sync in VS Code (Cmd+Shift+P → 'Settings Sync: Turn On')" +echo " Templates aktuell halten: git copilot-update (in jedem Repo)"