diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 3190574..c80849d 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -9,14 +9,14 @@ jobs: deploy: runs-on: ubuntu-latest steps: - # 단일 워크플로 결과 = webhook 트리거 + 헬스체크가 한 번이라도 성공 - # 헬스체크에서 빌드가 늦어져 polling 안에 못 들어와도 워크플로는 ✅ 로 종료한다 — - # 실제 운영 반영은 webhook 이 받아간 시점에 분리된 deployer 컨테이너가 계속 진행. - # 사용자 시각의 "녹색 = 자동배포 정상" 상태를 보장. + # 단일 step — webhook 트리거만. 운영 빌드/swap 은 분리 deployer 컨테이너가 비동기로 진행. + # 워크플로는 webhook 호출 성공 시점에 즉시 ✅ 로 종료한다 (보통 5~10초). + # 운영 실제 반영 검증: https://momotogether.com/build-sha.txt 또는 + # curl -k 'https://momotogether.com/api/deploy/webhook?token=momo-deploy-2026-secure' 로 로그 조회. - name: Trigger deploy webhook run: | set -e - echo "▶ webhook 호출: https://momotogether.com/api/deploy/webhook" + echo "▶ POST https://momotogether.com/api/deploy/webhook (sha=${{ github.sha }})" 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" \ @@ -27,27 +27,4 @@ jobs: echo "::error::webhook 호출 실패 (HTTP=$HTTP)" exit 1 fi - echo "::notice::✔ webhook 트리거 성공 — 운영에서 분리 deployer 컨테이너가 git pull/build/swap 진행" - - # 부가 확인 (선택). 짧게만 검증 — 워크플로 시간을 ~1분 내로 유지. - # 실제 빌드는 보통 60-90초라 polling 안에 안 들어와도 정상. - # 운영 반영 확인은 https://momotogether.com/build-sha.txt 직접 또는 - # webhook 로그(/api/deploy/webhook?token=...) 로. - - name: Healthcheck (informational, 짧게) - continue-on-error: true - env: - EXPECTED_SHA: ${{ github.sha }} - run: | - EXPECTED="${EXPECTED_SHA}" - echo "▶ 기대 SHA: $EXPECTED" - sleep 10 - for i in 1 2 3 4 5 6; do - REMOTE=$(curl -ksS -m 4 -L "https://momotogether.com/build-sha.txt?_=$(date +%s)" 2>/dev/null | tr -d '[:space:]' || true) - echo " ${i}/6: 운영 SHA=${REMOTE:-(없음)}" - if [ -n "$REMOTE" ] && [ "$REMOTE" = "$EXPECTED" ]; then - echo "::notice::✔ 운영에 신버전(${REMOTE:0:8}) 반영 확인 (${i}회차)" - exit 0 - fi - sleep 5 - done - echo "::notice::polling 안에 build-sha 갱신 미확인 — 빌드가 더 오래 걸리는 케이스. 1~2분 후 운영에 자동 반영됩니다." + echo "::notice::✔ 자동배포 트리거 — 운영 deployer 컨테이너에서 git pull→build→swap 진행 중 (보통 60~90초 후 반영)" diff --git a/src/components/push-optin.tsx b/src/components/push-optin.tsx index addf3ab..3666799 100644 --- a/src/components/push-optin.tsx +++ b/src/components/push-optin.tsx @@ -177,10 +177,36 @@ export function PushOptIn({ variant = "compact" }: PushOptInProps) { setDenied(perm === "denied"); if (perm !== "granted") { writeIntent("off"); + // 안드로이드 OS 알림은 "허용" 인데도 여기서 denied 가 나오는 경우 = TWA 의 + // Chrome 사이트별 권한이 막혀 있음 (Android 앱 알림 권한과 별개 시스템). + // → Chrome 사이트 권한을 풀거나, 앱 데이터를 삭제해 처음 prompt 부터 다시. await Swal.fire({ icon: "warning", - title: "알림 권한이 허용되지 않았습니다", - html: `