sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
Etapa G: fixes del kit de granja distribuida (validados en VPS Hetzner real)
1#!/usr/bin/env bash
2# farm-sync.sh <user@host> — orquesta el worker VPS desde el HUB (laptop). Una sola pasada:
3# 1. sube código + recipes/incoming/ al worker (rsync, el worker no toca gitea)
4# 2. baja el store/ sellado que el worker construyó
5# 3. promueve+firma lo cosechado (cache-hit instantáneo en los artefactos bajados) + commit/push
6#
7# El acceso es UNO solo: laptop->VPS por SSH (la clave de firma y gitea nunca salen del laptop).
8# Idempotente y seguro de re-correr. Pensado para correr cada vez que el laptop está online.
9#
10# Uso: scripts/farm/farm-sync.sh root@1.2.3.4
11# scripts/farm/farm-sync.sh root@1.2.3.4 --no-promote # sólo sincroniza, no firma
12# Env: SSH_KEY (def ~/.ssh/github5), REMOTE (def /opt/hammer)
13set -euo pipefail
14
15VPS="${1:?uso: farm-sync.sh user@host [--no-promote]}"
16SSH_KEY="${SSH_KEY:-$HOME/.ssh/github5}"
17REMOTE="${REMOTE:-/opt/hammer}"
18ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
19cd "$ROOT"
20SSH="ssh -i $SSH_KEY -o StrictHostKeyChecking=accept-new"
21
22echo "==> 1. subiendo código + cola al worker ($VPS:$REMOTE)"
23rsync -az --delete -e "$SSH" \
24 --exclude /work --exclude /store --exclude '/store-*' --exclude /target \
25 --exclude /dist --exclude /.dev-fs --exclude /.git --exclude /.scratch \
26 --exclude '*.png' --exclude '/content*' \
27 ./ "$VPS:$REMOTE/"
28
29echo "==> 2. bajando artefactos sellados del worker"
30rsync -az -e "$SSH" "$VPS:$REMOTE/store/" ./store/
31
32if [ "${2:-}" = "--no-promote" ]; then
33 echo "✓ store sincronizado (sin promote)"; exit 0
34fi
35
36echo "==> 3. promote + firma (cache-hit en lo que el worker selló)"
37scripts/build-farm.sh
38
39echo "==> 4. commit + push de la cosecha"
40git add recipes/ tandas/ 2>/dev/null || true
41if ! git diff --cached --quiet; then
42 git commit -q -m "Etapa G: cosecha del worker VPS — promote + firma"
43 git push -q origin main && echo "✓ pusheado"
44else
45 echo "(nada nuevo que commitear)"
46fi