name: Deploy momo-erp

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      # 새 흐름 (2026-05-30): SSH 비밀번호/Secret 의존을 제거하고
      # 운영 컨테이너의 /api/deploy/webhook 을 직접 호출해 배포 트리거.
      # webhook 내부에서 git pull + docker compose up --build 실행 →
      # 컨테이너가 호스트 docker.sock + deploy.sh 마운트로 자기재배포.
      - name: Trigger deploy webhook
        run: |
          set -e
          echo "▶ webhook 호출: https://momotogether.com/api/deploy/webhook"
          HTTP=$(curl -ksS -m 30 -o /tmp/resp.json -w "%{http_code}" \
            -X POST "https://momotogether.com/api/deploy/webhook" \
            -H "X-Deploy-Token: momo-deploy-2026-secure" \
            -H "Content-Type: application/json" -d '{}' || echo "000")
          echo "  HTTP=$HTTP"
          cat /tmp/resp.json | head -20 || true
          if [ "$HTTP" != "200" ]; then
            echo "::error::webhook 호출 실패 (HTTP=$HTTP)"
            exit 1
          fi

      - name: Healthcheck (build-sha.txt 일치 검증)
        env:
          # github.sha = 이번 push 커밋. act_runner 가 GITHUB_SHA 환경변수를
          # 비워두는 케이스가 있어 표현식으로 명시 주입.
          EXPECTED_SHA: ${{ github.sha }}
        run: |
          EXPECTED="${EXPECTED_SHA}"
          echo "▶ 기대 SHA: $EXPECTED"
          # 빌드 + 컨테이너 swap + traefik 재로드까지 시간이 필요 — 첫 polling 전 충분히 대기
          sleep 20
          for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24; do
            REMOTE=$(curl -ksS -m 5 -L "https://momotogether.com/build-sha.txt?_=$(date +%s)" 2>/dev/null | tr -d '[:space:]' || true)
            echo "  ${i}/24: 운영 SHA=${REMOTE:-(없음)}"
            if [ -n "$REMOTE" ] && [ "$REMOTE" = "$EXPECTED" ]; then
              echo "::notice::✔ 운영에 신버전(${REMOTE:0:8}) 반영 확인"
              exit 0
            fi
            sleep 10
          done
          echo "::error::헬스체크 실패: 운영의 build-sha (${REMOTE:-없음})가 기대 SHA(${EXPECTED:-비어있음})와 다름"
          echo "    → 마지막 webhook 로그: curl -k 'https://momotogether.com/api/deploy/webhook?token=momo-deploy-2026-secure'"
          exit 1
