project-auto-wizard 0.14.0 → 0.15.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 (64) hide show
  1. package/README.ja.md +3 -1
  2. package/README.ko.md +3 -1
  3. package/README.md +4 -2
  4. package/README.zh-CN.md +3 -1
  5. package/package.json +1 -1
  6. package/payload/config/breaking-changes.json +31 -5
  7. package/payload/config/wizard-prompts.yml +0 -4
  8. package/payload/scripts/changelog_manager.py +8 -8
  9. package/payload/scripts/messages.py +460 -24
  10. package/payload/scripts/version_manager.py +102 -73
  11. package/payload/version.yml.template +2 -2
  12. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +9 -4
  13. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +62 -30
  14. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +96 -44
  15. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +79 -35
  16. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +71 -35
  17. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +24 -8
  18. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +29 -10
  19. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +57 -23
  20. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +155 -72
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-APP-BUILD-TRIGGER.yaml +49 -20
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +162 -62
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +184 -87
  24. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +38 -15
  25. package/payload/workflows/go/PROJECT-GO-CI.yaml +14 -5
  26. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +375 -120
  27. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +9 -4
  28. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +12 -4
  29. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +375 -120
  30. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +9 -4
  31. package/payload/workflows/react/PROJECT-REACT-CI.yaml +38 -9
  32. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +19 -5
  33. package/payload/workflows/spring/PROJECT-SPRING-CI.yml +71 -35
  34. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +9 -6
  35. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +7 -4
  36. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +425 -144
  37. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +7 -4
  38. package/src/cli/args.js +17 -7
  39. package/src/commands/doctor.js +16 -0
  40. package/src/commands/dry-run.js +10 -1
  41. package/src/commands/full.js +5 -2
  42. package/src/commands/interactive.js +4 -1
  43. package/src/commands/status.js +14 -1
  44. package/src/core/copy/readme.js +58 -2
  45. package/src/core/copy/simple.js +31 -0
  46. package/src/core/copy/workflows.js +2 -2
  47. package/src/core/deploy-style.js +1 -1
  48. package/src/core/detect.js +3 -2
  49. package/src/core/types.js +15 -8
  50. package/src/core/version-yml.js +52 -6
  51. package/src/i18n/catalog/en/cli.js +1 -0
  52. package/src/i18n/catalog/en/commands.js +9 -0
  53. package/src/i18n/catalog/en/copy.js +1 -0
  54. package/src/i18n/catalog/en/core2.js +3 -0
  55. package/src/i18n/catalog/ko/cli.js +1 -0
  56. package/src/i18n/catalog/ko/commands.js +9 -0
  57. package/src/i18n/catalog/ko/copy.js +1 -0
  58. package/src/i18n/catalog/ko/core2.js +3 -0
  59. package/src/index.js +8 -4
  60. package/src/ui/env-plan.js +1 -1
  61. package/src/ui/prompts.js +7 -3
  62. package/src/ui/summary.js +1 -1
  63. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +0 -241
  64. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +0 -330
package/README.ja.md CHANGED
@@ -49,6 +49,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
49
49
 
50
50
  生成されたファイルをコミットして push してください。`npx project-auto-wizard --mode doctor` は、ワークフローが依存するリポジトリ設定を確認します。
51
51
 
52
+ メッセージの言語は英語または韓国語(`en` | `ko`)です。`--lang`、環境変数 `PROJECT_AUTO_WIZARD_LANG`、`version.yml` の `language` の順に優先されます。
53
+
52
54
  ## インストールされるもの
53
55
 
54
56
  | インストール対象 | 用途 |
@@ -125,7 +127,7 @@ feature PRs ──▶ develop ──▶ release PR (develop → main)
125
127
  |---|---|---|
126
128
  | `spring` | `build.gradle`、`build.gradle.kts`、`pom.xml` | CI、サーバーへのデプロイ(単一サーバー / Nginx または Traefik によるダウンタイムなし)、PR プレビュー |
127
129
  | `flutter` | `pubspec.yaml` | CI、Android(Firebase、Play Store、セルフホスト、テスト用 APK)、iOS TestFlight |
