project-auto-wizard 0.13.3 → 0.15.0

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 (115) hide show
  1. package/README.ja.md +2 -0
  2. package/README.ko.md +2 -0
  3. package/README.md +3 -1
  4. package/README.zh-CN.md +2 -0
  5. package/bin/project-auto-wizard.js +18 -4
  6. package/package.json +2 -2
  7. package/payload/config/breaking-changes.json +28 -14
  8. package/payload/config/wizard-prompts.yml +102 -46
  9. package/payload/flutter-app/android/fastlane/Fastfile.playstore +44 -32
  10. package/payload/flutter-app/ios/ExportOptions.plist +8 -8
  11. package/payload/flutter-app/ios/fastlane/Fastfile +57 -43
  12. package/payload/scripts/changelog_manager.py +304 -265
  13. package/payload/scripts/issue_helper.py +54 -50
  14. package/payload/scripts/messages.py +2585 -0
  15. package/payload/scripts/truncate_release_notes.py +7 -6
  16. package/payload/scripts/version_manager.py +110 -107
  17. package/payload/version.yml.template +2 -1
  18. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +23 -16
  19. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +106 -63
  20. package/payload/workflows/common/PROJECT-COMMON-ISSUE-HELPER.yaml +17 -15
  21. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +55 -45
  22. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +90 -72
  23. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +59 -45
  24. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +194 -184
  25. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +226 -213
  26. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +46 -42
  27. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +334 -241
  28. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +152 -128
  29. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +246 -188
  30. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +353 -238
  31. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +96 -85
  32. package/payload/workflows/go/PROJECT-GO-CI.yaml +47 -36
  33. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +945 -508
  34. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +155 -133
  35. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +76 -60
  36. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +97 -77
  37. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +62 -47
  38. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +942 -505
  39. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +148 -126
  40. package/payload/workflows/react/PROJECT-REACT-CI.yaml +86 -70
  41. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +112 -92
  42. package/payload/workflows/spring/PROJECT-SPRING-CI.yml +112 -82
  43. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +180 -150
  44. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +161 -131
  45. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +970 -549
  46. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +193 -162
  47. package/src/cli/args.js +98 -52
  48. package/src/cli/help.js +8 -41
  49. package/src/commands/doctor.js +90 -89
  50. package/src/commands/dry-run.js +64 -43
  51. package/src/commands/full.js +79 -77
  52. package/src/commands/install-settings.js +16 -15
  53. package/src/commands/interactive-flutter.js +20 -19
  54. package/src/commands/interactive.js +135 -132
  55. package/src/commands/purge.js +47 -42
  56. package/src/commands/status.js +36 -36
  57. package/src/commands/uninstall.js +43 -41
  58. package/src/context.js +12 -11
  59. package/src/core/assets.js +12 -11
  60. package/src/core/baseline.js +27 -27
  61. package/src/core/branches.js +29 -27
  62. package/src/core/branding.js +7 -6
  63. package/src/core/breaking-check.js +22 -21
  64. package/src/core/breaking.js +15 -8
  65. package/src/core/copy/app-files.js +5 -4
  66. package/src/core/copy/flutter-app.js +8 -8
  67. package/src/core/copy/gitignore.js +58 -50
  68. package/src/core/copy/readme.js +102 -36
  69. package/src/core/copy/simple.js +16 -15
  70. package/src/core/copy/workflows.js +131 -124
  71. package/src/core/deploy-style.js +51 -48
  72. package/src/core/detect-fs.js +57 -57
  73. package/src/core/detect.js +67 -65
  74. package/src/core/errors.js +2 -2
  75. package/src/core/flutter-doctor.js +17 -16
  76. package/src/core/flutter-hooks.js +33 -32
  77. package/src/core/flutter-options.js +34 -33
  78. package/src/core/fsutil.js +12 -12
  79. package/src/core/installed-stores.js +4 -4
  80. package/src/core/logger.js +42 -40
  81. package/src/core/paths-resolve.js +88 -86
  82. package/src/core/paths.js +10 -10
  83. package/src/core/release-options.js +8 -8
  84. package/src/core/removal-exec.js +14 -13
  85. package/src/core/removal-plan.js +37 -37
  86. package/src/core/types.js +47 -47
  87. package/src/core/verify.js +44 -38
  88. package/src/core/version-yml.js +76 -68
  89. package/src/core/wizard-env.js +46 -46
  90. package/src/core/wizard-labels.js +63 -41
  91. package/src/i18n/catalog/en/cli.js +50 -0
  92. package/src/i18n/catalog/en/commands.js +188 -0
  93. package/src/i18n/catalog/en/copy.js +20 -0
  94. package/src/i18n/catalog/en/core.js +74 -0
  95. package/src/i18n/catalog/en/core2.js +15 -0
  96. package/src/i18n/catalog/en/ui.js +221 -0
  97. package/src/i18n/catalog/en.js +12 -0
  98. package/src/i18n/catalog/index.js +5 -0
  99. package/src/i18n/catalog/ko/cli.js +50 -0
  100. package/src/i18n/catalog/ko/commands.js +188 -0
  101. package/src/i18n/catalog/ko/copy.js +20 -0
  102. package/src/i18n/catalog/ko/core.js +74 -0
  103. package/src/i18n/catalog/ko/core2.js +15 -0
  104. package/src/i18n/catalog/ko/ui.js +221 -0
  105. package/src/i18n/catalog/ko.js +10 -0
  106. package/src/i18n/index.js +44 -0
  107. package/src/i18n/languages.js +9 -0
  108. package/src/index.js +132 -97
  109. package/src/ui/ansi.js +7 -7
  110. package/src/ui/banner.js +7 -6
  111. package/src/ui/env-plan.js +82 -81
  112. package/src/ui/prompts.js +97 -122
  113. package/src/ui/readline-engine.js +59 -58
  114. package/src/ui/status-cards.js +37 -31
  115. package/src/ui/summary.js +90 -89
