project-auto-wizard 0.11.0 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +24 -21
  2. package/package.json +2 -2
  3. package/payload/config/breaking-changes.json +1 -1
  4. package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
  5. package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
  6. package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
  7. package/payload/scripts/changelog_manager.py +84 -31
  8. package/payload/scripts/version_manager.py +2 -2
  9. package/payload/version.yml.template +4 -2
  10. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +30 -10
  11. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +37 -12
  12. package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +3 -6
  13. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +0 -12
  14. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +27 -6
  15. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +3 -7
  16. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +7 -34
  17. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +2 -25
  18. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +2 -20
  19. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +5 -30
  20. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +0 -4
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +7 -51
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +5 -29
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +9 -29
  24. package/payload/workflows/go/PROJECT-GO-CI.yaml +5 -28
  25. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +19 -99
  26. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +18 -89
  27. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +11 -41
  28. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +9 -45
  29. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +1 -27
  30. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +14 -97
  31. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +14 -92
  32. package/payload/workflows/react/PROJECT-REACT-CI.yaml +11 -40
  33. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +9 -43
  34. package/payload/workflows/spring/{nexus/PROJECT-SPRING-NEXUS-CI.yml → PROJECT-SPRING-CI.yml} +2 -25
  35. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +19 -63
  36. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +19 -59
  37. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +23 -86
  38. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +20 -80
  39. package/src/cli/args.js +8 -15
  40. package/src/cli/help.js +2 -3
  41. package/src/commands/doctor.js +9 -8
  42. package/src/commands/dry-run.js +1 -1
  43. package/src/commands/full.js +9 -10
  44. package/src/commands/interactive-flutter.js +1 -1
  45. package/src/commands/interactive.js +34 -46
  46. package/src/commands/purge.js +2 -2
  47. package/src/commands/status.js +5 -6
  48. package/src/commands/uninstall.js +3 -4
  49. package/src/context.js +5 -6
  50. package/src/core/assets.js +2 -2
  51. package/src/core/baseline.js +1 -1
  52. package/src/core/branches.js +3 -3
  53. package/src/core/breaking-check.js +1 -1
  54. package/src/core/breaking.js +1 -1
  55. package/src/core/copy/flutter-app.js +2 -2
  56. package/src/core/copy/gitignore.js +8 -8
  57. package/src/core/copy/workflows.js +24 -69
  58. package/src/core/deploy-style.js +2 -2
  59. package/src/core/detect-fs.js +11 -11
  60. package/src/core/detect.js +7 -7
  61. package/src/core/flutter-options.js +1 -1
  62. package/src/core/installed-stores.js +1 -1
  63. package/src/core/logger.js +1 -1
  64. package/src/core/paths-resolve.js +1 -1
  65. package/src/core/removal-plan.js +4 -4
  66. package/src/core/verify.js +4 -4
  67. package/src/core/version-yml.js +27 -34
  68. package/src/core/wizard-env.js +4 -4
  69. package/src/index.js +14 -14
  70. package/src/ui/banner.js +2 -2
  71. package/src/ui/env-plan.js +10 -16
  72. package/src/ui/prompts.js +9 -14
  73. package/src/ui/status-cards.js +10 -12
  74. package/src/ui/summary.js +13 -13
  75. package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +0 -210
  76. package/payload/workflows/spring/nexus/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +0 -92
  77. package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +0 -70
  78. package/src/core/options-ask.js +0 -102
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter Android 테스트용 APK 빌드 워크플로우
4
- # ===================================================================
5
3
  #
6
4
  # 이 워크플로우는 기능 브랜치에서 수동으로 실행하여
7
5
  # 테스트용 Android APK를 빌드합니다.
@@ -22,27 +20,23 @@
22
20
  # 3. "Run workflow" 버튼 클릭
23
21
  # 4. 빌드 완료 후 아티팩트에서 APK 다운로드
24
22
  #
25
- # ===================================================================
26
- # 🔑 필수 GitHub Secrets
27
- # ===================================================================
23
+ # 필수 GitHub Secrets
28
24
  #
29
- # 🔐 Release Keystore (Play Store 배포와 동일):
25
+ # Release Keystore (Play Store 배포와 동일):
30
26
  # RELEASE_KEYSTORE_BASE64: 릴리즈 키스토어 파일 (base64)
