From 2ee956665f925423897beba5d81a00a929a55998 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Sat, 5 Sep 2026 19:54:11 -0300 Subject: [PATCH 1/2] =?UTF-8?q?maintenance:=20armar=20ejecuci=C3=B3n=20def?= =?UTF-8?q?initiva=20del=20fresh-start?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api-v3/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-v3/package.json b/api-v3/package.json index 03d56d6..3d2bdf4 100644 --- a/api-v3/package.json +++ b/api-v3/package.json @@ -9,7 +9,7 @@ "start:dev": "nest start --watch", "typecheck": "tsc --noEmit", "test": "tsc -p tsconfig.test.json --noEmit && node --import tsx --test test/**/*.test.ts", - "migration:run": "node dist/database/migration-cli.js run && node dist/cli/fresh-start-reset.js --preview", + "migration:run": "node dist/database/migration-cli.js run && node dist/cli/fresh-start-reset.js --apply DHV2-FRESH-START-20260905", "migration:show": "node dist/database/migration-cli.js show", "migration:revert": "node dist/database/migration-cli.js revert", "bootstrap:admin": "node dist/cli/bootstrap-admin.js", From 1d661e2e483812309fd9f5b1763a3455778105d3 Mon Sep 17 00:00:00 2001 From: enlineawork Date: Sat, 5 Sep 2026 19:54:48 -0300 Subject: [PATCH 2/2] maintenance: respaldar y vaciar volumen de archivos en fresh-start --- scripts/deploy-github.sh | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/scripts/deploy-github.sh b/scripts/deploy-github.sh index 3328a4c..e31edfb 100644 --- a/scripts/deploy-github.sh +++ b/scripts/deploy-github.sh @@ -114,7 +114,7 @@ rollback() { echo if [ -d "$BACKUP" ]; then echo "Backup PRE disponible en: $BACKUP" - echo "Las migraciones son forward-only; database-before.dump queda disponible para restauración manual si hiciera falta." + echo "database-before.dump y asset-media-before.tar.gz permiten una restauración manual integral si hiciera falta." else echo "No fue necesario crear backup PRE: el fallo ocurrió durante el preflight del candidato, antes de tocar producción." fi @@ -207,9 +207,15 @@ install -m 600 .env "$BACKUP/.env" git rev-parse HEAD > "$BACKUP/previous.sha" printf '%s\n' "$TARGET_SHA" > "$BACKUP/target.sha" docker compose ps -a > "$BACKUP/docker-before.txt" + +echo "Respaldando volumen de fotos/importaciones..." +docker compose run --rm --no-deps --user root \ + -v "$BACKUP:/backup" \ + api sh -lc 'tar -czf /backup/asset-media-before.tar.gz -C /app/storage/asset-media .' + ( cd "$BACKUP" - sha256sum database-before.dump source-before.tar.gz .env previous.sha target.sha docker-before.txt > SHA256SUMS.txt + sha256sum database-before.dump source-before.tar.gz asset-media-before.tar.gz .env previous.sha target.sha docker-before.txt > SHA256SUMS.txt sha256sum -c SHA256SUMS.txt ) chmod 600 "$BACKUP"/* "$BACKUP/.env" 2>/dev/null || true @@ -228,11 +234,31 @@ docker compose build api migrate web /dev/null | wc -l | tr -d " ")" + echo "files_before=$before" + for path in "$ROOT"/* "$ROOT"/.[!.]* "$ROOT"/..?*; do + [ -e "$path" ] || continue + rm -rf -- "$path" + done + mkdir -p "$ROOT/imports" + chown -R node:node "$ROOT" + after="$(find "$ROOT" -type f 2>/dev/null | wc -l | tr -d " ")" + echo "files_after=$after" + [ "$after" = "0" ] +' | tee "$BACKUP/media-clean.txt" +grep -Fq 'files_after=0' "$BACKUP/media-clean.txt" + PHASE="recreate" echo echo "========== RECREATE API + WEB ==========" @@ -284,7 +310,7 @@ git rev-parse HEAD > "$BACKUP/deployed.sha" printf 'API=%s\nWEB=%s\n' "$EXPECTED_API_VERSION" "$EXPECTED_WEB_VERSION" > "$BACKUP/deployed-versions.txt" ( cd "$BACKUP" - sha256sum database-after.dump deployed.sha deployed-versions.txt health.json migrations.txt docker-after.txt >> SHA256SUMS.txt + sha256sum database-after.dump deployed.sha deployed-versions.txt health.json migrations.txt media-clean.txt docker-after.txt >> SHA256SUMS.txt sha256sum -c SHA256SUMS.txt ) chmod 600 "$BACKUP"/* "$BACKUP/.env" 2>/dev/null || true