63 lines
3.1 KiB
Bash
63 lines
3.1 KiB
Bash
#!/bin/bash
|
|
# simulacro_usb_nuevo.sh — Ensaya montar la cartera en un USB nuevo, sin tocar este.
|
|
#
|
|
# bash programa/simulacro_usb_nuevo.sh
|
|
#
|
|
# En una carpeta temporal: descarga el programa del servidor git, crea un entorno de
|
|
# Python desde cero (sin wheels/, como en un USB nuevo), pasa las pruebas y
|
|
# recupera tus datos de la copia cifrada (llave de seguridad). Al final compara lo
|
|
# recuperado con los datos de este USB. Solo muestra recuentos; la carpeta
|
|
# temporal se borra al terminar, pase lo que pase.
|
|
|
|
cd "$(dirname "$0")" || exit 1
|
|
PROGRAMA=$PWD
|
|
pausa() { read -r -p "Pulsa Enter para cerrar..."; }
|
|
|
|
URL=$(git -C .. remote get-url origin 2>/dev/null)
|
|
if [ -z "$URL" ]; then
|
|
echo "✗ Esta carpeta no está enlazada con el servidor git (no hay «origin»)."
|
|
pausa; exit 1
|
|
fi
|
|
# Como en actualizar_app.sh: con doble clic se usa el agente SSH de la llave de seguridad
|
|
if command -v gpgconf >/dev/null; then
|
|
socket=$(gpgconf --list-dirs agent-ssh-socket 2>/dev/null)
|
|
if [ -n "$socket" ] && SSH_AUTH_SOCK="$socket" ssh-add -L >/dev/null 2>&1; then
|
|
export SSH_AUTH_SOCK="$socket"
|
|
fi
|
|
fi
|
|
command -v gpg-connect-agent >/dev/null && gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1
|
|
|
|
tmp=$(mktemp -d /tmp/cartera-simulacro.XXXXXX)
|
|
trap 'rm -rf "$tmp"' EXIT
|
|
fallo() { echo "✗ $1"; echo "Simulacro NO superado."; pausa; exit 1; }
|
|
|
|
echo "1/4 Descargando el programa del servidor git… (toca la llave de seguridad si parpadea)"
|
|
git clone --quiet --branch main "$URL" "$tmp/usb" || fallo "No se pudo descargar el programa."
|
|
echo " ✓ versión $(git -C "$tmp/usb" log -1 --format='%h del %ad' --date=short)"
|
|
|
|
echo "2/4 Creando el entorno de Python desde cero (sin wheels/, descarga de internet)…"
|
|
CARTERA_VENV="$tmp/venv" bash "$tmp/usb/programa/entorno_python.sh" || fallo "No se pudo preparar Python."
|
|
|
|
echo "3/4 Pasando las pruebas del programa…"
|
|
(cd "$tmp/usb/programa" && "$tmp/venv/bin/python" -m unittest discover -s pruebas >"$tmp/pruebas.log" 2>&1) \
|
|
|| { tail -20 "$tmp/pruebas.log"; fallo "Las pruebas fallan."; }
|
|
echo " ✓ $(grep -o 'Ran [0-9]* tests' "$tmp/pruebas.log")"
|
|
|
|
echo "4/4 Recuperando tus datos de la copia cifrada (llave de seguridad: toque y quizá PIN)…"
|
|
(cd "$tmp/usb/programa" && "$tmp/venv/bin/python" -m cartera.restaurar --datos "$tmp/usb/programa/datos") \
|
|
|| fallo "No se pudieron recuperar los datos."
|
|
if [ -f "$PROGRAMA/datos/activos.jsonl" ]; then
|
|
(cd "$tmp/usb/programa" && "$tmp/venv/bin/python" -c "
|
|
import sys
|
|
from pathlib import Path
|
|
from cartera.datos import leer
|
|
from cartera.restaurar import diferencias
|
|
n = diferencias(leer(Path(sys.argv[1])), leer(Path(sys.argv[2])))
|
|
print(' ✓ Idénticos a los de este USB.' if n == 0 else
|
|
f' ⚠ Difieren en {n} registro(s) de este USB: normal si no has sincronizado desde el último cambio.')
|
|
" "$tmp/usb/programa/datos" "$PROGRAMA/datos") || fallo "No se pudieron comparar."
|
|
fi
|
|
echo
|
|
echo "✓ Simulacro superado: con un USB vacío, el servidor git y la llave de seguridad recuperas programa y datos."
|
|
echo " (La carpeta temporal se borra ahora; este USB no se ha tocado.)"
|
|
pausa
|