| .. | ||
| admin-local-admin-complete.yaml | ||
| admin-local-admin-open.yaml | ||
| admin-local-manager-read.yaml | ||
| admin-local-manager-update.yaml | ||
| admin-local-manager.yaml | ||
| admin-local-ordinary-settings.yaml | ||
| admin-local-ordinary.yaml | ||
| admin-local-stale-check.yaml | ||
| admin-local-stale-open.yaml | ||
| admin-local-super.yaml | ||
| authenticated-parity.yaml | ||
| fresh-install-auth.yaml | ||
| fresh-install-signup.yaml | ||
| incoming-share-local-check.yaml | ||
| incoming-share-local-login.yaml | ||
| invite-app-link-release.yaml | ||
| invite-deep-link.yaml | ||
| README.md | ||
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_EMAIL과 MOBILE_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으로 기록한다.
실행 전제
e2eAPK는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 SemVerD3RO_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 서버를 시작하면 안 된다.