name: Deploy Production on: push: branches: - master jobs: deploy: runs-on: self-hosted steps: - name: Pull latest code run: | cd /root/myproject/CFDivePlatform flock /tmp/cfdive-deploy.lock git fetch origin git reset --hard origin/master - name: Build images run: | cd /root/myproject/CFDivePlatform docker compose build - name: Start containers with new images run: | cd /root/myproject/CFDivePlatform docker compose up -d --remove-orphans - name: Wait for app container healthy run: | cd /root/myproject/CFDivePlatform for i in $(seq 1 30); do status=$(docker inspect --format='{{.State.Health.Status}}' cfdive-app 2>/dev/null || echo "starting") if [ "$status" = "healthy" ]; then echo "✅ app container healthy" exit 0 fi echo "⏳ waiting for app healthy... ($status)" sleep 2 done echo "❌ app container did not become healthy in time" exit 1 - name: Run migrations run: | cd /root/myproject/CFDivePlatform docker compose exec -T app php artisan migrate --force - name: Cache configs run: | cd /root/myproject/CFDivePlatform docker compose exec -T app php artisan config:cache docker compose exec -T app php artisan route:cache docker compose exec -T app php artisan view:cache docker compose exec -T app php artisan event:cache - name: Generate Swagger docs run: | cd /root/myproject/CFDivePlatform docker compose exec -T app php artisan l5-swagger:generate - name: Rebuild frontend (if changed) run: | cd /root/myproject/CFDivePlatform if git diff --name-only HEAD~1 HEAD | grep -q '^frontend/'; then docker compose build frontend docker compose up -d frontend fi