spb/cluster-skill
Public
HTML 57.2%
Shell 19.1%
Python 11.2%
CSS 7.4%
JavaScript 5.1%
1#!/bin/bash2# mld (laptop) — relaie la commande à la passerelle M1M32 puis rapatrie le registre.3# mld plan | mld deploy <app> | mld move <app> --to X | mld status --live | mld stage <dir> <app> ...4# `mld stage <dir-local> <app>` : pousse un dossier du laptop dans le staging de la passerelle (~/dispatch/stage/<app>/dir/).5set -u6GW=M1M327SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"8if [ "${1:-}" = "stage" ]; then9 echo "⚠️ REMOTE-FIRST : \`mld stage\` ne sert qu'à CRÉER une app (stage → deploy → adopt). Pour modifier une app existante, travailler dans le dépôt git SUR LE NŒUD (mld status → ssh <nœud>) — voir MACLUSTR-PROCEDURE.md." >&210 src="${2:?usage: mld stage <dir-local> <app>}"; app="${3:?usage: mld stage <dir-local> <app>}"11 # Un fichier .mldignore à la racine du projet ajoute des exclusions (syntaxe rsync) — p. ex. data/ avec des profils navigateur.12 extra=(); [ -f "${src%/}/.mldignore" ] && extra=(--exclude-from="${src%/}/.mldignore")13 rsync -az --delete --exclude .git --exclude node_modules --exclude .next --exclude .venv --exclude .DS_Store ${extra[@]+"${extra[@]}"} \14 --rsync-path="mkdir -p dispatch/stage/$app/dir && rsync" "${src%/}/" "$GW:dispatch/stage/$app/dir/" && echo "OK stage $app → $GW:~/dispatch/stage/$app/dir/${extra:+ (.mldignore appliqué)}"15 exit $?16fi17ssh -t -o LogLevel=ERROR "$GW" "~/maclustr-dispatch/bin/mld $(printf '%q ' "$@")"18rc=$?19# registre : copie locale (source de vérité = passerelle)20scp -q "$GW:dispatch/registry.json" "$SKILL_DIR/cluster-registry.json" 2>/dev/null21exit $rc22