diff --git a/.forgejo/workflows/deploy.yml b/.forgejo/workflows/deploy.yml index 63ee5fe..0d2f8a1 100644 --- a/.forgejo/workflows/deploy.yml +++ b/.forgejo/workflows/deploy.yml @@ -45,36 +45,46 @@ jobs: docker compose -p bilhej-prod -f docker-compose.prod.yml down docker compose -p bilhej-prod -f docker-compose.prod.yml up --build -d - - name: Wait for services - run: sleep 20 - - - name: Health check — backend API + - name: Health checks with rollback run: | + echo "Waiting for services to start..." + sleep 20 + + BACKEND_OK=false for i in 1 2 3 4 5; do if docker run --rm --network bilhej-prod_default curlimages/curl:8.5.0 \ - -sf http://bilhej-backend-prod:8080/api/vehicles/ZZZ999; then + -s http://bilhej-backend-prod:8080/api/vehicles/ABC123 > /dev/null; then echo "Backend is healthy" - exit 0 + BACKEND_OK=true + break fi - echo "Attempt $i failed, retrying in 5s..." + echo "Backend check attempt $i failed, retrying in 5s..." sleep 5 done - echo "Backend health check failed" - exit 1 - - name: Health check — frontend - run: | + FRONTEND_OK=false for i in 1 2 3 4 5; do if docker run --rm --network bilhej-prod_default curlimages/curl:8.5.0 \ - -sf http://bilhej-frontend-prod/ | grep -qi "bilhej\|Bilhej\|BilHej"; then + -s http://bilhej-frontend-prod/ | grep -qi "bilhej\|Bilhej\|BilHej"; then echo "Frontend is serving" - exit 0 + FRONTEND_OK=true + break fi - echo "Attempt $i failed, retrying in 5s..." + echo "Frontend check attempt $i failed, retrying in 5s..." sleep 5 done - echo "Frontend health check failed" - exit 1 + + if [ "$BACKEND_OK" != "true" ] || [ "$FRONTEND_OK" != "true" ]; then + echo "" + echo "═══════════════════════════════════════════════════" + echo " HEALTH CHECK FAILED — ROLLING BACK DEPLOYMENT" + echo "═══════════════════════════════════════════════════" + echo "" + docker compose -p bilhej-prod -f docker-compose.prod.yml down + echo "" + echo "Rolled back. Containers stopped. DB volume preserved." + exit 1 + fi - name: Print deploy status run: |