cob init#
생성된 프로젝트의 초기 부트스트래핑을 한 번에 수행하는 오케스트레이션 명령입니다.
Firebase 프로젝트/앱 생성 → GCP 서비스 계정 → flutterfire configure → SHA-1 등록 →
iOS App Store Connect 앱 생성 → GitHub Actions Secrets 업로드까지 7개 스테이지를
순서대로 실행합니다. 기존 make init_project 타겟을 대체합니다.
cob init
7-Stage 실행 흐름#
firebase create → gcp service-account → firebase init (configure)
→ firebase sha → ios create → secrets encode → secrets push
각 스테이지는 내부적으로 standalone 서브커맨드를 --env all(dev/stg/prod)로 호출합니다.
| 순서 | 스테이지 | 내부 실행 명령 | 스킵 옵션 |
|---|---|---|---|
| 1 | Firebase 프로젝트/앱 생성 | cob firebase create --env all |
--skip-firebase |
| 2 | GCP 서비스 계정 생성 | cob gcp service-account --env all |
--skip-gcp |
| 3 | flutterfire configure + App ID 추출 | cob firebase init --env all |
--skip-configure |
| 4 | SHA-1 등록 | cob firebase sha --env all |
--skip-sha |
| 5 | iOS Fastlane create_app | cob ios create --env all |
--skip-ios |
| 6 | secrets encode | cob secrets encode |
--skip-secrets |
| 7 | secrets push | cob secrets push |
--skip-secrets |
실행 정책:
-
(v0.1 변경 — breaking) 스테이지가 실패하면 상태를 기록한 뒤 비제로
exit로 중단합니다. 기존 "경고 후 계속 + exit 0" 동작이 필요하면
--keep-going을 사용하세요. exit 0에 의존하던 CI 스크립트 (COB_CI_MODE포함)는 이 변경에 맞춰 갱신이 필요합니다. -
각 (스테이지, env) 결과는 프로젝트 루트
.cob/init-state.json에 기록됩니다 (상태 키단계:env, 예:firebase_create:dev). -
cob init --resume은 성공/스킵 기록을 건너뛰고 첫 실패·중단 지점부터 재개합니다..envrc의 PROJECT_NAME/ORG_NAME이 바뀌면 상태가 자동 무효화됩니다 (식별자 혼입 차단). -
위험 단계 가드: GCP 서비스 계정 키는 기존 키 파일이 있으면 발급을
스킵하고(
--rotate-key로 강제), SHA-1은 기존 등록 지문과 대조해 중복 등록하지 않습니다. --skip-secrets는 6·7단계(encode + push)를 함께 건너뜁니다.-
5단계(iOS)는 iOS 디렉토리(
app/<project_name>/ios)가 없으면 옵션 없이도 자동 스킵됩니다 (웹 전용 프로젝트 등).fastlane create_app을 dev/stg/prod 플레이버로 실행해 App Store Connect 앱을 생성하는 단계입니다.
옵션#
| 옵션 | 설명 |
|---|---|
--skip-firebase | Firebase 프로젝트/앱 생성 단계 건너뛰기 |
--skip-gcp | GCP 서비스 계정 단계 건너뛰기 |
--skip-configure | flutterfire configure + App ID 추출 단계 건너뛰기 |
--skip-sha | SHA-1 등록 단계 건너뛰기 |
--skip-ios | iOS Fastlane create_app 단계 건너뛰기 (iOS 디렉토리 없으면 자동 스킵) |
--skip-secrets | secrets encode + push 단계 건너뛰기 |
전제조건#
프로젝트 디렉토리에서 아래 CLI 로그인이 선행되어야 합니다.
| CLI | 로그인 명령 | 사용 스테이지 |
|---|---|---|
firebase | firebase login | 1, 3, 4 |
gcloud | gcloud auth login | 2 |
flutterfire | (firebase 로그인 공유) | 3 |
fastlane | App Store Connect API key | 5 |
gh | gh auth login | 7 |
CI 모드#
COB_CI_MODE=1 cob init
COB_CI_MODE=1 (또는 true/yes) 활성화 시:
| 동작 | 설명 |
|---|---|
| API cooldown 제거 | 모든 서비스의 cooldown이 Duration.zero로 강제 |
| prompt 자동 스킵 | 인터랙티브 stdin prompt 생략 (기본값 사용) |
| 개별 플래그 우선 | COB_FIREBASE_COOLDOWN_MS=1000 명시 시 CI 모드여도 해당 값 사용 |
사용 예시#
# 전체 7단계 실행
cob init
# SHA-1 등록과 GCP 단계 건너뛰기
cob init --skip-sha --skip-gcp
# iOS 단계 건너뛰기 (수동 스킵)
cob init --skip-ios
# CI 파이프라인에서 결정적 실행
COB_CI_MODE=1 cob init
스테이지별 Standalone 명령#
각 스테이지는 독립 명령으로도 실행할 수 있습니다.
| 스테이지 | 문서 |
|---|---|
| 1, 3, 4 (Firebase) | cob firebase |
| 2 (GCP) | cob gcp |
| 6, 7 (Secrets) | cob secrets |