128
- | `react`、`next` | `package.json` の dependencies | CI、CI + CD |
130
+ | `react`(React / Next.js) | `package.json` の `react` または `next` dependency | CI、CI + CD |
129
131
  | `python` | `pyproject.toml`、`setup.py`、`requirements.txt` | CI、PR プレビュー、サーバーへのデプロイ |
130
132
  | `go` | `go.mod` | CI、PR プレビュー、サーバーへのデプロイ |
131
133
  | `node`、`react-native`、`react-native-expo`、`basic` | `package.json` / フォールバック | リリース自動化のみ |
package/README.ko.md CHANGED
@@ -49,6 +49,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
49
49
 
50
50
  생성된 파일을 커밋하고 push하세요. `npx project-auto-wizard --mode doctor`는 워크플로우가 의존하는 레포 설정을 점검합니다.
51
51
 
52
+ 메시지 언어는 영어 또는 한국어(`en` | `ko`)입니다. `--lang`, 환경변수 `PROJECT_AUTO_WIZARD_LANG`, `version.yml`의 `language` 순서로 우선 적용됩니다.
53
+
52
54
  ## 설치되는 것
53
55
 
54
56
  | 설치 항목 | 용도 |
@@ -125,7 +127,7 @@ feature PRs ──▶ develop ──▶ release PR (develop → main)
125
127
  |---|---|---|
126
128
  | `spring` | `build.gradle`, `build.gradle.kts`, `pom.xml` | CI, 서버 배포 (단일 서버 / Nginx·Traefik 무중단), PR 프리뷰 |
127
129
  | `flutter` | `pubspec.yaml` | CI, Android (Firebase, Play Store, self-hosted, 테스트 APK), iOS TestFlight |
128
- | `react`, `next` | `package.json` dependencies | CI, CI + CD |
130
+ | `react` (React / Next.js) | `package.json`의 `react` 또는 `next` dependency | CI, CI + CD |
129
131
  | `python` | `pyproject.toml`, `setup.py`, `requirements.txt` | CI, PR 프리뷰, 서버 배포 |
130
132
  | `go` | `go.mod` | CI, PR 프리뷰, 서버 배포 |
131
133
  | `node`, `react-native`, `react-native-expo`, `basic` | `package.json` / fallback | 릴리스 자동화만 |
package/README.md CHANGED
@@ -21,7 +21,7 @@ Everything it installs is plain GitHub Actions in your own repository. No API ke
21
21
  </div>
22
22
 
23
23
  <!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->
24
- ## Latest Version : v0.14.0 (2026-09-30)
24
+ ## Latest Version : v0.15.1 (2026-10-01)
25
25
 
26
26
  [Full release history](CHANGELOG.md)
27
27
 
@@ -50,6 +50,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
50
50
 
51
51
  Commit the generated files and push. `npx project-auto-wizard --mode doctor` checks the repository settings the workflows depend on.
52
52
 
53
+ Messages are in English or Korean (`en` | `ko`). Pick one with `--lang`, the `PROJECT_AUTO_WIZARD_LANG` environment variable, or `language` in `version.yml`, in that order of precedence.
54
+
53
55
  ## What you get
54
56
 
55
57
  | Installed | Purpose |
@@ -126,7 +128,7 @@ Skip it if:
126
128
  |---|---|---|
127
129
  | `spring` | `build.gradle`, `build.gradle.kts`, `pom.xml` | CI, server deploy (single server / zero-downtime Nginx or Traefik), PR preview |
128
130
  | `flutter` | `pubspec.yaml` | CI, Android (Firebase, Play Store, self-hosted, test APK), iOS TestFlight |
129
- | `react`, `next` | `package.json` dependencies | CI, CI + CD |
131
+ | `react` (React / Next.js) | `package.json` with a `react` or `next` dependency | CI, CI + CD |
130
132
  | `python` | `pyproject.toml`, `setup.py`, `requirements.txt` | CI, PR preview, server deploy |
131
133
  | `go` | `go.mod` | CI, PR preview, server deploy |
132
134
  | `node`, `react-native`, `react-native-expo`, `basic` | `package.json` / fallback | Release automation only |
