51 lines
2.4 KiB
Markdown
51 lines
2.4 KiB
Markdown
---
|
|
domain: artifact-flow
|
|
last_rule_review_commit: no-commit
|
|
last_rule_updated_at: 2026-06-08
|
|
---
|
|
|
|
# artifact-flow
|
|
|
|
## 목적 / 책임
|
|
|
|
Jenkins 인증, build 목록 조회, artifact 선택/다운로드, 설치 요청 직전까지의 흐름을 담당한다.
|
|
|
|
## 포함 경로
|
|
|
|
- `lib/src/features/builds/` — build와 artifact 목록 UI
|
|
- `lib/src/features/settings/` — Jenkins base URL, job, 인증 방식 설정 UI
|
|
- `lib/src/models/jenkins_build.dart` — Jenkins build/artifact 모델
|
|
- `lib/src/services/jenkins_client.dart` — Jenkins Remote API 호출
|
|
- `lib/src/services/token_store.dart` — 사용자별 Jenkins credential 저장
|
|
|
|
## 제외 경로
|
|
|
|
- `lib/src/services/adb_service.dart` — 실제 설치 실행은 `device-console` 책임
|
|
- `lib/src/features/devices/`, `lib/src/features/console/` — 연결 기기와 logcat UI는 `device-console` 책임
|
|
- `macos/Runner/` — Keychain, network entitlement, URL scheme은 `macos-platform` 책임
|
|
|
|
## 주요 구성 요소
|
|
|
|
- `BuildsPage` — Jenkins build/artifact 탐색 화면
|
|
- `JenkinsBuild`, `BuildArtifact` — build와 artifact 도메인 모델
|
|
- `JenkinsClient` — build 조회와 artifact 다운로드 HTTP client
|
|
- `TokenStore` — macOS Keychain credential 저장소 wrapper
|
|
|
|
## 유지할 패턴
|
|
|
|
- Jenkins credential은 사용자별로 저장하고, tracked 파일이나 앱 bundle에 secret을 넣지 않는다.
|
|
- Jenkins API 응답 parsing은 모델 factory 또는 전용 parser에 둔다.
|
|
- 다운로드 파일명과 build number, job, flavor, branch를 UI에서 함께 노출해 오설치 가능성을 낮춘다.
|
|
- Jenkins WebView 자동 token 발급을 구현할 때도 LDAP 비밀번호 원문을 앱 상태나 로그에 남기지 않는다.
|
|
|
|
## 다른 도메인과의 경계
|
|
|
|
- **device-console**: artifact-flow는 설치할 파일과 대상 요청만 넘기고, `adb install` 실행과 logcat 처리는 device-console에서 담당한다.
|
|
- **app-shell**: 로그인/동기화 상태 summary만 shell에 전달하고, 상세 상태와 오류는 artifact-flow 화면에서 관리한다.
|
|
- **macos-platform**: 인증 callback deep link, sandbox/network 권한은 macos-platform과 함께 변경한다.
|
|
|
|
## 금지 사항
|
|
|
|
- 공용 Jenkins API token, service account token을 소스/설정/README에 기록하지 않는다.
|
|
- Jenkins 권한 확인을 단순 boolean 로그인 상태만으로 대체하지 않는다.
|
|
- artifact URL을 외부 네트워크에 노출하거나 로그에 token 포함 URL을 출력하지 않는다.
|