Logocob

cob init

Firebase/GCP/GitHub Secrets 전체 부트스트래핑 오케스트레이션

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-firebaseFirebase 프로젝트/앱 생성 단계 건너뛰기
--skip-gcpGCP 서비스 계정 단계 건너뛰기
--skip-configureflutterfire configure + App ID 추출 단계 건너뛰기
--skip-shaSHA-1 등록 단계 건너뛰기
--skip-iosiOS Fastlane create_app 단계 건너뛰기 (iOS 디렉토리 없으면 자동 스킵)
--skip-secretssecrets encode + push 단계 건너뛰기

전제조건#

프로젝트 디렉토리에서 아래 CLI 로그인이 선행되어야 합니다.

CLI로그인 명령사용 스테이지
firebasefirebase login1, 3, 4
gcloudgcloud auth login2
flutterfire(firebase 로그인 공유)3
fastlaneApp Store Connect API key5
ghgh auth login7

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