ci: trust Gitea gate during VPS deploy
DH V2 CI / WEB · typecheck, build (push) Successful in 18s
Production dependency audit / WEB · production dependencies (push) Successful in 9s
DH V2 CI / Promote verified main to deploy (push) Successful in 3s
DH V2 CI / API · typecheck, tests, build (push) Successful in 31s
Production dependency audit / API · production dependencies (push) Successful in 9s
DH V2 CI / Docker / migrations / production images (push) Successful in 49s

This commit is contained in:
2026-09-15 21:47:41 -03:00
parent 8266bd8669
commit 8d5ffc86f9
+13 -17
View File
@@ -16,8 +16,6 @@ STAMP="$(date +%Y%m%d_%H%M%S)"
BACKUP="$BACKUP_ROOT/GITEA_DEPLOY_${STAMP}"
STAGE="/root/dhv2-gitea-stage-${STAMP}"
LOG="/tmp/dhv2-gitea-deploy-${STAMP}.log"
API_TEST_IMAGE="dhv2-api:gitea-${STAMP}"
WEB_TEST_IMAGE="dhv2-web:gitea-${STAMP}"
PHASE="bootstrap"
PREV_SHA=""
TARGET_SHA=""
@@ -32,7 +30,6 @@ cleanup() {
set +e
git worktree remove --force "$STAGE" >/dev/null 2>&1 || true
rm -rf "$STAGE"
docker image rm "$API_TEST_IMAGE" "$WEB_TEST_IMAGE" >/dev/null 2>&1 || true
}
publish_status() {
@@ -159,11 +156,13 @@ fi
PREV_SHA="$(git rev-parse HEAD)"
PHASE="fetch"
git fetch origin "$DEPLOY_REF"
git fetch origin "$DEPLOY_REF" main
TARGET_SHA="$(git rev-parse "origin/$DEPLOY_REF")"
MAIN_SHA="$(git rev-parse origin/main)"
echo "Actual: $PREV_SHA"
echo "Objetivo: $TARGET_SHA"
echo "Main: $MAIN_SHA"
if [ "$TARGET_SHA" = "$PREV_SHA" ]; then
echo "Producción ya está en el commit autorizado."
@@ -171,6 +170,13 @@ if [ "$TARGET_SHA" = "$PREV_SHA" ]; then
exit 0
fi
if [ "$TARGET_SHA" != "$MAIN_SHA" ]; then
echo "ERROR: deploy no coincide con main; se rechaza una promoción manual o incompleta."
echo "deploy: $TARGET_SHA"
echo "main: $MAIN_SHA"
false
fi
if ! git merge-base --is-ancestor "$PREV_SHA" "$TARGET_SHA"; then
echo "ERROR: origin/$DEPLOY_REF no es fast-forward desde producción."
false
@@ -193,19 +199,9 @@ while IFS= read -r -d '' script; do
done < <(find "$STAGE/scripts" -type f -name '*.sh' -print0)
echo
echo "========== TEST API CANDIDATA =========="
docker build --target builder -t "$API_TEST_IMAGE" "$STAGE/api-v3" </dev/null
docker run --rm \
-v "$STAGE/api-v3/test:/app/test:ro" \
-v "$STAGE/api-v3/tsconfig.test.json:/app/tsconfig.test.json:ro" \
-v "$STAGE/docker-compose.yml:/docker-compose.yml:ro" \
-v "$STAGE/web-v2:/web-v2:ro" \
-v "$STAGE/android-app:/android-app:ro" \
"$API_TEST_IMAGE" npm test </dev/null
echo
echo "========== BUILD WEB CANDIDATA =========="
docker build -t "$WEB_TEST_IMAGE" "$STAGE/web-v2" </dev/null
echo "========== PREFLIGHT DE DEPLOY =========="
echo "Gitea Actions ya validó tests, migraciones e imágenes de producción."
echo "El VPS valida únicamente composición, scripts, backup, migraciones reales, recreación y health."
PHASE="backup"
echo