- 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
105 lines
5.4 KiB
Fish
105 lines
5.4 KiB
Fish
#!/usr/bin/env fish
|
||
# deploy.fish – Copilot-Setup auf Linux mit fish-Shell deployen
|
||
# Usage: fish scripts/deploy.fish
|
||
|
||
set REPO_DIR (dirname (status filename))/..
|
||
set REPO_DIR (realpath $REPO_DIR)
|
||
|
||
echo "=== Copilot Setup Deploy (Linux/fish) ==="
|
||
echo "Source: $REPO_DIR"
|
||
|
||
# ── 1. VS Code User-Verzeichnis ermitteln ─────────────────────────────────────
|
||
# Remote (VS Code Server)
|
||
if test -d /home/(whoami)/.vscode-server/data/User
|
||
set VSCODE_USER /home/(whoami)/.vscode-server/data/User
|
||
# Flatpak
|
||
else if test -d $HOME/.var/app/com.visualstudio.code/config/Code/User
|
||
set VSCODE_USER $HOME/.var/app/com.visualstudio.code/config/Code/User
|
||
# Standard Linux
|
||
else
|
||
set VSCODE_USER $HOME/.config/Code/User
|
||
end
|
||
|
||
echo "VS Code User dir: $VSCODE_USER"
|
||
|
||
# ── 2. User settings.json mergen / anlegen ────────────────────────────────────
|
||
if test -f $VSCODE_USER/settings.json
|
||
echo " ─ settings.json exists – skipping (merge manually if needed)"
|
||
echo " Reference: $REPO_DIR/user-settings/settings.json"
|
||
else
|
||
mkdir -p $VSCODE_USER
|
||
cp $REPO_DIR/user-settings/settings.json $VSCODE_USER/settings.json
|
||
echo " ✓ settings.json deployed"
|
||
end
|
||
|
||
# ── 3. Prompt Files ───────────────────────────────────────────────────────────
|
||
mkdir -p $VSCODE_USER/prompts
|
||
for f in $REPO_DIR/prompts/*.prompt.md
|
||
set fname (basename $f)
|
||
if test -f $VSCODE_USER/prompts/$fname
|
||
echo " ─ prompts/$fname already exists, skipping"
|
||
else
|
||
cp $f $VSCODE_USER/prompts/$fname
|
||
echo " ✓ prompts/$fname deployed"
|
||
end
|
||
end
|
||
|
||
# ── 4. Git-Templates ──────────────────────────────────────────────────────────
|
||
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 $REPO_DIR/git-templates/.github/copilot-instructions.md $GIT_TEMPLATE_DIR/.github/
|
||
cp $REPO_DIR/git-templates/.vscode/settings.json $GIT_TEMPLATE_DIR/.vscode/
|
||
cp $REPO_DIR/git-templates/.vscode/extensions.json $GIT_TEMPLATE_DIR/.vscode/
|
||
cp $REPO_DIR/git-templates/hooks/pre-commit $GIT_TEMPLATE_DIR/hooks/
|
||
chmod +x $GIT_TEMPLATE_DIR/hooks/pre-commit
|
||
cp $REPO_DIR/git-templates/docs/USER.md $GIT_TEMPLATE_DIR/docs/
|
||
cp $REPO_DIR/git-templates/docs/ADMIN.md $GIT_TEMPLATE_DIR/docs/
|
||
cp $REPO_DIR/git-templates/docs/MAINTAINER.md $GIT_TEMPLATE_DIR/docs/
|
||
cp $REPO_DIR/git-templates/history/summary/PROJECT_CONTEXT.md $GIT_TEMPLATE_DIR/history/summary/
|
||
git config --global init.templateDir $GIT_TEMPLATE_DIR
|
||
echo " ✓ git-templates deployed → $GIT_TEMPLATE_DIR"
|
||
echo " ✓ git config init.templateDir set"
|
||
|
||
# ── 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
|
||
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-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)"
|