name: Deploy to Dev on: push: branches: [main] jobs: deploy: name: Deploy & Smoke Test runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install SSH client run: which ssh || (apt-get update -qq && apt-get install -y -qq openssh-client) - name: Setup SSH key run: | mkdir -p ~/.ssh echo "${{ secrets.DEV_SSH_KEY }}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key ssh-keyscan -H ${{ secrets.DEV_HOST }} >> ~/.ssh/known_hosts 2>/dev/null || true - name: Deploy run: | ssh -i ~/.ssh/deploy_key \ -o StrictHostKeyChecking=no \ -o ConnectTimeout=10 \ ${{ secrets.DEV_USER }}@${{ secrets.DEV_HOST }} \ 'set -e cd /opt/lisilou-portfolio git pull origin main docker compose build docker compose up -d echo "Deploy complete"' - name: Wait for health check run: | echo "Waiting for services..." for i in $(seq 1 24); do if curl -sf --max-time 4 "http://${{ secrets.DEV_HOST }}:8080/health" > /dev/null 2>&1; then echo "Services are up (attempt $i)" exit 0 fi echo " Attempt $i/24 — sleeping 5s" sleep 5 done echo "Health check timed out after 2 minutes" exit 1 - name: Smoke tests run: bash scripts/smoke-test.sh "http://${{ secrets.DEV_HOST }}:8080" - name: Cleanup SSH key if: always() run: rm -f ~/.ssh/deploy_key