package/README.zh-CN.md CHANGED
@@ -49,6 +49,8 @@ npx project-auto-wizard --mode full --force --type node --dry-run # preview on
49
49
 
50
50
  提交生成的文件并 push。`npx project-auto-wizard --mode doctor` 会检查工作流所依赖的仓库设置。
51
51
 
52
+ 消息语言为英语或韩语(`en` | `ko`)。可通过 `--lang`、环境变量 `PROJECT_AUTO_WIZARD_LANG` 或 `version.yml` 中的 `language` 指定,优先级依次降低。
53
+
52
54
  ## 安装内容
53
55
 
54
56
  | 安装项 | 用途 |
@@ -125,7 +127,7 @@ feature PRs ──▶ develop ──▶ release PR (develop → main)
125
127
  |---|---|---|
126
128
  | `spring` | `build.gradle`、`build.gradle.kts`、`pom.xml` | CI、服务器部署(单台服务器 / Nginx 或 Traefik 零停机)、PR 预览 |
127
129
  | `flutter` | `pubspec.yaml` | CI、Android(Firebase、Play Store、自托管、测试 APK)、iOS TestFlight |
128
- | `react`、`next` | `package.json` 的 dependencies | CI、CI + CD |
130
+ | `react`(React / Next.js) | `package.json` 中的 `react` 或 `next` dependency | CI、CI + CD |
129
131
  | `python` | `pyproject.toml`、`setup.py`、`requirements.txt` | CI、PR 预览、服务器部署 |
130
132
  | `go` | `go.mod` | CI、PR 预览、服务器部署 |
131
133
  | `node`、`react-native`、`react-native-expo`、`basic` | `package.json` / 兜底 | 仅发布自动化 |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-auto-wizard",
3
- "version": "0.14.0",
3
+ "version": "0.15.1",
4
4
  "description": "One command DevOps: npx wizard that installs GitHub-native Release Automation (optional GitHub Copilot AI summaries) into any project",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -2,7 +2,9 @@
2
2
  "0.10.1": [
3
3
  {
4
4
  "severity": "warning",
5
- "types": ["flutter"],
5
+ "types": [
6
+ "flutter"
7
+ ],
6
8
  "title": "Flutter SELFHOSTED and TEST-APK now run flutter build directly",
7
9
  "message": "SELFHOSTED and TEST-APK run flutter build apk --release directly instead of fastlane build, and the Ruby/fastlane install steps are gone. fastlane is now used only by the three store deploy workflows (PLAYSTORE, IOS-TESTFLIGHT, IOS-TEST-TESTFLIGHT).",
8
10
  "title_ko": "Flutter SELFHOSTED·TEST-APK가 flutter build를 직접 실행",
@@ -10,7 +12,9 @@
10
12
  },
11
13
  {
12
14
  "severity": "warning",
13
- "types": ["flutter"],
15
+ "types": [
16
+ "flutter"
17
+ ],
14
18
  "title": "Flutter env default switched to dart-define",
15
19
  "message": "New installs default to dart-define (--dart-define-from-file). Existing installs keep dotenv (a generated .env) when version.yml has no saved value; to change it, use the wizard 'Modify > environment variable method' or --flutter-env-mode.",
16
20
  "title_ko": "Flutter 환경변수 기본 방식이 dart-define으로 변경",
@@ -18,7 +22,9 @@
18
22
  },
19
23
  {
20
24
  "severity": "warning",
21
- "types": ["flutter"],
25
+ "types": [
26
+ "flutter"
27
+ ],
22
28
  "title": "Flutter workflows now run from FLUTTER_PROJECT_DIR",
23
29
  "message": "FIREBASE, SELFHOSTED, CI, TEST-APK and IOS-TEST-TESTFLIGHT now run from the Flutter root (FLUTTER_PROJECT_DIR), like PLAYSTORE. For a monorepo where Flutter lives in a subfolder, set it with --paths flutter=<path>.",
24
30
  "title_ko": "Flutter 워크플로우가 FLUTTER_PROJECT_DIR 기준으로 동작",
@@ -26,7 +32,13 @@
26
32
  },
27
33
  {
28
34
  "severity": "warning",
29
- "types": ["flutter", "go", "next", "python", "react", "spring"],
35
+ "types": [
36
+ "flutter",
37
+ "go",
38
+ "python",
39
+ "react",
40
+ "spring"
41
+ ],
30
42
  "title": "Register only ci-gate as the monorepo CI required check",
31
43
  "message": "CI workflows (Flutter, Go, Next, Python, React, Spring CI) always run and skip their jobs when nothing changed. To use them as a required check, register only the CI Gate (ci-gate), not the individual jobs.",
32
44
  "title_ko": "모노레포 CI required check는 ci-gate 하나만 등록",
@@ -45,7 +57,9 @@
45
57
  "0.12.1": [
46
58
  {
47
59
  "severity": "warning",
48
- "types": ["spring"],
60
+ "types": [
61
+ "spring"
62
+ ],
49
63
  "title": "Spring nexus and GitHub Packages publish options removed",
50
64
  "message": "PROJECT-SPRING-NEXUS-PUBLISH.yml and PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml are no longer installed, and PROJECT-SPRING-NEXUS-CI.yml became PROJECT-SPRING-CI.yml, which is always installed. On update, untouched old files are deleted and modified ones are moved to .bak. To keep deploying, move the .bak into a workflow you maintain yourself.",
51
65
  "title_ko": "Spring nexus·GitHub Packages publish 옵션 제거",
@@ -58,5 +72,17 @@
58
72
  "title_ko": "Secret 서버 백업 워크플로우(secret_backup 옵션) 제거",
59
73
  "message_ko": "PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml을 더 이상 설치하지 않습니다. 설치해 두었다면 업데이트 때 손대지 않은 파일은 삭제되고 수정한 파일은 .bak으로 옮겨집니다. 계속 쓰려면 .bak을 직접 관리하는 워크플로우로 옮기세요."
60
74
  }
75
+ ],
76
+ "0.15.1": [
77
+ {
78
+ "severity": "warning",
79
+ "types": [
80
+ "react"
81
+ ],
82
+ "title": "The next type is now react; Next.js deploy names changed",
83
+ "message": "Next.js projects are now the react type (next is still accepted as an alias). PROJECT-NEXT-CI and PROJECT-NEXT-CICD are replaced by PROJECT-REACT-CI and PROJECT-REACT-CICD on update (untouched old files are deleted, modified ones move to .bak). The deploy image prefix changes from nextjs-container to front-container and the container from <project>-nextjs-deploy to <project>-front-deploy, so the first deploy pulls a new image; the workflow removes the old nextjs container automatically before starting the new one. Clean up the old image on the server if you no longer need it.",
84
+ "title_ko": "next 타입이 react로 통합되고 Next.js 배포 이름이 바뀜",
85
+ "message_ko": "Next.js 프로젝트는 이제 react 타입입니다(next는 별칭으로 계속 받습니다). 업데이트하면 PROJECT-NEXT-CI·PROJECT-NEXT-CICD가 PROJECT-REACT-CI·PROJECT-REACT-CICD로 교체됩니다(손대지 않은 이전 파일은 삭제, 수정한 파일은 .bak으로 이동). 배포 이미지 접두어가 nextjs-container에서 front-container로, 컨테이너 이름이 <프로젝트>-nextjs-deploy에서 <프로젝트>-front-deploy로 바뀌므로 첫 배포에서 새 이미지를 받으며, 워크플로우가 새 컨테이너를 띄우기 전에 이전 nextjs 컨테이너를 자동으로 지웁니다. 이전 이미지가 필요 없다면 서버에서 직접 정리하세요."
86
+ }
61
87
  ]
62
88
  }
@@ -150,8 +150,6 @@ _workflow_names:
150
150
  SIMPLE-CICD: "Single-server deploy"
151
151
  REACT-CICD: "Frontend deploy"
152
152
  REACT-CI: "Frontend build"
153
- NEXT-CICD: "Frontend deploy"
154
- NEXT-CI: "Frontend build"
155
153
  PYTHON-CI: "Build check"
156
154
  FLUTTER-ANDROID-SELFHOSTED: "Android self-hosted deploy"
157
155
  FLUTTER-ANDROID-PLAYSTORE: "Play Store deploy"
@@ -165,8 +163,6 @@ _workflow_names_ko:
165
163
  SIMPLE-CICD: "단일 서버 배포"
166
164
  REACT-CICD: "프론트 배포"
167
165
  REACT-CI: "프론트 빌드"
168
- NEXT-CICD: "프론트 배포"
169
- NEXT-CI: "프론트 빌드"
170
166
  PYTHON-CI: "빌드 검증"
171
167
  FLUTTER-ANDROID-SELFHOSTED: "안드로이드 자체배포"
172
168
  FLUTTER-ANDROID-PLAYSTORE: "플레이스토어 배포"
@@ -508,13 +508,13 @@ def _ai_assisted_minor_upgrade(unclassified_lines: list[str]) -> bool:
508
508
  try:
509
509
  return call_openai_compatible(base_url, api_key, model, prompt).strip() == 'MINOR'
510
510
  except Exception as e:
511
- _warn_engine_failure(f"[warn] bump AI assist failed: {e}")
511
+ _warn_engine_failure("[warn] " + t("changelog.engine_bump_failed", error=e))
512
512
 
513
513
  if _copilot_enabled():
514
514
  try:
515
515
  return call_copilot_cli(prompt).strip() == 'MINOR'
516
516
  except Exception as e:
517
- _warn_engine_failure(f"[warn] bump AI assist (copilot) failed: {e}")
517
+ _warn_engine_failure("[warn] " + t("changelog.engine_bump_copilot_failed", error=e))
518
518
  return False
519
519
 
520
520
 
@@ -866,7 +866,7 @@ def call_copilot_cli(prompt: str) -> str:
866
866
  capture_output=True, text=True, timeout=_COPILOT_TIMEOUT_SECONDS,
867
867
  )
868
868
  if result.returncode != 0:
869
- raise RuntimeError(f"copilot exited with {result.returncode}: {result.stderr.strip()[:200]}")
869
+ raise RuntimeError(t("changelog.engine_copilot_exit", code=result.returncode, detail=result.stderr.strip()[:200]))
870
870
  return result.stdout
871
871
 
872
872
 
@@ -961,9 +961,9 @@ def cmd_ai_summary(commits_file: str, version: str, output_path: str, pr_title:
961
961
  summary_text = candidate
962
962
  engine = "user-api"
963
963
  else:
964
- failures.append(_warn_engine_failure("[warn] user-api failed: empty content in response"))
964
+ failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_user_api_empty")))
965
965
  except Exception as e:
966
- failures.append(_warn_engine_failure(f"[warn] user-api failed: {e}"))
966
+ failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_user_api_failed", error=e)))
967
967
 
968
968
  if summary_text is None and _copilot_enabled():
969
969
  try:
@@ -972,9 +972,9 @@ def cmd_ai_summary(commits_file: str, version: str, output_path: str, pr_title:
972
972
  summary_text = candidate
973
973
  engine = "copilot"
974
974
  else:
975
- failures.append(_warn_engine_failure("[warn] copilot failed: empty or not in the requested Markdown format"))
975
+ failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_copilot_invalid")))
976
976
  except Exception as e:
977
- failures.append(_warn_engine_failure(f"[warn] copilot failed: {e}"))
977
+ failures.append(_warn_engine_failure("[warn] " + t("changelog.engine_copilot_failed", error=e)))
978
978
 
979
979
  if summary_text is None:
980
980
  classified = classify_commits(commit_lines)
@@ -990,7 +990,7 @@ def cmd_ai_summary(commits_file: str, version: str, output_path: str, pr_title:
990
990
  # rescue-print the summary text to stderr. Keep exit code 0
991
991
  # (contract so the workflow pipeline is not cut).
992
992
  write_ok = False
993
- print(f"[warn] output write failed: {e}", file=sys.stderr)
993
+ print("[warn] " + t("changelog.output_write_failed", error=e), file=sys.stderr)
994
994
  print(summary_text, file=sys.stderr)
995
995
 
996
996
  result = {"ok": write_ok, "engine": engine, "output": output_path}