project-auto-wizard 0.12.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 +3 -7
- 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 +1 -1
- 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 -3
- package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +1 -4
- 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 -5
- 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,14 +1,10 @@
|
|
|
1
1
|
# project-auto-wizard:managed-workflow
|
|
2
|
-
# ===================================================================
|
|
3
2
|
# Flutter Android 자체 서버(SMB) 배포 워크플로우
|
|
4
|
-
# ===================================================================
|
|
5
3
|
#
|
|
6
4
|
# {{MAIN_BRANCH}} 브랜치 푸시 시 Android APK를 빌드하고
|
|
7
5
|
# 자체 서버(예: Synology NAS·NAS·Linux)의 SMB 공유에 APK를 배포합니다.
|
|
8
6
|
#
|
|
9
|
-
#
|
|
10
|
-
# 🔑 필수 GitHub Secrets
|
|
11
|
-
# ===================================================================
|
|
7
|
+
# 필수 GitHub Secrets
|
|
12
8
|
# ENV_FILE 또는 ENV: .env 파일 내용 (둘 중 하나, ENV_FILE 우선)
|
|
13
9
|
# RELEASE_KEYSTORE_BASE64: 서명용 keystore (base64)
|
|
14
10
|
# RELEASE_KEYSTORE_PASSWORD: keystore 비밀번호
|
|
@@ -18,7 +14,6 @@
|
|
|
18
14
|
# SERVER_HOST: 서버 호스트(SMB 접속 주소)
|
|
19
15
|
# SERVER_USER: SMB 사용자명
|
|
20
16
|
# SERVER_PASSWORD: SMB 비밀번호
|
|
21
|
-
# ===================================================================
|
|
22
17
|
|
|
23
18
|
name: PROJECT-Android-SelfHosted-CICD
|
|
24
19
|
|
|
@@ -28,9 +23,7 @@ on:
|
|
|
28
23
|
# @wizard paths-anchor (모노레포일 때 integrator가 paths 필터를 여기 주입)
|
|
29
24
|
workflow_dispatch: # 수동 실행 옵션 추가
|
|
30
25
|
|
|
31
|
-
#
|
|
32
|
-
# 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
|
|
33
|
-
# ============================================
|
|
26
|
+
# 프로젝트별 설정 (아래 값들을 수정하세요)
|
|
34
27
|
env:
|
|
35
28
|
# 프로젝트 이름 (APK 파일명, 아티팩트명, 히스토리 파일명에 사용)
|
|
36
29
|
APP_ARTIFACT_NAME: "__APP_ARTIFACT_NAME__" # @wizard ask:@repo
|
|
@@ -55,7 +48,6 @@ jobs:
|
|
|
55
48
|
working-directory: ${{ env.FLUTTER_PROJECT_DIR }}
|
|
56
49
|
|
|
57
50
|
steps:
|
|
58
|
-
# Repository 체크아웃 및 목록 출력
|
|
59
51
|
- name: Check out repository
|
|
60
52
|
uses: actions/checkout@v7
|
|
61
53
|
with:
|
|
@@ -90,7 +82,6 @@ jobs:
|
|
|
90
82
|
echo "dart-define file prepared"
|
|
91
83
|
fi
|
|
92
84
|
|
|
93
|
-
# Keystore와 key.properties 설정
|
|
94
85
|
- name: Setup Keystore and key.properties
|
|
95
86
|
run: |
|
|
96
87
|
mkdir -p android/app/keystore
|
|
@@ -104,7 +95,6 @@ jobs:
|
|
|
104
95
|
echo "key.properties created"
|
|
105
96
|
ls -la android/
|
|
106
97
|
|
|
107
|
-
# Google-services.json 생성
|
|
108
98
|
- name: Create Google-services.json
|
|
109
99
|
run: |
|
|
110
100
|
cat << 'EOF' > android/app/google-services.json
|
|
@@ -113,7 +103,6 @@ jobs:
|
|
|
113
103
|
echo "✅ Google-services.json 생성 완료"
|
|
114
104
|
ls -la android/app/
|
|
115
105
|
|
|
116
|
-
# Flutter 설정 및 버전 확인
|
|
117
106
|
- name: Set up Flutter
|
|
118
107
|
uses: subosito/flutter-action@v2
|
|
119
108
|
with:
|
|
@@ -126,7 +115,6 @@ jobs:
|
|
|
126
115
|
echo "Flutter setup completed"
|
|
127
116
|
flutter --version
|
|
128
117
|
|
|
129
|
-
# Flutter 및 Gradle 캐시
|
|
130
118
|
- name: Cache Flutter dependencies
|
|
131
119
|
uses: actions/cache@v6
|
|
132
120
|
with:
|
|
@@ -144,7 +132,6 @@ jobs:
|
|
|
144
132
|
restore-keys: |
|
|
145
133
|
${{ runner.os }}-gradle-
|
|
146
134
|
|
|
147
|
-
# 프로젝트 의존성 설치
|
|
148
135
|
- name: Install dependencies
|
|
149
136
|
run: |
|
|
150
137
|
flutter pub get
|
|
@@ -154,14 +141,12 @@ jobs:
|
|
|
154
141
|
echo "Dependencies installed"
|
|
155
142
|
ls -la
|
|
156
143
|
|
|
157
|
-
# Gradle 셋업
|
|
158
144
|
- name: Setup Gradle
|
|
159
145
|
working-directory: ${{ env.FLUTTER_PROJECT_DIR }}/android
|
|
160
146
|
run: |
|
|
161
147
|
chmod +x gradlew
|
|
162
148
|
echo "Gradle wrapper permissions set"
|
|
163
149
|
|
|
164
|
-
# Java 설정 및 버전 확인
|
|
165
150
|
- name: Set up Java
|
|
166
151
|
uses: actions/setup-java@v5
|
|
167
152
|
with:
|
|
@@ -173,7 +158,6 @@ jobs:
|
|
|
173
158
|
echo "Java setup completed"
|
|
174
159
|
java -version
|
|
175
160
|
|
|
176
|
-
# 현재 버전 정보 및 짧은 커밋 해시 계산
|
|
177
161
|
- name: Get version info and calculate short commit hash
|
|
178
162
|
id: version_info
|
|
179
163
|
run: |
|
|
@@ -197,7 +181,6 @@ jobs:
|
|
|
197
181
|
ls -la build/app/outputs/flutter-apk/ || true
|
|
198
182
|
echo "APK built"
|
|
199
183
|
|
|
200
|
-
# APK 파일 이름 변경 및 준비
|
|
201
184
|
- name: Rename and Prepare APK
|
|
202
185
|
run: |
|
|
203
186
|
mkdir -p ./android/app/build/outputs/apk/release/
|
|
@@ -205,7 +188,6 @@ jobs:
|
|
|
205
188
|
echo "APK renamed to ${{ env.APP_ARTIFACT_NAME }}-v${{ env.VERSION }}-${{ env.SHORT_COMMIT_HASH }}.apk"
|
|
206
189
|
ls -la ./android/app/build/outputs/apk/release/
|
|
207
190
|
|
|
208
|
-
# APK를 아티팩트로 업로드
|
|
209
191
|
- name: Upload APK as Artifact
|
|
210
192
|
uses: actions/upload-artifact@v7
|
|
211
193
|
with:
|
|
@@ -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
|