31
27
  # RELEASE_KEYSTORE_PASSWORD: 키스토어 비밀번호
32
28
  # RELEASE_KEY_ALIAS: 키 별칭
33
29
  # RELEASE_KEY_PASSWORD: 키 비밀번호
34
30
  #
35
- # 📝 환경 설정 (선택):
31
+ # 환경 설정 (선택):
36
32
  # ENV_FILE (선택): .env 파일 내용
37
33
  # GOOGLE_SERVICES_JSON (선택): google-services.json 내용 (Firebase 사용 시)
38
34
  #
39
- # 🔥 Firebase App Distribution (선택):
35
+ # Firebase App Distribution (선택):
40
36
  # FIREBASE_SERVICE_ACCOUNT_JSON_BASE64: Firebase 서비스 계정 JSON (base64)
41
37
  #
42
38
  # ※ 위 Secrets는 저장소 Settings → Secrets and variables → Actions에 등록하세요.
43
39
  # Firebase 업로드를 쓰려면 아래 env의 FIREBASE_APP_ID·FIREBASE_TESTER_GROUP도 수정합니다.
44
- #
45
- # ===================================================================
46
40
 
47
41
  name: PROJECT-Flutter-Android-Test-APK
48
42
 
@@ -55,9 +49,7 @@ on:
55
49
  repository_dispatch:
56
50
  types: [build-android-app]
57
51
 
58
- # ===================================================================
59
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
60
- # ===================================================================
52
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
61
53
  env:
62
54
  FLUTTER_VERSION: "3.35.5"
63
55
  JAVA_VERSION: "__JAVA_VERSION__" # @wizard ask:17
@@ -157,9 +149,6 @@ jobs:
157
149
  echo "⚠️ Firebase 서비스 계정 없음 - App Distribution 업로드 건너뜀"
158
150
  fi
159
151
 
160
- # ===================================================================
161
- # 진행 상황 댓글 시스템
162
- # ===================================================================
163
152
  - name: 진행 상황 댓글 생성
164
153
  id: progress_comment
165
154
  if: github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != ''
@@ -215,7 +204,6 @@ jobs:
215
204
  echo "🌿 브랜치: $BRANCH_NAME"
216
205
  git pull origin "$BRANCH_NAME" || echo "⚠️ Pull 실패 (이미 최신 상태일 수 있음)"
217
206
 
218
- # 브랜치명에서 이슈 번호 추출 및 GitHub API로 이슈 정보 가져오기
219
207
  - name: 브랜치명에서 이슈 정보 추출
220
208
  id: issue_info
221
209
  run: |
@@ -261,7 +249,6 @@ jobs:
261
249
  fi
262
250
  fi
263
251
 
264
- # 빌드 정보 생성
265
252
  - name: 빌드 정보 생성
266
253
  id: build_info
267
254
  run: |
@@ -370,7 +357,6 @@ jobs:
370
357
  echo "ℹ️ GOOGLE_SERVICES_JSON secret not provided, skipping"
371
358
  fi
372
359
 
373
- # Flutter 설정
374
360
  - name: Set up Flutter
375
361
  uses: subosito/flutter-action@v2
376
362
  with:
@@ -382,7 +368,6 @@ jobs:
382
368
  echo "✅ Flutter setup completed"
383
369
  flutter --version
384
370
 
385
- # Flutter 및 Gradle 캐시
386
371
  - name: Cache Flutter dependencies
387
372
  uses: actions/cache@v6
388
373
  with:
@@ -400,7 +385,6 @@ jobs:
400
385
  restore-keys: |
401
386
  ${{ runner.os }}-gradle-
402
387
 
403
- # 프로젝트 의존성 설치
404
388
  - name: Install dependencies
405
389
  run: |
406
390
  flutter pub get
@@ -409,14 +393,12 @@ jobs:
409
393
  fi
410
394
  echo "✅ Dependencies installed"
411
395
 
412
- # Gradle 셋업
413
396
  - name: Setup Gradle
414
397
  working-directory: ${{ env.FLUTTER_PROJECT_DIR }}/android
415
398
  run: |
416
399
  chmod +x gradlew
417
400
  echo "✅ Gradle wrapper permissions set"
418
401
 
419
- # Java 설정
420
402
  - name: Set up Java
