Skip to content

test: 1.1.2 디바이스 QA와 Mac CI를 연결한다 - #107

Merged
Roy-wonji merged 2 commits into
developfrom
feat/qa-device-hub-112
Oct 17, 2026
Merged

Roy-wonji merged 2 commits into
developfrom
feat/qa-device-hub-112

Conversation

@Roy-wonji

@Roy-wonji Roy-wonji commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator

변경 내용

1.1.2 앱을 지정한 시뮬레이터에서 검사하는 QA 실행기를 추가합니다. 로그인된 회원·운영진 홈에서 프로필을 열거나 이미 열린 프로필을 검사하며, 카드 표시와 스켈레톤·오류 영역 소멸을 확인합니다. 앱 데이터와 로그인 세션을 초기화하지 않습니다.

  • Duo(iOS 27.1)·iPhone 18 Pro(iOS 27.0)를 순차 빌드·설치·검사하는 Mac CI
  • 동일 저장소 QA PR 또는 수동 실행에 한정하며 외부 fork PR은 self-hosted 실행 제외
  • 새로 만든 시뮬레이터만 정리하고, 기기별 증거는 checkout 밖 로컬 경로에 보존
  • Maestro 실패 후 남는 자식 프로세스 정리와 상세 진단 로그
  • 별도 실기기 Appium/WDA 실행기와 버전·빌드·기기 격리 검사

검증

  • Python 회귀 테스트 29개 통과, Python/YAML 구문 검사 및 git diff --check 통과
  • 로그인된 Duo 운영진 프로필 / iPhone 18 Pro 회원 프로필 실제 Maestro 검사 통과 (앱 1.1.2, build 2609071448)
  • 두 기기의 홈 표시·스켈레톤 해소 검사 통과
  • CI 증거 보존 문제 수정 후 별도 코드 재검토 완료
  • Mac CI Duo·iPhone 18 Pro QA 모두 통과: 1.1.2/build 2609071448 새 빌드·설치·시작 화면 검사와 임시 기기 정리 성공
  • 기존 PR 앱 테스트: shard 0 399개 + shard 1 463개 = 862개 통과, 실패·건너뜀 0개. 매개변수별 실행 포함 918회. xcresult에서 직접 확인
  • 1.0.9 SwiftData migration 테스트 묶음 통과
  • 별도 Bundle insights 빌드는 진행 중이며 전체 워크플로 최종 상태와는 구분

검증 범위

새 CI 시뮬레이터는 로그인 화면을 포함한 시작 화면 smoke 검사입니다. 로그인된 프로필 검사는 로컬의 기존 QA 기기에서 별도로 수행했습니다. 자동 OAuth, 실제 기기 WDA 연결, 전체 E2E, 이전 버전에서의 실기기 업데이트는 아직 통과로 주장하지 않습니다. 원본 화면·기기 식별자·로그는 커밋하거나 GitHub artifact로 올리지 않습니다.

- 시뮬레이터와 실기기의 명시적 대상 및 버전·빌드 검증을 추가한다
- 로컬 Appium 도구 설치와 세션을 보존하는 WDA 실행기를 추가한다
- 대상 격리·실패 처리 테스트와 QA 범위 안내를 작성한다
로그인 세션을 유지하며 프로필 카드와 스켈레톤 해소를 검사한다
Maestro 종료 후 이번 실행의 자식 프로세스를 정리한다
CI가 만든 시뮬레이터만 삭제하고 기기별 증거를 체크아웃 밖에 보존한다
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-17T03:22:11.830545Z cbc626c PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cbc626c48f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread .maestro/run-device-qa.py
"firstMatch": [{}]}}, timeout=240)
session = value["sessionId"]
result["wda_connected"] = True
prefix = f"/session/{session}"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Start a stopped app instead of only activating it

When Attendance is installed but not currently running—for example, after the user swipes it away—this request fails before any observation occurs. The pinned XCUITest driver's activateApp documentation states that activation errors if the app is not running, and this session also sets autoLaunch and forceAppLaunch to false. Detect the app state and launch it when stopped while retaining the no-reset and no-termination guarantees.

Useful? React with 👍 / 👎.

exit 1
fi
mkdir -p "$DEST"
npm install --prefix "$DEST" --save-exact --no-audit --no-fund appium@3.8.0

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Install WDA tools atomically so failed installs can be retried

If npm install, driver installation, or either verification command fails, set -e exits after $DEST has already been created. Every subsequent invocation then stops at the existing-path guard, so a transient registry or installation failure leaves the documented installer unusable until the user discovers and manually removes the partial directory. Stage the installation in a temporary directory and move it into place only after all checks pass, or clean $DEST on failure.

Useful? React with 👍 / 👎.

@tuist

tuist Bot commented Oct 17, 2026 •

Copy link
Copy Markdown

🛠️ Tuist Run Report 🛠️

Tests 🧪

Scheme Status Xcode cache hit rate Ran test modules Commit
DDDAttendance ✅ 57 % 30/30 32bf218a9

Builds 🔨

