#!/bin/bash # mld (laptop) — relaie la commande à la passerelle M1M32 puis rapatrie le registre. # mld plan | mld deploy | mld move --to X | mld status --live | mld stage ... # `mld stage ` : pousse un dossier du laptop dans le staging de la passerelle (~/dispatch/stage//dir/). set -u GW=M1M32 SKILL_DIR="$(cd "$(dirname "$0")" && pwd)" if [ "${1:-}" = "stage" ]; then 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 ) — voir MACLUSTR-PROCEDURE.md." >&2 src="${2:?usage: mld stage }"; app="${3:?usage: mld stage }" # Un fichier .mldignore à la racine du projet ajoute des exclusions (syntaxe rsync) — p. ex. data/ avec des profils navigateur. extra=(); [ -f "${src%/}/.mldignore" ] && extra=(--exclude-from="${src%/}/.mldignore") rsync -az --delete --exclude .git --exclude node_modules --exclude .next --exclude .venv --exclude .DS_Store ${extra[@]+"${extra[@]}"} \ --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é)}" exit $? fi ssh -t -o LogLevel=ERROR "$GW" "~/maclustr-dispatch/bin/mld $(printf '%q ' "$@")" rc=$? # registre : copie locale (source de vérité = passerelle) scp -q "$GW:dispatch/registry.json" "$SKILL_DIR/cluster-registry.json" 2>/dev/null exit $rc