421
403
  uses: actions/setup-java@v5
422
404
  with:
@@ -428,7 +410,6 @@ jobs:
428
410
  echo "✅ Java setup completed"
429
411
  java -version
430
412
 
431
- # 진행상황 - 준비 완료
432
413
  - name: 진행상황 - 준비 완료
433
414
  id: progress_step1
434
415
  if: github.event_name == 'repository_dispatch' && needs.prepare-test-build.outputs.progress_comment_id != ''
@@ -541,7 +522,6 @@ jobs:
541
522
  ls -la ./build/app/outputs/flutter-apk/ || true
542
523
  echo "✅ APK built"
543
524
 
544
- # APK 파일 이름 변경 및 준비
545
525
  - name: Rename and Prepare APK
546
526
  run: |
547
527
  mkdir -p ./android/app/build/outputs/apk/release/
@@ -562,7 +542,6 @@ jobs:
562
542
  echo "✅ APK 파일 크기가 아티팩트 제한 내입니다 (${APK_SIZE_MB}MB / 500MB)"
563
543
  fi
564
544
 
565
- # 진행상황 - APK 빌드 완료
566
545
  - name: 진행상황 - APK 빌드 완료
567
546
  id: progress_step2
568
547
  if: github.event_name == 'repository_dispatch' && needs.prepare-test-build.outputs.progress_comment_id != ''
@@ -613,7 +592,6 @@ jobs:
613
592
  core.setOutput('elapsed', elapsedStr);
614
593
  core.setOutput('end_time', now.toString());
615
594
 
616
- # 빌드 정보 파일 생성
617
595
  - name: Create build info file
618
596
  run: |
619
597
  BUILD_NUMBER="${{ needs.prepare-test-build.outputs.build_number }}"
@@ -756,7 +734,6 @@ jobs:
756
734
  const elapsedStr = minutes > 0 ? `${minutes}분 ${seconds}초` : `${seconds}초`;
757
735
  core.setOutput('elapsed', elapsedStr);
758
736
 
759
- # 진행 상황 최종 업데이트 - 성공
760
737
  - name: 진행 상황 최종 업데이트 - 성공
761
738
  if: success() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.prepare-test-build.outputs.progress_comment_id != ''
762
739
  uses: actions/github-script@v9
@@ -869,7 +846,6 @@ jobs:
869
846
  console.log(`✅ 이슈 #${issueNumber}에도 빌드 성공 댓글 작성 완료`);
870
847
  }
871
848
 
872
- # 진행 상황 최종 업데이트 - 실패
873
849
  - name: 진행 상황 최종 업데이트 - 실패
874
850
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.prepare-test-build.outputs.progress_comment_id != ''
875
851
  uses: actions/github-script@v9
@@ -959,7 +935,6 @@ jobs:
959
935
  console.log(`❌ 이슈 #${issueNumber}에도 빌드 실패 댓글 작성 완료`);
960
936
  }
961
937
 
962
- # 콘솔 알림
963
938
  - name: Notify Build Success
964
939
  if: success()
965
940
  run: |
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter 테스트 앱 빌드 트리거 워크플로우
4
- # ===================================================================
5
3
  #
6
4
  # 이 워크플로우는 PR 또는 이슈에 댓글로 빌드 명령어를 작성하면
7
5
  # Android와 iOS 테스트 앱 빌드를 자동으로 트리거합니다.
@@ -26,8 +24,6 @@
26
24
  # 트리거되는 워크플로우:
27
25
  # - PROJECT-FLUTTER-ANDROID-TEST-APK.yaml (event_type: build-android-app)
28
26
  # - PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml (event_type: build-ios-app)
29
- #
30
- # ===================================================================
31
27
 
32
28
  name: PROJECT-Flutter-App-Build-Trigger
33
29
 
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ==========================================================================================
3
2
  # Flutter CI (코드 분석 및 빌드 검증) 워크플로우
4
- # ==========================================================================================
5
3
  #
6
4
  # 이 워크플로우는 PR 생성 또는 {{MAIN_BRANCH}} 브랜치 푸시 시
7
5
  # 코드 정적 분석(flutter analyze)과 Android/iOS 앱 빌드를 검증합니다.
@@ -22,9 +20,7 @@
22
20
  # 3. ENABLE_ANDROID, ENABLE_IOS로 빌드 대상 플랫폼 선택
