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.
- package/README.md +24 -21
- package/package.json +2 -2
- 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 +84 -31
- package/payload/scripts/version_manager.py +2 -2
- package/payload/version.yml.template +4 -2
- package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +30 -10
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +37 -12
- 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 +27 -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 +8 -15
- package/src/cli/help.js +2 -3
- package/src/commands/doctor.js +9 -8
- 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 +34 -46
- package/src/commands/purge.js +2 -2
- package/src/commands/status.js +5 -6
- package/src/commands/uninstall.js +3 -4
- package/src/context.js +5 -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 +4 -4
- package/src/core/version-yml.js +27 -34
- package/src/core/wizard-env.js +4 -4
- package/src/index.js +14 -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 +13 -13
- 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 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
|
-
#
|
|
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
|
-
#
|
|
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
|
-
#
|
|
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
|