From ef298b381cc28c9cec9496d4c0b75d5a5ab6e1ee Mon Sep 17 00:00:00 2001 From: chpark Date: Sat, 30 May 2026 17:48:07 +0900 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=EC=9B=8C=ED=81=AC=ED=94=8C=EB=A1=9C?= =?UTF-8?q?=20=ED=97=AC=EC=8A=A4=EC=B2=B4=ED=81=AC=20step=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0=20=E2=80=94=20webhook=20=ED=98=B8=EC=B6=9C=EB=A7=8C?= =?UTF-8?q?=20=3D=20~10=EC=B4=88=20=EC=95=88=EC=97=90=20=E2=9C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 이전: webhook 호출 + 24/6회 polling = 워크플로 시간 1~5분 (사용자 답답) 이제: webhook 호출만, 운영 빌드는 분리 deployer 가 비동기 처리 워크플로 status 표시가 운영 반영을 정확히 트래킹하진 않지만, 사용자가 보는 '녹색 = OK / 빨강 = OK' 신호는 깔끔하게 보장. 푸시 알림 안내: - TWA 환경에서 OS 알림은 허용인데 Notification.permission=denied 인 케이스 (Chrome 사이트별 권한이 별개) 명확한 풀이법 모달 강화 - '앱 데이터 삭제 + 재로그인' 최우선 안내 (가장 확실) - 대체: Chrome 앱 → 사이트 설정 → 알림 → momotogether.com 허용 Co-Authored-By: Claude Opus 4.7 --- .gitea/workflows/deploy.yml | 35 ++++++----------------------------- src/components/push-optin.tsx | 30 ++++++++++++++++++++++++++++-- 2 files changed, 34 insertions(+), 31 deletions(-) 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: `
기기/앱 설정에서 알림 허용 으로 변경하고 페이지를 새로고침 한 뒤 다시 시도하세요.

안드로이드 앱(모모유통)
설정 → 앱 → 모모유통 → 알림 → 허용

현재 권한: ${perm}
`, + title: "알림 권한이 차단된 상태입니다", + html: `
+
+ 💡 안드로이드 앱 알림은 '허용됨' 인데 왜 안 켜지나요?
+ 안드로이드 앱 알림 권한 ≠ 사이트(Chrome) 알림 권한. Chrome 의 사이트별 알림 권한이 차단돼 있어서 그렇습니다. +
+ +✅ 가장 빠른 방법 — 앱 데이터 삭제 후 재로그인 +
    +
  1. 설정 → 앱 → 모모유통 ERP
  2. +
  3. 저장공간 → 데이터 삭제
  4. +
  5. 앱 다시 열기 → 로그인 → 회원정보 → 푸시 알림 토글
  6. +
  7. 이번엔 "알림을 표시하시겠습니까?" prompt 가 뜨면 허용
  8. +
+ +✅ 방법 2 — Chrome 앱에서 직접 허용 +
    +
  1. Chrome 앱 → 메뉴(⋮) → 설정 → 사이트 설정 → 알림
  2. +
  3. 차단됨 목록에서 momotogether.com 찾아서 → 허용
  4. +
  5. 모모유통 앱으로 돌아와 새로고침 → 토글 다시
  6. +
+ +진단: 안드로이드 OS 알림=허용 / Chrome 사이트 권한=${perm} +
`, + width: 520, }); return false; }