23
21
  # 4. ENV_FILE_PATH로 환경변수 파일 경로 커스터마이징
24
22
  #
25
- # ==========================================================================================
26
- # 🔧 프로젝트별 설정
27
- # ==========================================================================================
23
+ # 프로젝트별 설정
28
24
  #
29
25
  # ANALYZE_ONLY : true면 analyze만 실행, 빌드 스킵 (기본: false)
30
26
  # ENABLE_ANDROID : Android 빌드 활성화 여부 (ANALYZE_ONLY=false일 때)
@@ -37,15 +33,12 @@
37
33
  # FLUTTER_PROJECT_DIR : Flutter 루트 경로 (설치 시 자동 설정, 모노레포는 app 등)
38
34
  # PROJECT_PATH : 변경 감지 기준 경로 (설치 시 자동 설정, "."이면 항상 실행)
39
35
  #
40
- # ==========================================================================================
41
- # 🔑 필수 GitHub Secrets
42
- # ==========================================================================================
36
+ # 필수 GitHub Secrets
43
37
  # ENV_FILE (선택): .env 파일 내용
44
38
  #
45
39
  # ※ CI는 빌드 검증 목적이므로 서명/배포 관련 Secrets 불필요
46
40
  # ※ 모노레포에서 이 CI를 required check로 쓰려면 개별 job이 아니라 `ci-gate` 하나만 등록하세요.
47
41
  # (경로가 바뀌지 않아 건너뛴 job은 Success로 집계되고, ci-gate가 최종 결과를 판정합니다)
48
- # ==========================================================================================
49
42
 
50
43
  name: PROJECT-Flutter-CI
51
44
 
@@ -74,25 +67,23 @@ permissions:
74
67
  contents: read
75
68
  pull-requests: write
76
69
 
77
- # ==========================================================================================
78
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
79
- # ==========================================================================================
70
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
80
71
  env:
81
- # 🎯 모노레포 변경 감지 경로 (설치 시 자동 설정, 단일 레포는 ".")
72
+ # 모노레포 변경 감지 경로 (설치 시 자동 설정, 단일 레포는 ".")
82
73
  PROJECT_PATH: "." # @wizard auto:project-path
83
74
  # Flutter 루트 경로(레포 루트 기준). 단일레포면 ".", 모노레포면 "app" 등 — 설치 시 자동 설정
84
75
  FLUTTER_PROJECT_DIR: "." # @wizard auto:flutter-root
85
76
  # 환경변수 전달 방식 (dart-define | dotenv) — 설치 시 선택값으로 자동 설정
86
77
  ENV_MODE: "dart-define" # @wizard auto:flutter-env-mode
87
78
 
88
- # 🎯 CI 모드 설정
79
+ # CI 모드 설정
89
80
  ANALYZE_ONLY: "false" # true: analyze만 실행 (빌드 스킵), false: analyze + 빌드
90
81
 
91
- # 🎯 빌드 대상 플랫폼 설정 (ANALYZE_ONLY=false일 때만 적용)
82
+ # 빌드 대상 플랫폼 설정 (ANALYZE_ONLY=false일 때만 적용)
92
83
  ENABLE_ANDROID: "true" # Android 빌드 활성화 (true/false)
93
84
  ENABLE_IOS: "true" # iOS 빌드 활성화 (true/false)
94
85
 
95
- # 🔧 프로젝트별 설정
86
+ # 프로젝트별 설정
96
87
  FLUTTER_VERSION: "3.35.5"
97
88
  JAVA_VERSION: "__JAVA_VERSION__" # @wizard ask:17
98
89
  XCODE_VERSION: "26.0"
@@ -103,9 +94,7 @@ concurrency:
103
94
  cancel-in-progress: true
104
95
 
105
96
  jobs:
106
- # ===================================================================
107
97
  # Job 0: 변경 감지 (PROJECT_PATH 아래가 바뀌었을 때만 이후 job 실행)
108
- # ===================================================================
109
98
  changes:
110
99
  name: 변경 감지
111
100
  runs-on: ubuntu-latest
@@ -127,9 +116,7 @@ jobs:
127
116
  project:
