d3ro-voice/apps/mobile-rn/.maestro/README.md
2026-08-29 18:33:45 +09:00

3.7 KiB

Android clean-room E2E contract

이 디렉터리의 플로우는 com.d3ro.voice의 번들 포함 e2e APK를 Metro 없이 설치해 실행하는 출시 게이트다.

필수 게이트

Flow 계정 외부 쓰기 검증 범위
fresh-install-auth.yaml 없음 없음 기존 사용자 온보딩, 로그인/비밀번호 재설정 진입, 콜드 재실행 상태 유지, 비로그인 광고 차단
fresh-install-signup.yaml 없음 없음 5단계 튜토리얼, 새 사용자 회원가입 진입, 권한 deny/allow/deny 전환, 콜드 재실행, 비로그인 광고 차단
invite-deep-link.yaml 없음 로컬 pending token 저장 후 닫을 때 삭제 앱 소유 custom-scheme 라우터, 로그인 필수 경계, 비로그인 광고 차단

필수 게이트는 실제 가입, OAuth, 결제, 팀 가입, 서버 데이터 생성을 수행하지 않는다.

CI는 같은 fresh-install-signup.yaml을 기본 프로필과 840x1490 작은 화면에서 각각 실행하고, 실패 여부와 관계없이 디스플레이 override를 초기화한다. Maestro 실행 전에 debug 앱과 AndroidTest APK를 임시 설치해 CsprngInstrumentedTest를 한 번 실행한다. 이 계측 검사는 실제 Android RNGetRandomValuesModule에서 16바이트 엔트로피를 두 번 받아 길이, non-zero, 비동일성, UUID v4 version/variant 소비 계약을 확인한 뒤 두 패키지를 제거한다. 이후 검증 대상 E2E APK를 fresh install한다.

외부 계정 게이트

authenticated-parity.yaml은 CI에 MOBILE_E2E_EMAILMOBILE_E2E_PASSWORD가 모두 있을 때만 실행한다. 이 플로우는 다음을 실제 앱 UI에서 확인한다.

  • Free 계정의 Google 테스트 배너 슬롯
  • 마이크 권한 거부 오류와 권한 허용 후 녹음 시작/취소 복구
  • sideload 환경의 Google Play 구매 차단
  • 보상형 광고 상태 표시
  • 계정, 기록, 녹음, Talk, 기기, 회의, 템플릿, 메모, 팀, 알림, 사전, 명령, 지식, 액션, 데이터 이동 화면
  • 알림 권한 거부 상태와 허용 후 화면 재진입 복구

invite-app-link-release.yaml은 live assetlinks.json에 등록된 인증서로 서명한 release APK에서만 실행한다. E2E APK의 debug 인증서를 공개 App Link 신뢰 목록에 추가하지 않는다. 실제 OAuth 공급자 동의/콜백, Google Play 결제/복원, 광고 SSV 크레딧 적립, 외부 공유 대상 앱 확인도 공급자 계정과 배포 채널이 필요한 별도 출시 승인 항목이다. 이 저장소의 자동화는 성공을 위조하지 않으며, 실행하지 않은 항목을 CI 증거에 NOT_RUN으로 기록한다.

실행 전제

  • e2e APK는 debuggable=false, E2E_TEST_BUILD=true, arm64-v8a+x86_64 universal이며 assets/index.android.bundle을 포함해야 한다. 같은 APK를 hosted x86_64 emulator와 arm64 실제 기기에 설치한다.
  • e2e 및 release Gradle task는 strict SemVer D3RO_VERSION_NAME과 1 이상 D3RO_VERSION_CODE가 없으면 실패해야 한다. GitHub release는 workflow run number에 고정 offset을 더해 Play용 코드를 단조 증가시키고, GitLab E2E는 project pipeline IID를 사용한다.
  • Google 공식 테스트 App ID 및 광고 단위만 E2E에 허용한다.
  • E2E APK는 custom scheme으로 동일한 앱 내부 초대 라우터를 검증한다. HTTPS autoVerify는 release signer SHA-256을 live /.well-known/assetlinks.json과 대조한 release 전용 flow에서만 검증한다.
  • release APK는 E2E_TEST_BUILD=false이고 Google 테스트 publisher ID를 포함하면 실패해야 한다.
  • 에뮬레이터 게이트를 실행하는 동안 Metro 서버를 시작하면 안 된다.