64 lines
2.0 KiB
YAML
64 lines
2.0 KiB
YAML
name: Deploy API-Ubigeo
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
deploy:
|
|
runs-on: self-hosted
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Backup current image
|
|
run: |
|
|
docker tag ubigeo-api:latest ubigeo-api:rollback 2>/dev/null || true
|
|
|
|
- name: Sync source
|
|
run: |
|
|
rsync -a --delete \
|
|
--exclude='.git' \
|
|
--exclude='node_modules' \
|
|
--exclude='dist' \
|
|
--exclude='.env*' \
|
|
./ /home/deployer/api-ubigeo/
|
|
|
|
- name: Build image
|
|
run: |
|
|
cd /home/deployer/api-ubigeo
|
|
docker build -t ubigeo-api:latest .
|
|
|
|
- name: Deploy containers
|
|
run: |
|
|
cd /home/deployer/api-ubigeo
|
|
docker compose -f docker-compose.production.yml down --remove-orphans
|
|
docker compose -f docker-compose.production.yml up -d
|
|
|
|
- name: Health check
|
|
id: health
|
|
continue-on-error: true
|
|
run: |
|
|
echo "Waiting for API-Ubigeo to start..."
|
|
for i in $(seq 1 15); do
|
|
sleep 3
|
|
HTTP_CODE=$(curl -s -o /dev/null -w '%{http_code}' http://localhost:3200/api/v1/health 2>/dev/null || echo "000")
|
|
if [ "$HTTP_CODE" != "000" ] && [ "$HTTP_CODE" != "502" ] && [ "$HTTP_CODE" != "503" ]; then
|
|
echo "✅ Health check passed after $((i*3))s (HTTP $HTTP_CODE)"
|
|
exit 0
|
|
fi
|
|
echo "Attempt $i/15 - not ready yet (HTTP $HTTP_CODE)..."
|
|
done
|
|
echo "❌ Health check failed after 45s"
|
|
docker logs ubigeo-api --tail 50
|
|
exit 1
|
|
|
|
- name: Rollback on failure
|
|
if: steps.health.outcome == 'failure'
|
|
run: |
|
|
echo "❌ Deploy failed, rolling back..."
|
|
docker tag ubigeo-api:rollback ubigeo-api:latest 2>/dev/null || true
|
|
cd /home/deployer/api-ubigeo
|
|
docker compose -f docker-compose.production.yml up -d --force-recreate
|
|
echo "🔄 Rollback complete"
|
|
exit 1 |