128
117
  - '${{ env.PROJECT_PATH == '.' && '**' || format('{0}/**', env.PROJECT_PATH) }}'
129
118
 
130
- # ===================================================================
131
119
  # Job 1: 준비 단계
132
- # ===================================================================
133
120
  prepare:
134
121
  name: CI 준비
135
122
  needs: changes
@@ -147,7 +134,6 @@ jobs:
147
134
 
148
135
  steps:
149
136
  # 설정 값 outputs으로 전달
150
- # workflow_dispatch 입력값이 있으면 우선 사용, 없으면 env 값 사용
151
137
  - name: 설정 값 전달
152
138
  id: config
153
139
  run: |
@@ -171,7 +157,6 @@ jobs:
171
157
  echo " iOS: $ENABLE_IOS"
172
158
  echo " 트리거: ${{ github.event_name }}"
173
159
 
174
- # 빌드 정보 수집
175
160
  - name: 빌드 정보 수집
176
161
  id: info
177
162
  run: |
@@ -189,7 +174,6 @@ jobs:
189
174
  echo " 브랜치: $BRANCH_NAME"
190
175
  echo " 커밋: $COMMIT_HASH"
191
176
 
192
- # PR인 경우 진행 상황 댓글 생성
193
177
  - name: 진행 상황 댓글 생성
194
178
  id: comment
195
179
  if: github.event_name == 'pull_request'
@@ -261,9 +245,7 @@ jobs:
261
245
  core.setOutput('comment_id', comment.id);
262
246
  core.setOutput('start_time', startTime);
263
247
 
264
- # ===================================================================
265
248
  # Job 2: 코드 분석 (병렬)
266
- # ===================================================================
267
249
  analyze:
268
250
  name: 코드 분석
269
251
  runs-on: ubuntu-latest
@@ -303,7 +285,6 @@ jobs:
303
285
  echo "dart-define file prepared"
304
286
  fi
305
287
 
306
- # Flutter 설정
307
288
  - name: Set up Flutter
308
289
  uses: subosito/flutter-action@v2
309
290
  with:
@@ -315,7 +296,6 @@ jobs:
315
296
  echo "✅ Flutter setup completed"
316
297
  flutter --version
317
298
 
318
- # Flutter 캐시
319
299
  - name: Cache Flutter dependencies
320
300
  uses: actions/cache@v6
321
301
  with:
@@ -323,7 +303,6 @@ jobs:
323
303
  key: ${{ runner.os }}-flutter-pub-${{ hashFiles(format('{0}/**/pubspec.lock', env.FLUTTER_PROJECT_DIR)) }}
324
304
  restore-keys: ${{ runner.os }}-flutter-pub-
325
305
 
326
- # 프로젝트 의존성 설치
327
306
  - name: Install dependencies
328
307
  run: |
329
308
  flutter pub get
@@ -332,7 +311,6 @@ jobs:
332
311
  fi
333
312
  echo "✅ Dependencies installed"
334
313
 
335
- # Flutter Analyze 실행
336
314
  - name: Run Flutter Analyze
337
315
  id: analyze
338
316
  run: |
@@ -340,7 +318,6 @@ jobs:
340
318
  flutter analyze --no-fatal-infos
341
319
  echo "✅ 코드 분석 완료"
342
320
 
343
- # 분석 결과 기록
344
321
  - name: 분석 결과 기록
345
322
  id: result
346
323
  if: always()
@@ -360,9 +337,7 @@ jobs:
360
337
  core.setOutput('duration', duration);
361
338
  console.log(`📋 코드 분석 결과: ${status} (${duration})`);
362
339
 
363
- # ===================================================================
364
340
  # Job 3: Android 빌드 (조건부, 병렬)
365
- # ===================================================================
366
341
  build-android:
367
342
  name: Android 빌드
368
343
  if: |
@@ -405,7 +380,6 @@ jobs:
405
380
  echo "dart-define file prepared"
406
381
  fi
407
382
 
408
- # Flutter 설정
409
383
  - name: Set up Flutter
410
384
  uses: subosito/flutter-action@v2
411
385
  with:
@@ -417,7 +391,6 @@ jobs:
417
391
  echo "✅ Flutter setup completed"
418
392
  flutter --version
419
393
 
420
- # Flutter 캐시
421
394
  - name: Cache Flutter dependencies
422
395
  uses: actions/cache@v6
423
396
  with:
@@ -425,7 +398,6 @@ jobs:
425
398
  key: ${{ runner.os }}-flutter-pub-${{ hashFiles(format('{0}/**/pubspec.lock', env.FLUTTER_PROJECT_DIR)) }}
426
399
  restore-keys: ${{ runner.os }}-flutter-pub-
427
400
 
428
- # Gradle 캐시
429
401
  - name: Cache Gradle dependencies
430
402
  uses: actions/cache@v6
431
403
  with:
@@ -436,7 +408,6 @@ jobs:
436
408
  restore-keys: |
437
409
  ${{ runner.os }}-gradle-
438
410
 
439
- # 프로젝트 의존성 설치
440
411
  - name: Install dependencies
441
412
  run: |
442
413
  flutter pub get
@@ -445,7 +416,6 @@ jobs:
445
416
  fi
446
417
  echo "✅ Dependencies installed"
447
418
 
448
- # Java 설정
449
419
  - name: Set up Java
450
420
  uses: actions/setup-java@v5
451
421
  with:
@@ -457,7 +427,6 @@ jobs:
457
427
  echo "✅ Java setup completed"
458
428
  java -version
459
429
 
460
- # Gradle 셋업
461
430
  - name: Setup Gradle
462
431
  working-directory: ${{ env.FLUTTER_PROJECT_DIR }}/android
463
432
  run: |
@@ -473,7 +442,6 @@ jobs:
473
442
  echo "✅ APK 빌드 완료"
474
443
  ls -la ./build/app/outputs/flutter-apk/ || true
475
444
 
476
- # 빌드 결과 기록
477
445
  - name: 빌드 결과 기록
478
446
  id: result
479
447
  if: always()
@@ -493,9 +461,7 @@ jobs:
493
461
  core.setOutput('duration', duration);
494
462
  console.log(`📋 Android 빌드 결과: ${status} (${duration})`);
495
463
 
496
- # ===================================================================
497
464
  # Job 4: iOS 빌드 (조건부, 병렬)
498
- # ===================================================================
499
465
  build-ios:
500
466
  name: iOS 빌드
501
467
  if: |
@@ -558,7 +524,6 @@ jobs:
558
524
  echo "dart-define file prepared"
559
525
  fi
560
526
 
561
- # Flutter 설정
562
527
  - name: Set up Flutter
563
528
  uses: subosito/flutter-action@v2
564
529
  with:
@@ -570,7 +535,6 @@ jobs:
570
535
  echo "✅ Flutter setup completed"
571
536
  flutter --version
572
537
 
573
- # Flutter 캐시
574
538
  - name: Cache Flutter dependencies
575
539
  uses: actions/cache@v6
576
540
  with:
@@ -578,7 +542,6 @@ jobs:
578
542
  key: ${{ runner.os }}-flutter-pub-${{ hashFiles(format('{0}/**/pubspec.lock', env.FLUTTER_PROJECT_DIR)) }}
579
543
  restore-keys: ${{ runner.os }}-flutter-pub-
580
544
 
581
- # 프로젝트 의존성 설치
582
545
  - name: Install dependencies
583
546
  run: |
584
547
  flutter pub get
@@ -587,7 +550,6 @@ jobs:
587
550
  fi
588
551
  echo "✅ Dependencies installed"
589
552
 
590
- # Ruby 및 CocoaPods 설정
591
553
  - name: Set up Ruby
592
554
  uses: ruby/setup-ruby@v1
593
555
  with:
@@ -600,7 +562,6 @@ jobs:
600
562
  cd ios && pod install --repo-update || pod install
601
563
  echo "✅ CocoaPods installed"
602
564
 
603
- # iOS 빌드 (서명 없이)
604
565
  - name: Build iOS
605
566
  id: build
606
567
  run: |
@@ -608,7 +569,6 @@ jobs:
608
569
  flutter build ios --release --no-codesign ${DART_DEFINE_FILE:+--dart-define-from-file="$DART_DEFINE_FILE"}
609
570
  echo "✅ iOS 빌드 완료"
610
571
 
611
- # 빌드 결과 기록
612
572
  - name: 빌드 결과 기록
613
573
  id: result
614
574
  if: always()
@@ -628,9 +588,7 @@ jobs:
628
588
  core.setOutput('duration', duration);
629
589
  console.log(`📋 iOS 빌드 결과: ${status} (${duration})`);
630
590
 
631
- # ===================================================================
632
591
  # Job 5: 결과 보고
633
- # ===================================================================
634
592
  report:
635
593
  name: 결과 보고
636
594
  if: always() && github.event_name == 'pull_request' && needs.changes.outputs.project == 'true'
@@ -786,9 +744,7 @@ jobs:
786
744
  console.log('⚠️ 댓글 ID가 없어 업데이트를 건너뜁니다.');
787
745
  }
788
746
 
789
- # ===================================================================
790
747
  # Job 6: CI Gate (required check로 등록할 단일 진입점)
791
- # ===================================================================
792
748
  # 건너뛴(skipped) job은 통과로 보고 failure/cancelled가 하나라도 있으면 실패한다.
793
749
  ci-gate:
794
750
  name: CI Gate
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter iOS 테스트용 TestFlight 배포 워크플로우
4
- # ===================================================================
5
3
  #
6
4
  # 이 워크플로우는 기능 브랜치에서 수동으로 실행하여
7
5
  # 테스트용 iOS 빌드를 TestFlight에 배포합니다.
@@ -22,26 +20,22 @@
22
20
  # 3. xcodebuild -exportArchive (IPA 생성, ExportOptions.plist 사용)
23
21
  # 4. fastlane upload_testflight (ios/fastlane/Fastfile 사용)
24
22
  #
25
- # ===================================================================
26
- # 🔑 필수 GitHub Secrets
27
- # ===================================================================
23
+ # 필수 GitHub Secrets
28
24
  #
29
- # 🔐 Apple 인증서 & 프로비저닝 프로파일:
25
+ # Apple 인증서 & 프로비저닝 프로파일:
30
26
  # APPLE_CERTIFICATE_BASE64: .p12 인증서 (base64 인코딩)
31
27
  # APPLE_CERTIFICATE_PASSWORD: .p12 인증서 비밀번호
32
28
  # APPLE_PROVISIONING_PROFILE_BASE64: .mobileprovision 파일 (base64 인코딩)
33
29
  # IOS_PROVISIONING_PROFILE_NAME: 프로비저닝 프로파일 이름
34
30
  #
35
- # 🔐 App Store Connect API:
31
+ # App Store Connect API:
36
32
  # APP_STORE_CONNECT_API_KEY_ID: API Key ID (10자리)
37
33
  # APP_STORE_CONNECT_ISSUER_ID: Issuer ID (UUID 형식)
38
34
  # APP_STORE_CONNECT_API_KEY_BASE64: AuthKey_XXXXXX.p8 파일 (base64 인코딩)
39
35
  #
40
- # 📝 환경 설정 (선택):
36
+ # 환경 설정 (선택):
41
37
  # ENV_FILE (선택): .env 파일 내용
42
38
  # SECRETS_XCCONFIG (선택): ios/Flutter/Secrets.xcconfig 내용
43
- #
44
- # ===================================================================
45
39
 
46
40
  name: PROJECT-Flutter-iOS-Test-TestFlight
47
41
 
@@ -54,9 +48,7 @@ on:
54
48
  repository_dispatch:
55
49
  types: [build-ios-app]
56
50
 
57
- # ===================================================================
58
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
59
- # ===================================================================
51
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
60
52
  env:
61
53
  FLUTTER_VERSION: "3.35.5"
62
54
  XCODE_VERSION: "26.0"
@@ -69,9 +61,7 @@ env:
69
61
  ENV_FILE_PATH: ".env"
70
62
 
71
63
  jobs:
72
- # ===================================================================
73
64
  # 즉시 댓글 생성 (ubuntu-latest로 빠르게 실행)
74
- # ===================================================================
75
65
  notify-start:
76
66
  name: 진행 상황 알림
77
67
  runs-on: ubuntu-latest
@@ -183,9 +173,7 @@ jobs:
183
173
  core.setOutput('comment_id', comment.id);
184
174
  core.setOutput('start_time', startTime);
185
175
 
186
- # ===================================================================
187
176
  # 테스트 빌드 준비 (macOS 환경 설정)
188
- # ===================================================================
189
177
  prepare-test-build:
190
178
  name: 테스트 빌드 준비
191
179
  runs-on: macos-26
@@ -233,7 +221,6 @@ jobs:
233
221
  echo "ℹ️ Empty Secrets.xcconfig created (no secrets provided)"
234
222
  fi
235
223
 
236
- # 테스트 빌드 버전 설정 (version.yml에서 동적 읽기)
237
224
  - name: 테스트 빌드 버전 설정
238
225
  id: test_version
239
226
  working-directory: ${{ github.workspace }} # version_manager.py가 레포 루트 version.yml을 읽어야 함
@@ -260,7 +247,6 @@ jobs:
260
247
  echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
261
248
  echo "📋 테스트 빌드: 버전=$VERSION, 빌드번호=$BUILD_NUMBER"
262
249
 
263
- # 브랜치명에서 이슈 번호 추출 및 GitHub API로 이슈 정보 가져오기
264
250
  - name: 브랜치명에서 이슈 정보 추출
265
251
  id: issue_info
266
252
  run: |
@@ -306,7 +292,6 @@ jobs:
306
292
  fi
307
293
  fi
308
294
 
309
- # 릴리즈 노트 생성
310
295
  - name: 릴리즈 노트 생성
311
296
  id: release_notes
312
297
  working-directory: ${{ github.workspace }} # final_release_notes.txt(upload 짝)는 레포 루트 기준
@@ -365,7 +350,6 @@ jobs:
365
350
  ${{ env.FLUTTER_PROJECT_DIR }}/assets/
366
351
  retention-days: 1
367
352
 
368
- # 진행 상황 업데이트 - 준비 실패
369
353
  - name: 진행 상황 업데이트 - 준비 실패
370
354
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
371
355
  uses: actions/github-script@v9
@@ -413,9 +397,7 @@ jobs:
413
397
 
414
398
  console.log(`❌ 진행 상황 업데이트 완료: 준비 실패`);
415
399
 
416
- # ===================================================================
417
400
  # iOS 빌드 (xcodebuild 직접 사용)
418
- # ===================================================================
419
401
  build-ios-test:
420
402
  name: iOS 테스트 빌드
421
403
  runs-on: macos-26
@@ -648,7 +630,6 @@ jobs:
648
630
  ${{ env.FLUTTER_PROJECT_DIR }}/build-metadata.json
649
631
  retention-days: 1
650
632
 
651
- # 진행 상황 업데이트 - IPA 빌드 완료
652
633
  - name: 진행 상황 업데이트 - IPA 빌드 완료
653
634
  id: progress_step2
654
635
  if: success() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
@@ -704,7 +685,6 @@ jobs:
704
685
  core.setOutput('elapsed', elapsedStr);
705
686
  core.setOutput('end_time', now.toString());
706
687
 
707
- # 빌드 실패 시 progress 댓글 업데이트
708
688
  - name: 빌드 실패 시 progress 댓글 업데이트
709
689
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
710
690
  uses: actions/github-script@v9
@@ -762,9 +742,7 @@ jobs:
762
742
 
763
743
  console.log(`❌ 진행 상황 업데이트 완료: IPA 빌드 실패`);
764
744
 
765
- # ===================================================================
766
745
  # TestFlight 배포 (ios/fastlane/Fastfile 사용)
767
- # ===================================================================
768
746
  deploy-testflight-test:
769
747
  name: TestFlight 테스트 배포
770
748
  runs-on: macos-26
@@ -884,7 +862,6 @@ jobs:
884
862
  echo "❌ TestFlight 테스트 빌드 업로드 실패!"
885
863
  echo "로그를 확인해주세요."
886
864
 
887
- # 진행 상황 최종 업데이트 - 성공
888
865
  - name: 진행 상황 최종 업데이트 - 성공
889
866
  if: success() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
890
867
  uses: actions/github-script@v9
@@ -947,7 +924,6 @@ jobs:
947
924
 
948
925
  console.log(`✅ 진행 상황 최종 업데이트 완료: 전체 성공 (${totalElapsed})`);
949
926
 
950
- # 진행 상황 최종 업데이트 - 실패
951
927
  - name: 진행 상황 최종 업데이트 - 실패
952
928
  if: failure() && github.event_name == 'repository_dispatch' && github.event.client_payload.pr_number != '' && needs.notify-start.outputs.comment_id != ''
953
929
  uses: actions/github-script@v9