Files
labstream-organizador/publicar.sh
Labstream 8c5153e8ed OrganiLAB 1.6.1: organizador, actualizador, interfaz 1.6 y publicación
Primer commit del proyecto. Incluye el rediseño 1.6 (riel de pasos en la barra
lateral), el actualizador con reintentos y respaldo, publicar.sh y la nueva
opción de desconectar carpetas (1.6.1).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-15 14:26:02 -05:00

50 líneas
3.1 KiB
Bash

#!/bin/bash
# Publica la versión ya empaquetada (empaquetar.py) para que las copias instaladas se actualicen solas:
# 1. sube los dos zips al NAS (storage/herramientas/ del OS)
# 2. deja el manifiesto en GitHub (labstream-os/public/herramientas/organizador.json), en un commit
# que solo toca ese archivo, sin mezclar cambios locales de labstream-os
# 3. lanza el despliegue del OS en el NAS y espera a que publique la versión
# Uso (desde Git Bash): bash publicar.sh
# Requisitos: llave ~/.ssh/editorias_nas con acceso Labstream@192.168.0.22 (sudo sin contraseña),
# y permiso de push a Labstream2026/labstream-os.
set -e
AQUI="$(cd "$(dirname "$0")" && pwd)"
OS="$AQUI/../labstream-os"
NAS="Labstream@192.168.0.22"
SSH="ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -i $HOME/.ssh/editorias_nas"
DEST=/volume5/contenedores/labstream-os/data/storage/herramientas
V=$(grep -o '"version": "[^"]*"' "$AQUI/manifiesto.json" | head -1 | cut -d'"' -f4)
APP="OrganizadorLabstream-app-$V.zip"; FULL="OrganizadorLabstream-portatil-$V.zip"
[ -f "$AQUI/$APP" ] && [ -f "$AQUI/$FULL" ] || { echo "Faltan los zips de la $V: corre antes py -3.12 empaquetar.py"; exit 1; }
echo "== OrganiLAB $V =="
echo "1/3 subiendo al NAS…"
# el NAS no tiene SFTP: scp en modo antiguo (-O). La carpeta es del usuario del contenedor (1001): se sube a
# la carpeta personal y se mueve con sudo.
scp -O -q -o BatchMode=yes -o StrictHostKeyChecking=no -i "$HOME/.ssh/editorias_nas" "$AQUI/$APP" "$AQUI/$FULL" "$NAS:~/"
$SSH "$NAS" "sudo mv ~/$APP ~/$FULL $DEST/ && sudo chown 1001:1001 $DEST/$APP $DEST/$FULL && cd $DEST && sha256sum $APP $FULL" 2>/dev/null
grep -o '"sha256": "[^"]*"' "$AQUI/manifiesto.json" | sed 's/.*: "//; s/"//' | sed 's/^/local /'
echo "2/3 manifiesto a GitHub…"
cd "$OS"
git fetch -q origin main
export GIT_INDEX_FILE="$(mktemp)"
git read-tree origin/main
blob=$(git hash-object -w public/herramientas/organizador.json)
git update-index --add --cacheinfo "100644,$blob,public/herramientas/organizador.json"
tree=$(git write-tree); unset GIT_INDEX_FILE
if [ "$tree" = "$(git rev-parse origin/main^{tree})" ]; then echo " (el manifiesto ya estaba publicado)"; else
commit=$(git commit-tree "$tree" -p origin/main -m "OrganiLAB $V: paquete y manifiesto")
git push -q origin "$commit:main" && echo " commit $(echo $commit | cut -c1-8) en main"
fi
echo "3/3 desplegando el OS (tarda unos minutos)…"
# por SSH, sudo no lleva /usr/local/bin en el PATH y «docker» no se encuentra: se pasa a mano
$SSH "$NAS" "sudo env PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin bash /var/services/homes/Labstream/claude-job.sh >/dev/null 2>&1; tail -1 /volume5/despliegues/labstream-os-deploy.log" 2>/dev/null
for i in $(seq 1 30); do
pub=$(curl -s -H "Cache-Control: no-cache" https://os.labstreamsas.com/herramientas/organizador.json | grep -o '"version": "[^"]*"' | cut -d'"' -f4)
[ "$pub" = "$V" ] && { echo "Publicado: os.labstreamsas.com sirve la $V. Las copias instaladas avisarán al abrirse."; exit 0; }
sleep 10
done
echo "El OS aún sirve la $pub. Mira /volume5/despliegues/labstream-os-deploy.log en el NAS."; exit 1