name: Deploy to Production on: push: branches: - main jobs: deploy: name: Build and Deploy runs-on: ubuntu-24.04 steps: - name: Setup SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H 192.168.1.190 >> ~/.ssh/known_hosts - name: Deploy via SSH run: | ssh root@192.168.1.190 << 'ENDSSH' set -e cd /opt/memento echo "=== Git pull ===" git config --global --add safe.directory /opt/memento git pull origin main echo "=== Building ===" docker compose build memento-note echo "=== Starting ===" docker compose up -d --remove-orphans docker compose ps ENDSSH - name: Wait for app to be healthy run: | echo "Waiting up to 180s for http://192.168.1.190:3000 ..." for i in $(seq 1 36); do CODE=$(curl -s -o /dev/null -w "%{http_code}" --max-time 5 http://192.168.1.190:3000/ || echo "000") if [ "$CODE" != "000" ] && [ "$CODE" -lt 500 ]; then echo "OK - app responded (HTTP $CODE) after $((i * 5))s" exit 0 fi echo " [$((i * 5))s] HTTP $CODE" sleep 5 done echo "Timeout! Derniers logs :" ssh root@192.168.1.190 "docker logs memento-web --tail=50" exit 1 - name: Cleanup if: always() run: ssh root@192.168.1.190 "docker image prune -f" || true