@@ -1,36 +1,36 @@
1
1
  # project-auto-wizard:managed-workflow
2
- # Python 빌드 검증 워크플로우 (CI Only)
3
- # - {{DEVELOP_BRANCH}} 브랜치 push/PR 시 의존성 설치 → pytest → (Dockerfile이 있으면) Docker 빌드로 검증
4
- # - 의존성: requirements.txt가 있으면 그것을, 없으면 pyproject.toml/setup.py로 `pip install .`
5
- # - 테스트: tests/·test/ 폴더나 test_*.py·*_test.py가 있을 때만 pytest 실행 (없으면 건너뜀)
6
- # - Dockerfile이 없어도 실패하지 않는다 (Docker 빌드 검증만 건너뜀)
7
- # - 배포는 수행하지 않음 ({{MAIN_BRANCH}} 브랜치에서만 배포)
2
+ # Python build verification workflow (CI only)
3
+ # - On push/PR to the {{DEVELOP_BRANCH}} branch: install dependencies -> pytest -> Docker build (if a Dockerfile exists)
4
+ # - Dependencies: requirements.txt if present, otherwise `pip install .` from pyproject.toml/setup.py
5
+ # - Tests: pytest runs only when a tests/ or test/ folder or test_*.py / *_test.py files exist (skipped otherwise)
6
+ # - A missing Dockerfile does not fail the run (only the Docker build verification is skipped)
7
+ # - Does not deploy (deployment happens only on the {{MAIN_BRANCH}} branch)
8
8
  #
9
9
  # GitHub Secrets
10
- # - ENV_FILE (선택): .env 파일 내용 — 없으면 빈 .env로 검증합니다
10
+ # - ENV_FILE (optional): contents of the .env file — verified with an empty .env when missing
11
11
 
12
12
  name: PROJECT-PYTHON-CI
13
13
 
14
14
  on:
15
15
  push:
16
16
  branches:
17
- - "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치 push 시 빌드 검증
17
+ - "{{DEVELOP_BRANCH}}" # build verification on push to the {{DEVELOP_BRANCH}} branch
18
18
  pull_request:
19
19
  branches:
20
- - "{{DEVELOP_BRANCH}}" # {{DEVELOP_BRANCH}} 브랜치로의 PR 시 빌드 검증
21
- workflow_dispatch: # 수동 실행 허용
20
+ - "{{DEVELOP_BRANCH}}" # build verification on PRs to the {{DEVELOP_BRANCH}} branch
21
+ workflow_dispatch: # allow manual runs
22
22
 
23
23
  env:
24
- # 프로젝트 고유 식별자 (컨테이너명, 이미지명, 도메인에 사용)
24
+ # Unique project identifier (used for container, image and domain names)
25
25
  PROJECT_NAME: "__PROJECT_NAME__" # @wizard ask:@repo
26
- # 모노레포에서 이 프로젝트가 있는 하위 경로 ('.'이면 항상 검증)
26
+ # Subdirectory of this project in a monorepo ('.' means always verify)
27
27
  PROJECT_PATH: "." # @wizard auto:project-path
28
- # 테스트·의존성 설치에 쓸 Python 버전
28
+ # Python version used for tests and dependency install
29
29
  PYTHON_VERSION: "3.12"
30
30
 
31
31
  jobs:
32
32
  changes:
33
- name: 변경 감지
33
+ name: Detect changes
34
34
  runs-on: ubuntu-latest
35
35
  permissions:
36
36
  contents: read
@@ -41,124 +41,139 @@ jobs:
41
41
  - name: Checkout repository
42
42
  uses: actions/checkout@v7
43
43
 
44
- - name: 프로젝트 경로 변경 여부 판별
44
+ - name: Check whether the project path changed
45
45
  id: filter
46
46
  if: ${{ github.event_name != 'workflow_dispatch' }}
47
47
  uses: dorny/paths-filter@v4
48
48
  with:
49
- # push는 이번 push 범위(직전 커밋 before 대비)만 본다. 비워 두면 기본 브랜치 대비 누적 diff가 된다.
50
- # 새 브랜치 첫 push(before가 0)와 PR은 빈 값 → 기본 동작(기본 브랜치·PR base 대비)
49
+ # A push only looks at this push's range (against the previous commit, 'before'). Left empty it would be the cumulative diff against the default branch.
50
+ # The first push of a new branch (before is 0) and PRs get an empty value -> default behavior (against the default branch / PR base)
51
51
  base: ${{ github.event_name == 'push' && github.event.before != '0000000000000000000000000000000000000000' && github.event.before || '' }}
52
52
  filters: |
53
53
  project:
54
54
  - '${{ env.PROJECT_PATH == '.' && '**' || format('{0}/**', env.PROJECT_PATH) }}'
55
55
 
56
56
  build-check:
57
- name: Python 빌드 검증
57
+ name: Python build verification
58
58
  runs-on: ubuntu-latest
59
59
  needs: changes
60
60
  if: ${{ github.event_name == 'workflow_dispatch' || needs.changes.outputs.project == 'true' }}
61
- # 모노레포(--paths)면 그 하위 폴더에서 빌드한다
61
+ # In a monorepo (--paths), build inside that subfolder
62
62
  defaults:
63
63
  run:
64
64
  working-directory: ${{ env.PROJECT_PATH }}
65
65
 
66
66
  steps:
67
- - name: 코드 체크아웃
67
+ - name: Checkout repository
68
68
  uses: actions/checkout@v7
69
69
 
70
- - name: .env 파일 생성
70
+ - name: Create .env file
71
71
  run: |
72
+ m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
72
73
  cat > .env << 'EOF'
73
74
  ${{ secrets.ENV_FILE }}
74
75
  EOF
75
- echo "✅ .env 파일이 생성되었습니다"
76
+ m cicd.dotenv_created
76
77
 
77
- - name: Python 설정
78
+ - name: Set up Python
78
79
  uses: actions/setup-python@v7
79
80
  with:
80
81
  python-version: ${{ env.PYTHON_VERSION }}
81
82
 
82
- - name: 의존성 설치
83
+ - name: Install dependencies
83
84
  run: |
85
+ m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
84
86
  python -m pip install --upgrade pip
85
87
  if [ -f requirements.txt ]; then
86
88
  pip install -r requirements.txt
87
89
  elif [ -f pyproject.toml ] || [ -f setup.py ]; then
88
90
  pip install .
89
91
  else
90
- echo "::notice::requirements.txt·pyproject.toml·setup.py가 없어 의존성 설치를 건너뜁니다"
92
+ m cibuild.py_no_deps
91
93
  fi
92
- # 개발용 의존성은 있으면 함께 설치 (pytest 등)
94
+ # Also install dev dependencies when present (pytest, etc.)
93
95
  if [ -f requirements-dev.txt ]; then pip install -r requirements-dev.txt; fi
94
96
 
95
- # 테스트가 없는 프로젝트는 실패가 아니라 건너뜀으로 처리한다
96
- - name: 테스트 실행 (pytest)
97
+ # Projects without tests are skipped rather than failed
98
+ - name: Run tests (pytest)
97
99
  run: |
100
+ m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
98
101
  if [ -d tests ] || [ -d test ] || [ -n "$(find . \( -path ./.venv -o -path ./venv -o -path ./node_modules -o -path ./.git \) -prune -o \( -name 'test_*.py' -o -name '*_test.py' \) -type f -print -quit)" ]; then
99
102
  python -m pytest --version > /dev/null 2>&1 || pip install pytest
100
103
  set +e
101
104
  python -m pytest
102
105
  code=$?
103
106
  set -e
104
- # 5 = 수집된 테스트 없음 → 실패로 보지 않는다
107
+ # 5 = no tests collected -> not treated as a failure
105
108
  if [ "$code" -eq 5 ]; then
106
- echo "::notice::수집된 테스트가 없어 pytest를 건너뜁니다"
109
+ m cibuild.py_no_tests_collected
107
110
  exit 0
108
111
  fi
109
112
  exit "$code"
110
113
  else
111
- echo "::notice::테스트 파일(tests/, test_*.py 등)이 없어 pytest를 건너뜁니다"
114
+ m cibuild.py_no_test_files
112
115
  fi
113
116
 
114
- - name: Dockerfile 확인
117
+ - name: Check for Dockerfile
115
118
  id: dockerfile
116
119
  run: |
120
+ m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
117
121
  if [ -f Dockerfile ]; then
118
122
  echo "exists=true" >> "$GITHUB_OUTPUT"
119
123
  else
120
124
  echo "exists=false" >> "$GITHUB_OUTPUT"
121
- echo "::notice::${{ env.PROJECT_PATH }}/Dockerfile이 없어 Docker 빌드 검증을 건너뜁니다"
125
+ m cibuild.py_no_dockerfile path="${{ env.PROJECT_PATH }}"
122
126
  fi
123
127
 
124
- - name: Docker 빌드환경 설정
128
+ - name: Set up Docker Buildx
125
129
  if: steps.dockerfile.outputs.exists == 'true'
126
130
  uses: docker/setup-buildx-action@v3
127
131
 
128
- - name: Docker 이미지 빌드 검증
132
+ - name: Verify Docker image build
129
133
  if: steps.dockerfile.outputs.exists == 'true'
130
134
  uses: docker/build-push-action@v5
131
135
  with:
132
136
  context: ${{ env.PROJECT_PATH }}
133
137
  file: ${{ env.PROJECT_PATH }}/Dockerfile
134
- push: false # 푸시하지 않음 (빌드 검증만)
138
+ push: false # do not push (build verification only)
135
139
  tags: ${{ env.PROJECT_NAME }}:build-check
136
140
  cache-from: type=gha
137
141
  cache-to: type=gha,mode=max
138
142
 
139
- - name: 빌드 검증 완료
143
+ - name: Build verification complete
140
144
  run: |
141
- echo "✅ Python 빌드 검증이 성공적으로 완료되었습니다!"
145
+ m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
146
+ m cibuild.python_done
142
147
  echo ""
143
- echo "📋 빌드 정보:"
144
- echo " 🎯 프로젝트: ${{ env.PROJECT_NAME }}"
145
- echo " 🌿 브랜치: ${{ github.ref_name }}"
146
- echo " 📝 커밋: ${{ github.sha }}"
147
- echo " ⏰ 검증 시간: $(date '+%Y-%m-%d %H:%M:%S')"
148
+ m cibuild.info_title
149
+ m cibuild.info_project project="${{ env.PROJECT_NAME }}"
150
+ m cibuild.info_branch branch="${{ github.ref_name }}"
151
+ m cibuild.info_commit sha="${{ github.sha }}"
152
+ m cibuild.info_time time="$(date '+%Y-%m-%d %H:%M:%S')"
148
153
 
149
- # CI Gate: required check로 등록할 단일 job
154
+ # CI Gate: the single job to register as a required check
150
155
  ci-gate:
151
156
  name: CI Gate
152
157
  if: ${{ always() }}
153
158
  needs: [changes, build-check]
154
159
  runs-on: ubuntu-latest
155
160
  steps:
156
- - name: 결과 집계
161
+ # Only the message catalog is needed here, so check out just that
162
+ - name: Checkout message catalog
163
+ uses: actions/checkout@v7
164
+ with:
165
+ sparse-checkout: |
166
+ .github/scripts/messages.py
167
+ version.yml
168
+ sparse-checkout-cone-mode: false
169
+
170
+ - name: Aggregate results
157
171
  env:
158
172
  RESULTS: ${{ toJSON(needs.*.result) }}
159
173
  run: |
160
- echo "needs 결과: $RESULTS"
174
+ m() { (cd "$GITHUB_WORKSPACE" && python3 .github/scripts/messages.py get "$@"); }
175
+ m cibuild.gate_results results="$RESULTS"
161
176
  if echo "$RESULTS" | grep -Eq '"(failure|cancelled)"'; then
162
- echo "실패하거나 취소된 job이 있습니다."
177
+ m cibuild.gate_failed
163
178
  exit 1
164
179
  fi