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,13 +1,10 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # PROJECT-COMMON-README-VERSION-UPDATE.yaml
4
3
  # Automatic README version update workflow
5
- # ===================================================================
6
4
  #
7
5
  # On every push to {{MAIN_BRANCH}} this workflow reads the latest version
8
6
  # via version_manager.py and rewrites the version section of README.md.
9
7
  #
10
- # ===================================================================
11
8
  # How it works:
12
9
  # 1. Triggered by a push to {{MAIN_BRANCH}}
13
10
  # 2. Reads the latest version via version_manager.py
@@ -41,7 +38,6 @@
41
38
  # afterwards with a [skip ci] commit that does not re-trigger this
42
39
  # workflow, so the README stays one version behind until the next
43
40
  # release/push. Run this workflow manually (workflow_dispatch) to catch up.
44
- # ===================================================================
45
41
 
46
42
  name: README VERSION UPDATE
47
43
 
@@ -112,9 +108,7 @@ jobs:
112
108
  RELEASE_DATE="${{ steps.version_info.outputs.release_date }}"
113
109
  SHOW_DATE="${{ env.SHOW_DATE }}"
114
110
 
115
- # ---------------------------------------------------------
116
111
  # Error message helper
117
- # ---------------------------------------------------------
118
112
  print_error_message() {
119
113
  local error_type="$1"
120
114
  local version_line="$2"
@@ -184,9 +178,7 @@ jobs:
184
178
  else
185
179
  # Update the existing version line
186
180
 
187
- # ---------------------------------------------------------
188
181
  # Validate the line format
189
- # ---------------------------------------------------------
190
182
  if [[ "$VERSION_LINE" =~ \*\* ]]; then
191
183
  echo ""
192
184
  echo "warning: the version line contains markdown bold (**) characters"
@@ -212,9 +204,7 @@ jobs:
212
204
  LINE_NUMBER=$((LINE_NUMBER + 1))
213
205
  fi
214
206
 
215
- # ---------------------------------------------------------
216
207
  # Extract the header part (up to the colon)
217
- # ---------------------------------------------------------
218
208
  HEADER_PART=$(printf '%s\n' "$VERSION_LINE" | sed 's/\(.*:\).*/\1 /')
219
209
 
220
210
  if [ -z "$HEADER_PART" ] || [[ "$HEADER_PART" == "$VERSION_LINE" ]]; then
@@ -222,9 +212,7 @@ jobs:
222
212
  exit 1
223
213
  fi
224
214
 
225
- # ---------------------------------------------------------
226
215
  # Replace by line number (avoids regex special-char issues)
227
- # ---------------------------------------------------------
228
216
  NEW_LINE="${HEADER_PART}${VERSION_TEXT}"
229
217
 
230
218
  # Escape sed replacement metacharacters (backslash, & and the
@@ -1,8 +1,6 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # PROJECT-COMMON-RELEASE-PUBLISH.yaml
4
3
  # Tag + GitHub Release publisher (dual-mode)
5
- # ===================================================================
6
4
  #
7
5
  # Publishes a git tag (vX.Y.Z) and a GitHub Release for every release
8
6
  # that lands on {{MAIN_BRANCH}}. Two branch modes, read from version.yml
@@ -38,13 +36,12 @@
38
36
  # previous run failed after the version was confirmed but before the
39
37
  # release was created). The idempotency guard keeps it safe to re-run.
40
38
  #
41
- # Issue #90: this file and its self-copy (.github/workflows/) intentionally
39
+ # This file and its self-copy (.github/workflows/) intentionally
42
40
  # differ by one step — the self-copy also triggers NPM-PUBLISH via
43
41
  # workflow_dispatch right after the release is created. NPM-PUBLISH.yaml is
44
42
  # a repo-only workflow (not shipped in payload), so wiring that dispatch
45
43
  # here would make every wizard-installed repo call a workflow that doesn't
46
44
  # exist for them on every release.
47
- # ===================================================================
48
45
 
49
46
  name: PROJECT-RELEASE-PUBLISH
50
47
 
@@ -59,7 +56,7 @@ on:
59
56
 
60
57
  permissions:
61
58
  contents: write
62
- models: read
59
+ copilot-requests: write
63
60
 
64
61
  jobs:
65
62
  release:
@@ -117,7 +114,7 @@ jobs:
117
114
 
118
115
  echo "not a release-confirm push in pr-flow mode — skipping"
119
116
 
120
- # Drift guard (issue #61): skipping is normal, but a version.yml that
117
+ # Drift guard: skipping is normal, but a version.yml that
121
118
  # has run ahead of the newest tag is not — it means the version was
122
119
  # bumped without a release, so npm silently stays behind. Six versions
123
120
  # (0.1.26~0.1.31) went missing this way with every workflow green.
@@ -160,6 +157,28 @@ jobs:
160
157
  echo "semver_auto=$SEMVER_AUTO" >> $GITHUB_OUTPUT
161
158
  echo "semver_auto option: $SEMVER_AUTO"
162
159
 
160
+ - name: Read copilot_ai option from version.yml
161
+ id: copilot_options
162
+ if: >-
163
+ steps.gate.outputs.proceed == 'true' &&
164
+ steps.mode.outputs.mode == 'trunk-based' &&
165
+ github.event_name == 'push'
166
+ run: |
167
+ # scoped to the metadata: -> template: -> options: chain so an
168
+ # unrelated "copilot_ai:" key can never hijack the value
169
+ COPILOT_AI=$(python3 -c 'import re; t=open("version.yml",encoding="utf-8").read(); m=re.search(r"metadata:.*?template:.*?options:.*?copilot_ai:\s*\"?(true|false)", t, re.S); print(m.group(1) if m else "false")' 2>/dev/null || echo "false")
170
+ echo "copilot_ai=$COPILOT_AI" >> $GITHUB_OUTPUT
171
+ echo "copilot_ai option: $COPILOT_AI"
172
+
173
+ - name: Install Copilot CLI
174
+ if: >-
175
+ steps.gate.outputs.proceed == 'true' &&
176
+ steps.mode.outputs.mode == 'trunk-based' &&
177
+ github.event_name == 'push' &&
178
+ steps.copilot_options.outputs.copilot_ai == 'true'
179
+ continue-on-error: true
180
+ run: npm install -g @github/copilot@1.0.88
181
+
163
182
  - name: Trunk-based version bump + changelog
164
183
  if: >-
165
184
  steps.gate.outputs.proceed == 'true' &&
@@ -170,6 +189,8 @@ jobs:
170
189
  AI_API_BASE_URL: ${{ vars.AI_API_BASE_URL }}
171
190
  AI_MODEL: ${{ vars.AI_MODEL }}
172
191
  GITHUB_TOKEN: ${{ github.token }}
192
+ COPILOT_AI: ${{ steps.copilot_options.outputs.copilot_ai }}
193
+ COPILOT_MODEL: ${{ vars.COPILOT_MODEL }}
173
194
  run: |
174
195
  # Idempotency: on a re-run of a failed job the checked-out HEAD may
175
196
  # already be this workflow's own docs commit — never bump twice.
@@ -1,8 +1,6 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # PROJECT-COMMON-VERSION-CONTROL.yaml
4
3
  # Safety-net automatic version bump
5
- # ===================================================================
6
4
  #
7
5
  # [Safety net] Only when a direct push (one that did not go through a
8
6
  # release PR) lands on {{MAIN_BRANCH}} (production), this workflow bumps
@@ -20,11 +18,9 @@
20
18
  # Release-confirm pattern: "chore(release):" — keep in sync with
21
19
  # PROJECT-COMMON-AUTO-CHANGELOG-CONTROL and PROJECT-COMMON-RELEASE-PUBLISH.
22
20
  #
23
- # Issue #90 / #61: after pushing the safety-net bump, this workflow also
24
- # triggers RELEASE-PUBLISH via workflow_dispatch so the drift it used to
25
- # only detect (issue #61) is now auto-recovered instead of requiring a
26
- # manual re-run.
27
- # ===================================================================
21
+ # After pushing the safety-net bump, this workflow also triggers
22
+ # RELEASE-PUBLISH via workflow_dispatch so a version drift is
23
+ # auto-recovered instead of requiring a manual re-run.
28
24
 
29
25
  name: PROJECT-VERSION-CONTROL
30
26
 
@@ -1,7 +1,5 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter Android Firebase App Distribution 배포
4
- # ===================================================================
5
3
  #
6
4
  # {{MAIN_BRANCH}} 브랜치 푸시 시 Android AAB를 빌드하고
7
5
  # Firebase App Distribution에 자동 배포합니다.
@@ -9,44 +7,36 @@
9
7
  # PlayStore CICD와 동일한 빌드 과정(AAB + 버전 검증)을 거친 후
10
8
  # Play Store 대신 Firebase App Distribution에 업로드합니다.
11
9
  #
12
- # ===================================================================
13
- # 🔑 필수 GitHub Secrets
14
- # ===================================================================
10
+ # 필수 GitHub Secrets
15
11
  #
16
- # 🔐 Release Keystore:
12
+ # Release Keystore:
17
13
  # RELEASE_KEYSTORE_BASE64: 서명용 keystore (base64)
18
14
  # RELEASE_KEYSTORE_PASSWORD: keystore 비밀번호
19
15
  # RELEASE_KEY_ALIAS: key alias
20
16
  # RELEASE_KEY_PASSWORD: key 비밀번호
21
17
  #
22
- # 🔥 Firebase:
18
+ # Firebase:
23
19
  # FIREBASE_SERVICE_ACCOUNT_JSON_BASE64: Firebase 서비스 계정 JSON (base64)
24
20
  #
25
- # 📝 환경 설정 (선택):
21
+ # 환경 설정 (선택):
26
22
  # ENV_FILE 또는 ENV: .env 파일 내용 (둘 중 하나, ENV_FILE 우선)
27
23
  # GOOGLE_SERVICES_JSON: Firebase google-services.json
28
24
  #
29
25
  # ※ 위 Secrets는 저장소 Settings → Secrets and variables → Actions에 등록하세요.
30
26
  # FIREBASE_APP_ID·FIREBASE_TESTER_GROUP은 아래 env 섹션 값을 직접 수정합니다.
31
27
  #
32
- # ===================================================================
33
- #
34
- # 🔧 프로젝트별 설정 (env 섹션에서 수정)
35
- # ===================================================================
28
+ # 프로젝트별 설정 (env 섹션에서 수정)
36
29
  # APP_ARTIFACT_NAME : 프로젝트 이름
37
30
  # FLUTTER_VERSION : Flutter SDK 버전
38
31
  # JAVA_VERSION : Java 버전
39
32
  # FIREBASE_APP_ID : Firebase 앱 ID (Firebase Console에서 확인)
40
33
  # FIREBASE_TESTER_GROUP : Firebase 테스터 그룹명
41
- # ===================================================================
42
34
  #
43
- # 🛠️ 사전 설정:
35
+ # 사전 설정:
44
36
  # 1. Firebase Console → App Distribution → 테스터 그룹 생성
45
37
  # 2. Firebase 서비스 계정 JSON 생성 (base64 인코딩)
46
38
  # 3. GitHub Secrets에 FIREBASE_SERVICE_ACCOUNT_JSON_BASE64 등록
47
39
  # 4. env 섹션의 FIREBASE_APP_ID, FIREBASE_TESTER_GROUP 수정
48
- #
49
- # ===================================================================
50
40
 
51
41
  name: PROJECT-FLUTTER-ANDROID-FIREBASE-APPDIST-CICD
52
42
 
@@ -57,9 +47,7 @@ on:
57
47
  workflow_dispatch:
58
48
 
59
49
  env:
60
- # ============================================
61
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
62
- # ============================================
50
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
63
51
  # 프로젝트 이름
64
52
  APP_ARTIFACT_NAME: "__APP_ARTIFACT_NAME__" # @wizard ask:@repo
65
53
  # Flutter/Java 버전
@@ -133,7 +121,6 @@ jobs:
133
121
  dart run build_runner build --delete-conflicting-outputs
134
122
  fi
135
123
 
136
- # version_manager.py를 사용하여 현재 버전 정보 가져오기
137
124
  - name: 현재 버전 정보 가져오기
138
125
  id: current_version
139
126
  working-directory: ${{ github.workspace }} # version_manager.py가 레포 루트 version.yml을 읽어야 함
@@ -161,7 +148,6 @@ jobs:
161
148
  echo "TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV
162
149
  echo "PROJECT_TYPE=${{ env.PROJECT_TYPE }}" >> $GITHUB_ENV
163
150
 
164
- # CHANGELOG.json에서 릴리즈 노트 추출 - changelog_manager.py 사용
165
151
  - name: 릴리즈 노트 생성
166
152
  id: release_notes
167
153
  working-directory: ${{ github.workspace }} # CHANGELOG.json·changelog_manager.py·final_release_notes.txt(upload 짝)는 레포 루트 기준
@@ -194,7 +180,6 @@ jobs:
194
180
  echo "v$VERSION 업데이트" > final_release_notes.txt
195
181
  fi
196
182
 
197
- # 릴리즈 노트를 아티팩트로 업로드
198
183
  - name: Upload release notes
199
184
  uses: actions/upload-artifact@v7
200
185
  with:
@@ -232,7 +217,6 @@ jobs:
232
217
  - name: Pull latest changes
233
218
  run: git pull origin main
234
219
 
235
- # 프로젝트 파일들 다운로드
236
220
  - name: Download project files
237
221
  uses: actions/download-artifact@v8
238
222
  with:
@@ -254,7 +238,6 @@ jobs:
254
238
  echo "dart-define file prepared"
255
239
  fi
256
240
 
257
- # Release Keystore 설정
258
241
  - name: Setup Release Keystore
259
242
  run: |
260
243
  mkdir -p android/app/keystore
@@ -262,7 +245,6 @@ jobs:
262
245
  echo "✅ Release Keystore 생성 완료"
263
246
  ls -la android/app/keystore/
264
247
 
265
- # key.properties 생성 (Release 서명 정보)
266
248
  - name: Create key.properties
267
249
  run: |
268
250
  cat > android/key.properties << EOF
@@ -274,7 +256,6 @@ jobs:
274
256
  echo "✅ key.properties 생성 완료"
275
257
  cat android/key.properties
276
258
 
277
- # Google-services.json 생성
278
259
  - name: Create Google-services.json
279
260
  run: |
280
261
  cat << 'EOF' > android/app/google-services.json
@@ -318,7 +299,6 @@ jobs:
318
299
  restore-keys: |
319
300
  ${{ runner.os }}-gradle-
320
301
 
321
- # Android build.gradle.kts 수정 (release 서명 설정)
322
302
  - name: Configure Android build for release
323
303
  run: |
324
304
  # build.gradle.kts에 release 서명 설정이 없으면 추가
@@ -331,7 +311,6 @@ jobs:
331
311
  # pubspec.yaml은 x.y.z 형식 그대로 유지
332
312
  # Flutter build 명령어의 --build-name, --build-number 플래그가 pubspec.yaml을 오버라이드함
333
313
 
334
- # Flutter build appbundle (AAB 생성)
335
314
  - name: Build Android App Bundle (AAB)
336
315
  run: |
337
316
  VERSION_NAME="${{ needs.prepare-build.outputs.version }}"
@@ -547,7 +526,6 @@ jobs:
547
526
  echo "📱 파일 크기: $(du -h "$AAB_FILE" | cut -f1)"
548
527
  echo "=========================================="
549
528
 
550
- # AAB 파일을 아티팩트로 업로드
551
529
  - name: Upload AAB artifact
552
530
  uses: actions/upload-artifact@v7
553
531
  with:
@@ -567,21 +545,18 @@ jobs:
567
545
  ref: main
568
546
  fetch-depth: 0
569
547
 
570
- # AAB 파일 다운로드
571
548
  - name: Download AAB artifact
572
549
  uses: actions/download-artifact@v8
573
550
  with:
574
551
  name: android-aab
575
552
  path: ${{ env.FLUTTER_PROJECT_DIR }}/build/app/outputs/bundle/release/
576
553
 
577
- # 릴리즈 노트 다운로드
578
554
  - name: Download release notes
579
555
  uses: actions/download-artifact@v8
580
556
  with:
581
557
  name: release-notes
582
558
  path: .
583
559
 
584
- # Firebase 서비스 계정 설정
585
560
  - name: Setup Firebase credentials file
586
561
  run: |
587
562
  echo "${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON_BASE64 }}" | base64 --decode > firebase-service-account.json
@@ -595,7 +570,6 @@ jobs:
595
570
  python3 ./.github/scripts/truncate_release_notes.py final_release_notes.txt 4000 char
596
571
  fi
597
572
 
598
- # Firebase App Distribution에 AAB 업로드
599
573
  - name: Upload to Firebase App Distribution
600
574
  id: firebase_upload
601
575
  uses: wzieba/Firebase-Distribution-Github-Action@v1
@@ -611,7 +585,6 @@ jobs:
611
585
  if: always()
612
586
  run: rm -f firebase-service-account.json
613
587
 
614
- # 성공 알림
615
588
  - name: Notify Firebase Upload Success
616
589
  if: success()
617
590
  run: |
@@ -1,14 +1,10 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # ===================================================================
3
2
  # Flutter Android Play Store 내부 테스트 배포 워크플로우
4
- # ===================================================================
5
3
  #
6
4
  # {{MAIN_BRANCH}} 브랜치 푸시 시 Android AAB를 빌드하고
7
5
  # Play Store 내부 테스트에 자동 배포합니다.
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 비밀번호
@@ -17,7 +13,6 @@
17
13
  # GOOGLE_SERVICES_JSON: Firebase google-services.json
18
14
  # GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64: Play Console 서비스 계정 (base64)
19
15
  # ANDROID_PACKAGE_NAME: 앱 패키지명 (Secret 우선, 없으면 Variable) — fastlane에 PACKAGE_NAME으로 전달
20
- # ===================================================================
21
16
 
22
17
  name: PROJECT-FLUTTER-ANDROID-PLAYSTORE-INTERNAL-CICD
23
18
 
@@ -37,9 +32,7 @@ on:
37
32
  - store_prepare
38
33
  - store_submit
39
34
 
40
- # ============================================
41
- # 🔧 프로젝트별 설정 (아래 값들을 수정하세요)
42
- # ============================================
35
+ # 프로젝트별 설정 (아래 값들을 수정하세요)
43
36
  env:
44
37
  # 프로젝트 이름
45
38
  APP_ARTIFACT_NAME: "__APP_ARTIFACT_NAME__" # @wizard ask:@repo
@@ -114,7 +107,6 @@ jobs:
114
107
  dart run build_runner build --delete-conflicting-outputs
115
108
  fi
116
109
 
117
- # version_manager.py를 사용하여 현재 버전 정보 가져오기
118
110
  - name: 현재 버전 정보 가져오기
119
111
  id: current_version
120
112
  working-directory: ${{ github.workspace }} # version_manager.py가 레포 루트 version.yml을 읽어야 함
@@ -142,7 +134,6 @@ jobs:
142
134
  echo "TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV
143
135
  echo "PROJECT_TYPE=${{ env.PROJECT_TYPE }}" >> $GITHUB_ENV
144
136
 
145
- # CHANGELOG.json에서 릴리즈 노트 추출 - changelog_manager.py 사용
146
137
  - name: 릴리즈 노트 생성
147
138
  id: release_notes
148
139
  working-directory: ${{ github.workspace }} # CHANGELOG.json·changelog_manager.py·final_release_notes.txt(upload 짝)는 레포 루트 기준
@@ -175,7 +166,6 @@ jobs:
175
166
  echo "v$VERSION 업데이트" > final_release_notes.txt
176
167
  fi
177
168
 
178
- # 릴리즈 노트를 아티팩트로 업로드
179
169
  - name: Upload release notes
180
170
  uses: actions/upload-artifact@v7
181
171
  with:
@@ -215,7 +205,6 @@ jobs:
215
205
  - name: Pull latest changes
216
206
  run: git pull origin main
217
207
 
218
- # 프로젝트 파일들 다운로드
219
208
  - name: Download project files
220
209
  uses: actions/download-artifact@v8
221
210
  with:
@@ -237,7 +226,6 @@ jobs:
237
226
  echo "dart-define file prepared"
238
227
  fi
239
228
 
240
- # Release Keystore 설정
241
229
  - name: Setup Release Keystore
242
230
  run: |
243
231
  mkdir -p android/app/keystore
@@ -245,7 +233,6 @@ jobs:
245
233
  echo "✅ Release Keystore 생성 완료"
246
234
  ls -la android/app/keystore/
247
235
 
248
- # key.properties 생성 (Release 서명 정보)
249
236
  - name: Create key.properties
250
237
  run: |
251
238
  cat > android/key.properties << EOF
@@ -257,7 +244,6 @@ jobs:
257
244
  echo "✅ key.properties 생성 완료"
258
245
  cat android/key.properties
259
246
 
260
- # Google-services.json 생성
261
247
  - name: Create Google-services.json
262
248
  run: |
263
249
  cat << 'EOF' > android/app/google-services.json
@@ -301,7 +287,6 @@ jobs:
301
287
  restore-keys: |
302
288
  ${{ runner.os }}-gradle-
303
289
 
304
- # Android build.gradle.kts 수정 (release 서명 설정)
305
290
  - name: Configure Android build for release
306
291
  run: |
307
292
  # build.gradle.kts에 release 서명 설정이 없으면 추가
@@ -314,7 +299,6 @@ jobs:
314
299
  # pubspec.yaml은 x.y.z 형식 그대로 유지
315
300
  # Flutter build 명령어의 --build-name, --build-number 플래그가 pubspec.yaml을 오버라이드함
316
301
 
317
- # Flutter build appbundle (AAB 생성)
318
302
  - name: Build Android App Bundle (AAB)
319
303
  run: |
320
304
  VERSION_NAME="${{ needs.prepare-build.outputs.version }}"
@@ -530,7 +514,6 @@ jobs:
530
514
  echo "📱 파일 크기: $(du -h "$AAB_FILE" | cut -f1)"
531
515
  echo "=========================================="
532
516
 
533
- # AAB 파일을 아티팩트로 업로드
534
517
  - name: Upload AAB artifact
535
518
  uses: actions/upload-artifact@v7
536
519
  with:
@@ -554,28 +537,24 @@ jobs:
554
537
  ref: main
555
538
  fetch-depth: 0
556
539
 
557
- # Service Account JSON 설정
558
540
  - name: Setup Google Play Service Account
559
541
  run: |
560
542
  mkdir -p ~/.config/gcloud
561
543
  echo "${{ secrets.GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_BASE64 }}" | base64 --decode > ~/.config/gcloud/service-account.json
562
544
  echo "✅ Service Account JSON 설정 완료"
563
545
 
564
- # AAB 파일 다운로드
565
546
  - name: Download AAB artifact
566
547
  uses: actions/download-artifact@v8
567
548
  with:
568
549
  name: android-aab
569
550
  path: ${{ env.FLUTTER_PROJECT_DIR }}/build/app/outputs/bundle/release/
570
551
 
571
- # 릴리즈 노트 다운로드
572
552
  - name: Download release notes
573
553
  uses: actions/download-artifact@v8
574
554
  with:
575
555
  name: release-notes
576
556
  path: .
577
557
 
578
- # Ruby 및 Fastlane 설치
579
558
  - name: Set up Ruby
580
559
  uses: ruby/setup-ruby@v1
581
560
  with:
@@ -605,7 +584,6 @@ jobs:
605
584
  echo "📋 Fastfile 내용:"
606
585
  cat android/fastlane/Fastfile
607
586
 
608
- # Play Store에 업로드
609
587
  - name: Upload to Play Store Internal Testing
610
588
  env:
611
589
  DEPLOY_MODE: ${{ env.DEPLOY_MODE }}
@@ -720,7 +698,6 @@ jobs:
720
698
  cd android
721
699
  bundle exec fastlane deploy_internal
722
700
 
723
- # 성공 알림
724
701
  - name: Notify Play Store Upload Success
725
702
  if: success()
726
703
  run: |
@@ -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: