project-auto-wizard 0.12.2 → 0.13.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 (86) hide show
  1. package/README.ja.md +165 -0
  2. package/README.ko.md +165 -0
  3. package/README.md +107 -286
  4. package/README.zh-CN.md +165 -0
  5. package/bin/project-auto-wizard.js +1 -2
  6. package/package.json +7 -3
  7. package/payload/config/breaking-changes.json +24 -0
  8. package/payload/config/wizard-prompts.yml +45 -0
  9. package/payload/scripts/changelog_manager.py +141 -46
  10. package/payload/scripts/issue_helper.py +34 -5
  11. package/payload/scripts/version_manager.py +397 -97
  12. package/payload/version.yml.template +4 -2
  13. package/payload/workflows/common/PROJECT-COMMON-AI-PR-SUMMARY.yaml +39 -9
  14. package/payload/workflows/common/PROJECT-COMMON-AUTO-CHANGELOG-CONTROL.yaml +165 -38
  15. package/payload/workflows/common/PROJECT-COMMON-README-VERSION-UPDATE.yaml +14 -5
  16. package/payload/workflows/common/PROJECT-COMMON-RELEASE-PUBLISH.yaml +220 -6
  17. package/payload/workflows/common/PROJECT-COMMON-VERSION-CONTROL.yaml +89 -3
  18. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-FIREBASE-CICD.yaml +78 -16
  19. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-PLAYSTORE-CICD.yaml +72 -16
  20. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-SELFHOSTED-CICD.yaml +62 -20
  21. package/payload/workflows/flutter/PROJECT-FLUTTER-ANDROID-TEST-APK.yaml +51 -13
  22. package/payload/workflows/flutter/PROJECT-FLUTTER-CI.yaml +75 -11
  23. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TEST-TESTFLIGHT.yaml +52 -3
  24. package/payload/workflows/flutter/PROJECT-FLUTTER-IOS-TESTFLIGHT.yaml +60 -11
  25. package/payload/workflows/go/PROJECT-GO-CI.yaml +10 -1
  26. package/payload/workflows/go/PROJECT-GO-PR-PREVIEW.yaml +148 -28
  27. package/payload/workflows/go/PROJECT-GO-SIMPLE-CICD.yaml +45 -4
  28. package/payload/workflows/next/PROJECT-NEXT-CI.yaml +25 -3
  29. package/payload/workflows/next/PROJECT-NEXT-CICD.yaml +83 -9
  30. package/payload/workflows/python/PROJECT-PYTHON-CI.yaml +70 -6
  31. package/payload/workflows/python/PROJECT-PYTHON-PR-PREVIEW.yaml +148 -28
  32. package/payload/workflows/python/PROJECT-PYTHON-SIMPLE-CICD.yaml +45 -4
  33. package/payload/workflows/react/PROJECT-REACT-CI.yaml +25 -3
  34. package/payload/workflows/react/PROJECT-REACT-CICD.yaml +84 -10
  35. package/payload/workflows/spring/PROJECT-SPRING-CI.yml +13 -3
  36. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-NGINX-CICD.yaml +47 -5
  37. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-NONSTOP-TRAEFIK-CICD.yaml +47 -5
  38. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-PR-PREVIEW.yaml +153 -30
  39. package/payload/workflows/spring/server-deploy/PROJECT-SPRING-SIMPLE-CICD.yaml +47 -5
  40. package/src/cli/args.js +33 -24
  41. package/src/cli/help.js +16 -4
  42. package/src/commands/doctor.js +17 -10
  43. package/src/commands/dry-run.js +54 -1
  44. package/src/commands/full.js +127 -50
  45. package/src/commands/interactive-flutter.js +1 -1
  46. package/src/commands/interactive.js +124 -56
  47. package/src/commands/purge.js +59 -17
  48. package/src/commands/status.js +16 -1
  49. package/src/commands/uninstall.js +58 -13
  50. package/src/context.js +5 -5
  51. package/src/core/baseline.js +20 -5
  52. package/src/core/branches.js +19 -1
  53. package/src/core/branding.js +1 -1
  54. package/src/core/breaking-check.js +14 -19
  55. package/src/core/breaking.js +7 -3
  56. package/src/core/copy/gitignore.js +20 -12
  57. package/src/core/copy/readme.js +24 -5
  58. package/src/core/copy/simple.js +52 -13
  59. package/src/core/copy/workflows.js +90 -47
  60. package/src/core/deploy-style.js +83 -11
  61. package/src/core/detect-fs.js +127 -24
  62. package/src/core/detect.js +131 -47
  63. package/src/core/errors.js +3 -0
  64. package/src/core/flutter-options.js +4 -3
  65. package/src/core/fsutil.js +23 -6
  66. package/src/core/logger.js +55 -19
  67. package/src/core/paths-resolve.js +50 -47
  68. package/src/core/paths.js +26 -1
  69. package/src/core/release-options.js +23 -0
  70. package/src/core/removal-plan.js +75 -19
  71. package/src/core/types.js +113 -0
  72. package/src/core/verify.js +85 -19
  73. package/src/core/version-yml.js +42 -8
  74. package/src/core/wizard-env.js +21 -14
  75. package/src/core/wizard-labels.js +34 -25
  76. package/src/index.js +122 -49
  77. package/src/ui/ansi.js +3 -1
  78. package/src/ui/banner.js +12 -8
  79. package/src/ui/env-plan.js +68 -44
  80. package/src/ui/prompts.js +22 -12
  81. package/src/ui/readline-engine.js +109 -22
  82. package/src/ui/status-cards.js +10 -5
  83. package/src/ui/summary.js +71 -33
  84. package/payload/scripts/__pycache__/changelog_manager.cpython-314.pyc +0 -0
  85. package/payload/scripts/__pycache__/issue_helper.cpython-314.pyc +0 -0
  86. package/payload/scripts/__pycache__/version_manager.cpython-314.pyc +0 -0
@@ -0,0 +1,165 @@
1
+ <div align="center">
2
+
3
+ [English](README.md) · [한국어](README.ko.md) · **简体中文** · [日本語](README.ja.md)
4
+
5
+ # project-auto-wizard
6
+
7
+ **一条命令,为你的仓库配置版本管理、CHANGELOG、GitHub Release 和 CI/CD。**
8
+
9
+ 它安装的全部内容都是你自己仓库里的普通 GitHub Actions。不需要 API 密钥,也没有托管服务。
10
+
11
+ [文档](https://twin-fang.github.io/project-auto-wizard/zh-cn/) · [快速开始](#quickstart) · [变更日志](CHANGELOG.md)
12
+
13
+ [![CI](https://github.com/Twin-Fang/project-auto-wizard/actions/workflows/CI.yaml/badge.svg)](https://github.com/Twin-Fang/project-auto-wizard/actions/workflows/CI.yaml)
14
+ [![npm version](https://img.shields.io/npm/v/project-auto-wizard)](https://www.npmjs.com/package/project-auto-wizard)
15
+ [![npm downloads](https://img.shields.io/npm/dm/project-auto-wizard)](https://www.npmjs.com/package/project-auto-wizard)
16
+ [![license](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
17
+ [![node](https://img.shields.io/badge/node-%3E%3D20.12-brightgreen)](package.json)
18
+
19
+ <img src="https://raw.githubusercontent.com/Twin-Fang/project-auto-wizard/main/assets/demo/install.gif" alt="使用向导为 Spring 项目安装发布自动化" width="800">
20
+
21
+ </div>
22
+
23
+ ## 最新版本
24
+
25
+ 最新版本和完整的变更记录见 [CHANGELOG.md](CHANGELOG.md)。
26
+
27
+ ## 为什么做这个
28
+
29
+ 每个新项目在写第一个功能之前,都要先做同样的杂事:决定版本怎么递增,维护 CHANGELOG,撰写发布说明,给发布打标签,再把上一个项目的 CI/CD 工作流复制过来修修改改。这要花几个小时,而且每个仓库最后都会略有不同。
30
+
31
+ project-auto-wizard 用几个提问一次性完成这些配置。之后只要合并发布 PR,就能完成一次发布。
32
+
33
+ <a id="quickstart"></a>
34
+
35
+ ## 快速开始
36
+
37
+ 在仓库根目录运行(需要 Node.js 20.12 或更高版本):
38
+
39
+ ```bash
40
+ npx project-auto-wizard
41
+ ```
42
+
43
+ 它会检测项目类型,询问几个问题(分支策略、部署方式、是否使用 Copilot 生成摘要),然后写入文件。在 CI 或脚本中,可以用非交互方式运行:
44
+
45
+ ```bash
46
+ npx project-auto-wizard --mode full --force --type spring,react
47
+ npx project-auto-wizard --mode full --force --type node --dry-run # preview only, writes nothing
48
+ ```
49
+
50
+ 提交生成的文件并 push。`npx project-auto-wizard --mode doctor` 会检查工作流所依赖的仓库设置。
51
+
52
+ ## 安装内容
53
+
54
+ | 安装项 | 用途 |
55
+ |---|---|
56
+ | `.github/workflows/PROJECT-COMMON-*.yaml` | 发布自动化:版本递增、发布 PR 说明、CHANGELOG、标签和 GitHub Release、README 版本行、PR 摘要评论、为新 issue 建议分支名 |
57
+ | `.github/workflows/PROJECT-<TYPE>-*` | 对应技术栈(Spring、Flutter、React、Next.js、Python、Go)的 CI/CD |
58
+ | `.github/scripts/*.py` | 工作流背后的逻辑,仅使用标准库的 Python |
59
+ | `version.yml` | 版本、项目类型、路径、分支和选项的唯一来源 |
60
+ | `README.md` 版本部分 | 每次发布后自动更新 |
61
+
62
+ 这些文件归你所有,可以随意阅读和修改。再次运行向导会更新它们:如果上游版本没有变化,你修改过的文件会被保留;如果双方都有变化,向导会询问是保留你的文件、备份后替换,还是把新版本放在旁边。
63
+
64
+ 默认的 `pr-flow` 策略下,一次发布的流程如下:
65
+
66
+ ```
67
+ feature PRs ──▶ develop ──▶ release PR (develop → main)
68
+ │ next version from commit types: feat → minor, ! → major, else patch
69
+ │ release notes written, CHANGELOG.md / CHANGELOG.json updated
70
+ ▼
71
+ automerge ──▶ tag vX.Y.Z + GitHub Release ──▶ README version updated
72
+ ```
73
+
74
+ 使用 `trunk-based`(发布分支 = 开发分支)时,每次 push 到发布分支,都会在一个工作流中执行相同的步骤。
75
+
76
+ 发布说明默认基于规则生成。你可以开启 GitHub Copilot(消耗你的 Copilot AI Credits),或者指向任何兼容 OpenAI 的 API。如果模型不可用或调用失败,会回退到规则生成,因此发布不会被摘要步骤卡住。
77
+
78
+ ## 使用前后对比
79
+
80
+ | | 不使用 | 使用 project-auto-wizard |
81
+ |---|---|---|
82
+ | 初始配置 | 从旧仓库复制工作流并修改 | 运行 `npx project-auto-wizard`,回答几个问题 |
83
+ | 下一个版本号 | 手动决定并输入 | 根据发布 PR 中的提交类型得出 |
84
+ | CHANGELOG | 手写,经常被跳过 | 发布 PR 合并时更新 |
85
+ | 标签和 Release | 手动创建 | 合并后自动创建 |
86
+ | 各技术栈的 CI/CD | 每个项目单独编写 | 按检测到的类型安装 |
87
+ | AI 摘要 | 需要 API 密钥和自定义脚本 | 可选;基于规则的方式无需密钥 |
88
+
89
+ ## 与其他工具的比较
90
+
91
+ | | project-auto-wizard | release-please | semantic-release | changesets |
92
+ |---|---|---|---|---|
93
+ | 接入方式 | 安装可编辑的工作流文件 | GitHub Action + 配置 | 在 CI 中运行的 npm 包 + 插件 | CLI + GitHub Action |
94
+ | 版本决定依据 | 提交类型(非 Conventional 的提交 → patch) | Conventional Commits | Conventional Commits(可配置) | 开发者编写的 changeset 文件 |
95
+ | 发布 PR | 有(或 trunk-based) | 有 | 没有,push 时直接发布 | 有("Version Packages") |
96
+ | 发布到 npm / PyPI | 否 | 否 | 是,通过插件 | 是(npm) |
97
+ | 包含各技术栈 CI/CD | 是,按项目类型 | 否 | 否 | 否 |
98
+ | Monorepo | 按类型划分路径,共用一个版本 | 各包独立版本 | 社区插件 | 各包独立版本 |
99
+
100
+ 其他工具做得更好的地方:
101
+
102
+ - **release-please** 成熟且被广泛使用,能更新多种生态的版本文件,并支持 monorepo 中独立版本的包。
103
+ - **semantic-release** 无需手动步骤即可发布到 npm 等仓库,并且拥有庞大的插件生态。
104
+ - **changesets** 最适合发布多个包的 JavaScript monorepo,变更条目由人来写,而不是从提交中推导。
105
+
106
+ ## 何时使用,何时不用
107
+
108
+ 适合使用的情况:
109
+
110
+ - 你刚开始一个仓库,希望从第一天起就能发布
111
+ - 你的团队把 `develop` 合并到 `main`,并希望有带说明和 CHANGELOG 的发布 PR
112
+ - 你有 Spring、Flutter、React、Next.js、Python 或 Go 项目,想一次配置好 CI/CD 和发布自动化
113
+ - 一个仓库里有多个技术栈(例如 Spring 后端和 React 前端),并共用一个版本
114
+
115
+ 不适合的情况:
116
+
117
+ - 单个包已经用 release-please 或 semantic-release 发布得很好
118
+ - 发布本身必须推送到包仓库(请在 Release 事件上添加你自己的工作流,就像本仓库发布 npm 那样;这需要 `WORKFLOW_PAT`,因为用 `GITHUB_TOKEN` 创建的 Release 不会触发其他工作流)
119
+ - 你的包需要独立的版本号
120
+ - 仓库不在 GitHub 上
121
+
122
+ ## 支持的项目类型
123
+
124
+ | 类型 | 检测依据 | 在发布自动化之外额外安装 |
125
+ |---|---|---|
126
+ | `spring` | `build.gradle`、`build.gradle.kts`、`pom.xml` | CI、服务器部署(单台服务器 / Nginx 或 Traefik 零停机)、PR 预览 |
127
+ | `flutter` | `pubspec.yaml` | CI、Android(Firebase、Play Store、自托管、测试 APK)、iOS TestFlight |
128
+ | `react`、`next` | `package.json` 的 dependencies | CI、CI + CD |
129
+ | `python` | `pyproject.toml`、`setup.py`、`requirements.txt` | CI、PR 预览、服务器部署 |
130
+ | `go` | `go.mod` | CI、PR 预览、服务器部署 |
131
+ | `node`、`react-native`、`react-native-expo`、`basic` | `package.json` / 兜底 | 仅发布自动化 |
132
+
133
+ 一个仓库里可以有多种类型(`--type spring,react`),monorepo 的子目录用 `--paths "flutter=app,react=client"` 指定。
134
+
135
+ <a id="post-install"></a>
136
+
137
+ ## 安装之后
138
+
139
+ | 事项 | 需要做什么 |
140
+ |---|---|
141
+ | Workflow permissions | 已安装的工作流会自行声明所需权限。只有当你自己的工作流依赖默认值时,才需要把 Settings → Actions → General → Workflow permissions 设为 **Read and write permissions** |
142
+ | Merge commit | 允许 merge commit,发布 PR 才能 automerge |
143
+ | `WORKFLOW_PAT`(可选) | 没有它时,`GITHUB_TOKEN` 回退方案会在约 20 秒后完成发布,包括发布分支上的部署工作流。只有当你自己添加了由 Release 事件触发的工作流时才需要。请用 bot 或 machine 账号签发(scopes:`repo`、`workflow`) |
144
+ | Copilot 摘要(可选) | 默认关闭。会消耗 Copilot AI Credits;组织需要允许向组织计费的 Copilot CLI |
145
+
146
+ <a id="flutter-store"></a>
147
+
148
+ Flutter 商店部署(Play Store、Firebase、TestFlight)的设置见[文档站点的 Flutter 页面](https://twin-fang.github.io/project-auto-wizard/project-types/flutter/)。
149
+
150
+ ## 文档
151
+
152
+ 完整文档位于 [twin-fang.github.io/project-auto-wizard](https://twin-fang.github.io/project-auto-wizard/zh-cn/),提供英文和韩文版本。简体中文和日文目前涵盖首页和快速开始,其余页面显示英文。内容包括:
153
+
154
+ - 所有 CLI 选项、`--mode status`、`--mode doctor`、`--dry-run` 和 `--mode uninstall`
155
+ - Flutter 商店部署、部署模式、所需的 secret 以及 `ExportOptions.plist`
156
+ - 发布说明引擎链和 Copilot 计费
157
+ - 各类型的工作流详情、运行日志、设计原则和架构
158
+
159
+ ## 参与贡献
160
+
161
+ 欢迎提交 issue 和 pull request。请从 `develop` 创建分支,并向 `develop` 发起 PR;环境搭建和测试(`npm test`)见 [CONTRIBUTING.md](CONTRIBUTING.md)。本仓库使用它自己安装的工作流来发布自身。
162
+
163
+ ## 许可证
164
+
165
+ [MIT](LICENSE)
@@ -14,6 +14,5 @@ const indexPath = join(here, "..", "src", "index.js");
14
14
  const { run } = await import(pathToFileURL(indexPath).href);
15
15
 
16
16
  const code = await run(process.argv.slice(2), { cwd: process.cwd() });
17
- // process.exit() 금지 — fetch(undici) keep-alive 소켓·타이머와 경합해
18
- // Windows libuv assertion(src/win/async.c)으로 비정상 종료(127)한다. 실측 확인.
17
+ // process.exit() 대신 exitCode — 파이프로 연결된 stdout/stderr가 끝까지 flush된 뒤 종료되게 한다.
19
18
  process.exitCode = code;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "project-auto-wizard",
3
- "version": "0.12.2",
3
+ "version": "0.13.0",
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",
@@ -13,12 +13,16 @@
13
13
  "files": [
14
14
  "bin/",
15
15
  "src/",
16
- "payload/"
16
+ "payload/",
17
+ "!**/__pycache__/",
18
+ "!**/*.pyc"
17
19
  ],
18
20
  "scripts": {
19
21
  "test": "npm run test:node && npm run test:py",
20
22
  "test:node": "node --test --test-concurrency=1",
21
- "test:py": "node scripts/run-py-tests.mjs"
23
+ "test:py": "node scripts/run-py-tests.mjs",
24
+ "sync:dogfood": "node scripts/sync-dogfood.mjs",
25
+ "sync:dogfood:check": "node scripts/sync-dogfood.mjs --check"
22
26
  },
23
27
  "repository": {
24
28
  "type": "git",
@@ -2,23 +2,47 @@
2
2
  "0.10.1": [
3
3
  {
4
4
  "severity": "warning",
5
+ "types": ["flutter"],
5
6
  "title": "Flutter SELFHOSTED·TEST-APK가 flutter build를 직접 실행",
6
7
  "message": "SELFHOSTED·TEST-APK가 fastlane build 대신 flutter build apk --release를 직접 실행하고 Ruby·fastlane 설치 스텝이 사라집니다. fastlane은 스토어 배포 3종(PLAYSTORE·IOS-TESTFLIGHT·IOS-TEST-TESTFLIGHT)에서만 사용합니다."
7
8
  },
8
9
  {
9
10
  "severity": "warning",
11
+ "types": ["flutter"],
10
12
  "title": "Flutter 환경변수 기본 방식이 dart-define으로 변경",
11
13
  "message": "신규 설치의 기본값이 dart-define(--dart-define-from-file)으로 바뀝니다. 기존 설치는 version.yml에 저장값이 없으면 dotenv(.env 생성)를 유지하며, 바꾸려면 마법사 '수정하기 > 환경변수 방식' 또는 --flutter-env-mode를 쓰세요."
12
14
  },
13
15
  {
14
16
  "severity": "warning",
17
+ "types": ["flutter"],
15
18
  "title": "Flutter 워크플로우가 FLUTTER_PROJECT_DIR 기준으로 동작",
16
19
  "message": "FIREBASE·SELFHOSTED·CI·TEST-APK·IOS-TEST-TESTFLIGHT도 PLAYSTORE처럼 Flutter 루트(FLUTTER_PROJECT_DIR)에서 동작합니다. Flutter가 하위 폴더에 있는 모노레포는 --paths flutter=<경로>로 지정하세요."
17
20
  },
18
21
  {
19
22
  "severity": "warning",
23
+ "types": ["flutter", "go", "next", "python", "react", "spring"],
20
24
  "title": "모노레포 CI required check는 ci-gate 하나만 등록",
21
25
  "message": "CI 워크플로우(Flutter·Go·Next·Python·React·Spring CI)는 항상 실행되고 변경이 없으면 job을 건너뜁니다. required check로 쓰려면 개별 job이 아닌 CI Gate(ci-gate) 하나만 등록하세요."
22
26
  }
27
+ ],
28
+ "0.12.0": [
29
+ {
30
+ "severity": "warning",
31
+ "title": "AI 요약이 GitHub Copilot opt-in으로 바뀌어 기본으로 꺼짐",
32
+ "message": "GitHub Models 종료로 AI 요약 엔진이 GitHub Copilot CLI로 바뀌었고, AI Credits를 소비하므로 기본값이 꺼짐(copilot_ai: false)입니다. 업데이트 후 릴리스 노트·PR 요약은 규칙 기반으로 만들어집니다. 계속 쓰려면 --copilot으로 다시 설치하거나 version.yml의 copilot_ai를 true로 바꾼 뒤 다시 실행하세요."
33
+ }
34
+ ],
35
+ "0.12.1": [
36
+ {
37
+ "severity": "warning",
38
+ "types": ["spring"],
39
+ "title": "Spring nexus·GitHub Packages publish 옵션 제거",
40
+ "message": "PROJECT-SPRING-NEXUS-PUBLISH.yml·PROJECT-SPRING-GITHUB-PACKAGES-PUBLISH.yml을 더 이상 설치하지 않고, PROJECT-SPRING-NEXUS-CI.yml은 PROJECT-SPRING-CI.yml로 바뀌어 항상 설치됩니다. 업데이트하면 손대지 않은 이전 파일은 삭제되고 수정한 파일은 .bak으로 옮겨집니다. 계속 배포하려면 .bak을 직접 관리하는 워크플로우로 옮기세요."
41
+ },
42
+ {
43
+ "severity": "warning",
44
+ "title": "Secret 서버 백업 워크플로우(secret_backup 옵션) 제거",
45
+ "message": "PROJECT-COMMON-SECRET-FILE-UPLOAD.yaml을 더 이상 설치하지 않습니다. 설치해 두었다면 업데이트 때 손대지 않은 파일은 삭제되고 수정한 파일은 .bak으로 옮겨집니다. 계속 쓰려면 .bak을 직접 관리하는 워크플로우로 옮기세요."
46
+ }
23
47
  ]
24
48
  }
@@ -50,6 +50,51 @@ SSH_AUTH_METHOD:
50
50
  help: "배포 서버 접속 방식입니다. 둘 중 하나를 그대로 입력하세요."
51
51
  example: "password 또는 key"
52
52
 
53
+ SSH_PORT:
54
+ label: "SSH 포트"
55
+ help: "배포 서버에서 SSH가 열려 있는 포트입니다 (일반 서버는 보통 22, NAS 등은 따로 정한 포트)."
56
+ example: "22"
57
+
58
+ BLUE_PORT:
59
+ label: "무중단 배포 Blue 포트"
60
+ help: "Blue/Green으로 번갈아 뜨는 컨테이너 중 Blue 쪽 호스트 포트입니다. 다른 서비스·Green 포트와 겹치지 않게 정하세요."
61
+ example: "8080"
62
+
63
+ GREEN_PORT:
64
+ label: "무중단 배포 Green 포트"
65
+ help: "Blue/Green으로 번갈아 뜨는 컨테이너 중 Green 쪽 호스트 포트입니다. Blue 포트와 달라야 합니다."
66
+ example: "8081"
67
+
68
+ NGINX_RP_CONF:
69
+ label: "Nginx 리버스 프록시 설정 파일 경로"
70
+ help: "배포 때 proxy_pass 포트를 Blue/Green으로 바꿔 쓰는 서버의 Nginx 설정 파일입니다. 경로가 틀리면 무중단 전환이 동작하지 않습니다."
71
+ example: "/etc/nginx/sites-enabled/my-service.conf"
72
+
73
+ NGINX_BACKUP_DIR:
74
+ label: "Nginx 설정 백업 폴더"
75
+ help: "설정 파일을 바꾸기 전에 백업을 남길 서버의 폴더입니다."
76
+ example: "/volume1/projects/nginx/backups"
77
+
78
+ JAR_PATH:
79
+ label: "빌드 산출물(JAR) 경로"
80
+ help: "Gradle 빌드 후 PR 프리뷰 컨테이너에 넣을 JAR 파일 경로입니다 (프로젝트 루트 기준, 와일드카드 가능)."
81
+ example: "build/libs/*.jar"
82
+
83
+ PREVIEW_DOMAIN_SUFFIX:
84
+ label: "PR 프리뷰 도메인 접미사"
85
+ help: "PR마다 뜨는 프리뷰 서버 주소의 뒷부분입니다. 이 도메인의 와일드카드 DNS가 서버(Traefik)를 가리켜야 합니다."
86
+ example: "pr.example.com"
87
+
88
+ PROJECT_TARGET_DIR:
89
+ label: "PR 프리뷰 호스트 볼륨 경로"
90
+ help: "PR 프리뷰 컨테이너에 마운트할 서버의 데이터 디렉토리입니다. 비워 두면 마운트하지 않습니다."
91
+ example: "/volume1/projects/my-service"
92
+
93
+ PROJECT_MNT_DIR:
94
+ label: "PR 프리뷰 컨테이너 마운트 경로"
95
+ help: "위 호스트 볼륨이 PR 프리뷰 컨테이너 안에서 보일 위치입니다."
96
+ example: "/mnt/my-service"
97
+
53
98
  ISSUE_HELPER_CREATE_BRANCH:
54
99
  label: "이슈 생성 시 브랜치 자동 생성"
55
100
  help: "이슈가 열리면 base 브랜치 기준으로 브랜치를 자동으로 만듭니다. 원치 않으면 기본값(아니오)을 그대로 두세요."