name: Deploy to Production on: push: branches: - main jobs: deploy: name: Build and Deploy runs-on: docker-host steps: - name: Checkout code uses: actions/checkout@v4 - name: Verify env file exists on host run: | if [ ! -f /opt/memento/.env.docker ]; then echo "ERROR: /opt/memento/.env.docker introuvable sur le serveur." echo "Créer ce fichier une seule fois manuellement sur 192.168.1.190." exit 1 fi echo "env file OK" - name: Sync source to /opt/memento run: | mkdir -p /opt/memento # cp -a préserve les fichiers existants (.env.docker) non trackés par git cp -a "$GITHUB_WORKSPACE"/. /opt/memento/ echo "Sync done" - name: Build and deploy working-directory: /opt/memento run: | set -e echo "=== Building memento-note ===" docker compose build memento-note echo "=== Starting containers ===" docker compose up -d --remove-orphans echo "=== Running containers ===" docker compose ps - name: Wait for app to be ready run: | echo "Waiting up to 120s for memento-web to respond..." for i in $(seq 1 24); do STATUS=$(docker inspect --format='{{.State.Health.Status}}' memento-web 2>/dev/null || echo "unknown") if [ "$STATUS" = "healthy" ]; then echo "memento-web is healthy after $((i * 5))s" exit 0 fi echo " [$((i * 5))s] status=$STATUS" sleep 5 done echo "Timeout. Last logs:" docker logs memento-web --tail=30 exit 1 - name: Cleanup old images if: always() run: docker image prune -f