Scheme Status Duration Commit
DDDAttendance-Stage ✅ 1m 0.8s 32bf218a9

@github-actions

Copy link
Copy Markdown

✅ 테스트 통과

862 passed · 39m 20s · 총 862개

iPhone (iOS Simulator 27.1) · Tuist 테스트 실행 · Tuist 빌드 실행 · cbc626c · 워크플로 로그

📦 Bundle 크기

Bundle Install size Download size
DDD 출석 93.1 MB 27.0 MB

📊 커버리지 51.4% (15,373 / 29,905 라인)

🟡 ██████████░░░░░░░░░░

모듈별 커버리지
모듈 커버리지 라인
🔴 DDDThirdParty ░░░░░░░░░░░░░░░░░░░░ 0.0% 0 / 15
🔴 DomainAssembly ░░░░░░░░░░░░░░░░░░░░ 0.0% 0 / 7
🔴 FeatureSharedUI ░░░░░░░░░░░░░░░░░░░░ 0.0% 0 / 330
🔴 DDDAuthInterface ██░░░░░░░░░░░░░░░░░░ 9.1% 2 / 22
🔴 Member ████░░░░░░░░░░░░░░░░ 17.5% 635 / 3,620
🔴 DDDDesignKit ██████░░░░░░░░░░░░░░ 29.4% 1,013 / 3,443
🟡 Management ██████░░░░░░░░░░░░░░ 30.0% 1,616 / 5,385
🟡 OnBoarding ███████░░░░░░░░░░░░░ 36.4% 1,134 / 3,118
🟡 AuthDomain █████████░░░░░░░░░░░ 45.1% 314 / 697
🟡 MyPageDomainInterface ██████████░░░░░░░░░░ 50.0% 23 / 46
🟡 OnBoardingDomain ███████████░░░░░░░░░ 54.8% 212 / 387
🟡 AttendanceDomain ████████████░░░░░░░░ 58.0% 142 / 245
🟢 DDDSharedUI ████████████░░░░░░░░ 60.8% 904 / 1,488
🟢 DDDAttendance █████████████░░░░░░░ 64.2% 946 / 1,473
🟢 DDDNetwork █████████████░░░░░░░ 66.3% 301 / 454
🟢 DDDNetworkInterface ██████████████░░░░░░ 71.6% 116 / 162
🟢 QRCodeDomain ██████████████░░░░░░ 71.9% 87 / 121
🟢 QRCodeDomainInterface ███████████████░░░░░ 73.1% 49 / 67
🟢 CoreAssembly ███████████████░░░░░ 75.0% 9 / 12
🟢 ScheduleDomainInterface ███████████████░░░░░ 76.5% 62 / 81
🟢 DDDCoreUtility ███████████████░░░░░ 77.1% 121 / 157
🟢 ProfileDomain ████████████████░░░░ 78.9% 291 / 369
🟢 VoteDomainInterface ████████████████░░░░ 79.4% 231 / 291
🟢 MyPageDomain ████████████████░░░░ 79.4% 54 / 68
🟢 ServiceAssembly ████████████████░░░░ 81.8% 27 / 33
🟢 ProfileDomainInterface █████████████████░░░ 82.9% 377 / 455
🟢 AppUpdateDomain █████████████████░░░ 82.9% 136 / 164
🟢 VoteDomain █████████████████░░░ 83.2% 415 / 499
🟢 DDDAuth █████████████████░░░ 84.2% 165 / 196
🟢 DDDStorage █████████████████░░░ 85.1% 422 / 496
🟢 DDDStorageInterface █████████████████░░░ 85.5% 118 / 138
🟢 AuthDomainInterface █████████████████░░░ 86.1% 877 / 1,019
🟢 DDDAnimation ██████████████████░░ 87.5% 21 / 24
🟢 AttendanceDomainInterface ██████████████████░░ 88.3% 424 / 480
🟢 Auth ██████████████████░░ 88.9% 448 / 504
🟢 ScheduleDomain ██████████████████░░ 89.7% 183 / 204
🟢 DDDCoreUI ██████████████████░░ 90.0% 117 / 130
🟢 AppUpdateDomainInterface ███████████████████░ 93.5% 58 / 62
🟢 OnBoardingDomainInterface ███████████████████░ 94.4% 761 / 806
🟢 Profile ███████████████████░ 96.7% 1,710 / 1,769
🟢 Web ███████████████████░ 96.7% 234 / 242
🟢 APIEndpoint ███████████████████░ 98.3% 407 / 414
🟢 DDDCoreLogger ███████████████████░ 98.3% 59 / 60
🟢 API ████████████████████ 100.0% 146 / 146
🟢 DDDAccessibility ████████████████████ 100.0% 3 / 3
🟢 DDDConfig ████████████████████ 100.0% 3 / 3

@Roy-wonji
Roy-wonji merged commit 56b830d into develop Oct 17, 2026
9 checks passed
@Roy-wonji
Roy-wonji deleted the feat/qa-device-hub-112 branch October 17, 2026 05:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant