project-auto-wizard 0.12.0 → 0.12.2
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.
- package/README.md +4 -8
- package/package.json +1 -1
- package/payload/config/breaking-changes.json +1 -1
- package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
- package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
- package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
- package/payload/scripts/changelog_manager.py +4 -4
- package/payload/scripts/version_manager.py +2 -2
- package/payload/version.yml.template +0 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +0 -4
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +2 -7
- package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +3 -6
- package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +0 -12
- package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +2 -6
- package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +3 -7
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +7 -34
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +2 -25
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +2 -20
- package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +5 -30
- package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +0 -4
- package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +7 -51
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +5 -29
- package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +9 -29
- package/payload/workflows/go/PROJECT-GO-CI.yaml +5 -28
- package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +19 -99
- package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +18 -89
- package/payload/workflows/next/PROJECT-NEXT-CI.yaml +11 -41
- package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +9 -45
- package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +1 -27
- package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +14 -97
- package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +14 -92
- package/payload/workflows/react/PROJECT-REACT-CI.yaml +11 -40
- package/payload/workflows/react/PROJECT-REACT-CICD.yaml +9 -43
- package/payload/workflows/spring/{nexus/PROJECT-SPRING-NEXUS-CI.yml → PROJECT-SPRING-CI.yml} +2 -25
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +19 -63
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +19 -59
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +23 -86
- package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +20 -80
- package/src/cli/args.js +1 -15
- package/src/cli/help.js +0 -2
- package/src/commands/doctor.js +5 -5
- package/src/commands/dry-run.js +1 -1
- package/src/commands/full.js +9 -10
- package/src/commands/interactive-flutter.js +1 -1
- package/src/commands/interactive.js +25 -46
- package/src/commands/purge.js +2 -2
- package/src/commands/status.js +4 -6
- package/src/commands/uninstall.js +3 -4
- package/src/context.js +4 -6
- package/src/core/assets.js +2 -2
- package/src/core/baseline.js +1 -1
- package/src/core/branches.js +3 -3
- package/src/core/breaking-check.js +1 -1
- package/src/core/breaking.js +1 -1
- package/src/core/copy/flutter-app.js +2 -2
- package/src/core/copy/gitignore.js +8 -8
- package/src/core/copy/workflows.js +24 -69
- package/src/core/deploy-style.js +2 -2
- package/src/core/detect-fs.js +11 -11
- package/src/core/detect.js +7 -7
- package/src/core/flutter-options.js +1 -1
- package/src/core/installed-stores.js +1 -1
- package/src/core/logger.js +1 -1
- package/src/core/paths-resolve.js +1 -1
- package/src/core/removal-plan.js +4 -4
- package/src/core/verify.js +3 -3
- package/src/core/version-yml.js +17 -33
- package/src/core/wizard-env.js +4 -4
- package/src/index.js +12 -14
- package/src/ui/banner.js +2 -2
- package/src/ui/env-plan.js +10 -16
- package/src/ui/prompts.js +9 -14
- package/src/ui/status-cards.js +10 -12
- package/src/ui/summary.js +9 -9
- package/payload/workflows/common/secret-backup/PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml +0 -210
- package/payload/workflows/spring/nexus/PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml +0 -92
- package/payload/workflows/spring/nexus/PROJECT-SPRING-NEXUS-PUBLISH.yml +0 -70
- package/src/core/options-ask.js +0 -102
|
@@ -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
|
-
#
|
|
79
|
+
# CI 모드 설정
|
|
89
80
|
ANALYZE_ONLY: "false" # true: analyze만 실행 (빌드 스킵), false: analyze + 빌드
|
|
90
81
|
|
|
91
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
# project-auto-wizard:managed-workflow
|
|
2
|
-
# ===================================================================
|
|
3
2
|
# Flutter iOS TestFlight 자동 배포 워크플로우
|
|
4
|
-
# ===================================================================
|
|
5
3
|
#
|
|
6
4
|
# 이 워크플로우는 Flutter iOS 앱을 빌드하여 TestFlight에 자동 배포합니다.
|
|
7
5
|
#
|
|
@@ -14,30 +12,26 @@
|
|
|
14
12
|
# 3. xcodebuild -exportArchive (IPA 생성, ExportOptions.plist 사용)
|
|
15
13
|
# 4. fastlane deploy (ios/fastlane/Fastfile 사용, DEPLOY_MODE에 따라 TestFlight/심사 제출)
|
|
16
14
|
#
|
|
17
|
-
#
|
|
18
|
-
# 🔑 필수 GitHub Secrets
|
|
19
|
-
# ===================================================================
|
|
15
|
+
# 필수 GitHub Secrets
|
|
20
16
|
#
|
|
21
|
-
#
|
|
17
|
+
# Apple 인증서 & 프로비저닝 프로파일:
|
|
22
18
|
# APPLE_CERTIFICATE_BASE64: .p12 인증서 (base64 인코딩)
|
|
23
19
|
# APPLE_CERTIFICATE_PASSWORD: .p12 인증서 비밀번호
|
|
24
20
|
# APPLE_PROVISIONING_PROFILE_BASE64: .mobileprovision 파일 (base64 인코딩)
|
|
25
21
|
# IOS_PROVISIONING_PROFILE_NAME: 프로비저닝 프로파일 이름
|
|
26
22
|
#
|
|
27
|
-
#
|
|
23
|
+
# App Store Connect API:
|
|
28
24
|
# APP_STORE_CONNECT_API_KEY_ID: API Key ID (10자리)
|
|
29
25
|
# APP_STORE_CONNECT_ISSUER_ID: Issuer ID (UUID 형식)
|
|
30
26
|
# APP_STORE_CONNECT_API_KEY_BASE64: AuthKey_XXXXXX.p8 파일 (base64 인코딩)
|
|
31
27
|
# IOS_BUNDLE_ID (Secret 우선, 없으면 Variable): 앱 번들 ID —
|
|
32
28
|
# store_prepare/store_submit을 쓰면 필수(비어 있으면 Fastfile이 명확한 오류로 중단)
|
|
33
29
|
#
|
|
34
|
-
#
|
|
30
|
+
# 환경 설정 (선택):
|
|
35
31
|
# ENV_FILE (선택): .env 파일 내용
|
|
36
32
|
# SECRETS_XCCONFIG (선택): ios/Flutter/Secrets.xcconfig 내용
|
|
37
33
|
#
|
|
38
|
-
#
|
|
39
|
-
# 🛠️ 초기 설정 방법
|
|
40
|
-
# ===================================================================
|
|
34
|
+
# 초기 설정 방법
|
|
41
35
|
#
|
|
42
36
|
# 1. GitHub Secrets 설정 (위 목록 참고)
|
|
43
37
|
#
|
|
@@ -46,8 +40,6 @@
|
|
|
46
40
|
# git commit -m "chore: iOS TestFlight 배포 설정"
|
|
47
41
|
#
|
|
48
42
|
# 3. {{MAIN_BRANCH}} 브랜치로 푸시하여 배포 시작
|
|
49
|
-
#
|
|
50
|
-
# ===================================================================
|
|
51
43
|
|
|
52
44
|
name: PROJECT-iOS-TestFlight-Deploy
|
|
53
45
|
|
|
@@ -67,9 +59,7 @@ on:
|
|
|
67
59
|
- store_prepare
|
|
68
60
|
- store_submit
|
|
69
61
|
|
|
70
|
-
#
|
|
71
|
-
# 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
|
|
72
|
-
# ============================================
|
|
62
|
+
# 프로젝트별 설정 (아래 값들을 수정하세요)
|
|
73
63
|
env:
|
|
74
64
|
FLUTTER_PROJECT_DIR: "." # @wizard auto:flutter-root
|
|
75
65
|
# 환경변수 전달 방식 (dart-define | dotenv) — 설치 시 선택값으로 자동 설정
|
|
@@ -78,20 +68,14 @@ env:
|
|
|
78
68
|
XCODE_VERSION: "26.0"
|
|
79
69
|
PROJECT_TYPE: "flutter"
|
|
80
70
|
|
|
81
|
-
#
|
|
82
|
-
# 📝 환경 파일 설정
|
|
83
|
-
# ============================================
|
|
71
|
+
# 환경 파일 설정
|
|
84
72
|
# dotenv 모드에서 .env 파일을 만들 경로 (Flutter 루트 기준)
|
|
85
73
|
ENV_FILE_PATH: ".env"
|
|
86
74
|
|
|
87
|
-
#
|
|
88
|
-
# 📝 TestFlight Changelog 설정
|
|
89
|
-
# ============================================
|
|
75
|
+
# TestFlight Changelog 설정
|
|
90
76
|
SKIP_WAITING_FOR_BUILD_PROCESSING: "false"
|
|
91
77
|
|
|
92
|
-
#
|
|
93
|
-
# 📝 배포 모드 (store_only | store_prepare | store_submit)
|
|
94
|
-
# ============================================
|
|
78
|
+
# 배포 모드 (store_only | store_prepare | store_submit)
|
|
95
79
|
DEPLOY_MODE: ${{ github.event.inputs.deploy_mode || vars.IOS_DEPLOY_MODE || 'store_only' }} # @wizard fallback:ios-deploy-mode
|
|
96
80
|
|
|
97
81
|
jobs:
|
|
@@ -230,9 +214,7 @@ jobs:
|
|
|
230
214
|
retention-days: 1
|
|
231
215
|
if-no-files-found: error
|
|
232
216
|
|
|
233
|
-
# ============================================
|
|
234
217
|
# iOS 빌드 (xcodebuild 직접 사용)
|
|
235
|
-
# ============================================
|
|
236
218
|
build-ios:
|
|
237
219
|
name: iOS 앱 빌드
|
|
238
220
|
runs-on: macos-26
|
|
@@ -392,9 +374,7 @@ jobs:
|
|
|
392
374
|
retention-days: 1
|
|
393
375
|
if-no-files-found: error
|
|
394
376
|
|
|
395
|
-
# ============================================
|
|
396
377
|
# TestFlight 배포 (ios/fastlane/Fastfile 사용)
|
|
397
|
-
# ============================================
|
|
398
378
|
deploy-testflight:
|
|
399
379
|
name: TestFlight 배포
|
|
400
380
|
runs-on: macos-26
|
|
@@ -1,20 +1,11 @@
|
|
|
1
1
|
# project-auto-wizard:managed-workflow
|
|
2
|
-
# ===================================================================
|
|
3
2
|
# Go 빌드 검증 워크플로우 (CI Only)
|
|
4
|
-
# ===================================================================
|
|
5
|
-
#
|
|
6
|
-
# 설명:
|
|
7
3
|
# - {{DEVELOP_BRANCH}} 브랜치에 push/PR 시 go build/vet/test/lint로 검증
|
|
8
4
|
# - Dockerfile이 필요 없어 CLI 도구·라이브러리 등 배포하지 않는 Go 프로젝트도 사용 가능
|
|
9
5
|
# - go.mod의 go 지시자 버전을 자동으로 사용 (버전 하드코딩 없음)
|
|
10
|
-
#
|
|
11
|
-
# ===================================================================
|
|
12
6
|
|
|
13
7
|
name: PROJECT-GO-CI
|
|
14
8
|
|
|
15
|
-
# ===================================================================
|
|
16
|
-
# 트리거 설정
|
|
17
|
-
# ===================================================================
|
|
18
9
|
on:
|
|
19
10
|
push:
|
|
20
11
|
branches:
|
|
@@ -24,9 +15,6 @@ on:
|
|
|
24
15
|
- "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치로의 PR 시 빌드 검증
|
|
25
16
|
workflow_dispatch: # 수동 실행 허용
|
|
26
17
|
|
|
27
|
-
# ===================================================================
|
|
28
|
-
# 환경 변수 설정
|
|
29
|
-
# ===================================================================
|
|
30
18
|
env:
|
|
31
19
|
# 프로젝트 고유 식별자
|
|
32
20
|
PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
|
|
@@ -34,9 +22,7 @@ env:
|
|
|
34
22
|
PROJECT_PATH: "." # @wizard auto:project-path
|
|
35
23
|
|
|
36
24
|
jobs:
|
|
37
|
-
# ===================================================================
|
|
38
25
|
# 변경 감지 (모노레포에서 이 프로젝트 경로가 바뀌었는지 판별)
|
|
39
|
-
# ===================================================================
|
|
40
26
|
changes:
|
|
41
27
|
name: 변경 감지
|
|
42
28
|
runs-on: ubuntu-latest
|
|
@@ -58,9 +44,7 @@ jobs:
|
|
|
58
44
|
project:
|
|
59
45
|
- '${{ env.PROJECT_PATH == '.' && '**' || format('{0}/**', env.PROJECT_PATH) }}'
|
|
60
46
|
|
|
61
|
-
#
|
|
62
|
-
# 빌드 검증 작업
|
|
63
|
-
# ===================================================================
|
|
47
|
+
# Job: 빌드 검증
|
|
64
48
|
build-check:
|
|
65
49
|
name: Go 빌드 검증
|
|
66
50
|
runs-on: ubuntu-latest
|
|
@@ -68,37 +52,32 @@ jobs:
|
|
|
68
52
|
if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.project == 'true' }}
|
|
69
53
|
|
|
70
54
|
steps:
|
|
71
|
-
# 1. 소스코드 체크아웃
|
|
72
55
|
- name: 코드 체크아웃
|
|
73
56
|
uses: actions/checkout@v7
|
|
74
57
|
|
|
75
|
-
#
|
|
58
|
+
# go.mod의 go 지시자 버전 자동 사용
|
|
76
59
|
- name: Go 설정
|
|
77
60
|
uses: actions/setup-go@v7
|
|
78
61
|
with:
|
|
79
62
|
go-version-file: go.mod
|
|
80
63
|
cache: true
|
|
81
64
|
|
|
82
|
-
# 3. 빌드 검증
|
|
83
65
|
- name: go build 검증
|
|
84
66
|
run: go build ./...
|
|
85
67
|
|
|
86
|
-
# 4. 정적 분석
|
|
87
68
|
- name: go vet 검증
|
|
88
69
|
run: go vet ./...
|
|
89
70
|
|
|
90
|
-
# 5. 테스트 실행
|
|
91
71
|
- name: go test 실행
|
|
92
72
|
run: go test ./...
|
|
93
73
|
|
|
94
|
-
#
|
|
95
|
-
#
|
|
74
|
+
# golangci-lint v8은 golangci-lint v2 계열을 요구 — .golangci.yml이 v1 형식이면
|
|
75
|
+
# 프로젝트에서 별도 조정 필요. version: latest는 v2 최신 패치를 자동으로 받는다
|
|
96
76
|
- name: golangci-lint
|
|
97
77
|
uses: golangci/golangci-lint-action@v8
|
|
98
78
|
with:
|
|
99
79
|
version: latest
|
|
100
80
|
|
|
101
|
-
# 7. 빌드 검증 완료 메시지
|
|
102
81
|
- name: 빌드 검증 완료
|
|
103
82
|
run: |
|
|
104
83
|
echo "✅ Go 빌드 검증이 성공적으로 완료되었습니다!"
|
|
@@ -109,9 +88,7 @@ jobs:
|
|
|
109
88
|
echo " 📝 커밋: ${{ github.sha }}"
|
|
110
89
|
echo " ⏰ 검증 시간: $(date '+%Y-%m-%d %H:%M:%S')"
|
|
111
90
|
|
|
112
|
-
#
|
|
113
|
-
# CI Gate (required check로 등록할 단일 job)
|
|
114
|
-
# ===================================================================
|
|
91
|
+
# Job: CI Gate (required check로 등록할 단일 job)
|
|
115
92
|
ci-gate:
|
|
116
93
|
name: CI Gate
|
|
117
94
|
if: ${{ always() }}
|