@qlover/fe-release 4.3.1 → 5.0.2
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 +110 -119
- package/dist/cli.cjs +2550 -7401
- package/dist/cli.js +2597 -7472
- package/dist/index.cjs +2534 -5426
- package/dist/index.d.ts +1707 -1096
- package/dist/index.js +2552 -5474
- package/package.json +13 -10
package/README.md
CHANGED
|
@@ -21,21 +21,18 @@
|
|
|
21
21
|
## ✨ 特性
|
|
22
22
|
|
|
23
23
|
- **自动化版本管理**
|
|
24
|
-
|
|
25
24
|
- 基于 `@changesets/cli` 的可靠版本控制
|
|
26
25
|
- 根据变更自动进行版本更新
|
|
27
26
|
- 可配置的版本递增策略
|
|
28
27
|
- 支持语义化版本(Semantic Versioning)
|
|
29
28
|
|
|
30
29
|
- **灵活的发布工作流**
|
|
31
|
-
|
|
32
30
|
- 手动发布流程,提供直接控制
|
|
33
31
|
- 基于 PR 的自动化发布工作流(GitHub)
|
|
34
32
|
- 可自定义的发布策略
|
|
35
33
|
- 支持多环境发布(开发、测试、生产)
|
|
36
34
|
|
|
37
35
|
- **GitHub 集成**
|
|
38
|
-
|
|
39
36
|
- 自动化 PR 创建和管理
|
|
40
37
|
- 智能 PR 标签系统
|
|
41
38
|
- 自动生成发布说明
|
|
@@ -43,7 +40,6 @@
|
|
|
43
40
|
- 支持自动合并和冲突解决
|
|
44
41
|
|
|
45
42
|
- **工作区支持**
|
|
46
|
-
|
|
47
43
|
- 一流的 monorepo 支持
|
|
48
44
|
- 多包发布协调
|
|
49
45
|
- 依赖图感知
|
|
@@ -71,37 +67,31 @@ pnpm add @qlover/fe-release -D
|
|
|
71
67
|
|
|
72
68
|
## 🏃 快速开始
|
|
73
69
|
|
|
74
|
-
1.
|
|
70
|
+
1. **本地创建发布 PR(预览)**
|
|
75
71
|
|
|
76
72
|
```bash
|
|
77
|
-
# 创建发布 PR
|
|
78
|
-
fe-release -
|
|
79
|
-
|
|
80
|
-
# 预览发布(不实际执行)
|
|
81
|
-
fe-release --dry-run
|
|
73
|
+
# 从 master 创建发布 PR(dry-run)
|
|
74
|
+
fe-release -d -V -s master --github.push-change-labels
|
|
82
75
|
|
|
83
|
-
#
|
|
84
|
-
fe-release
|
|
76
|
+
# 指定版本递增
|
|
77
|
+
fe-release -i patch -s master
|
|
78
|
+
fe-release -i minor -s master
|
|
85
79
|
```
|
|
86
80
|
|
|
87
|
-
2.
|
|
81
|
+
2. **Monorepo 选择性发布**
|
|
88
82
|
|
|
89
83
|
```bash
|
|
90
|
-
#
|
|
91
|
-
fe-release
|
|
84
|
+
# 只发布带 changes 标签的包
|
|
85
|
+
fe-release -l "changes:packages/fe-release" -i patch -s master
|
|
92
86
|
|
|
93
|
-
#
|
|
94
|
-
fe-release --
|
|
87
|
+
# 指定包目录
|
|
88
|
+
fe-release --workspaces.packages-directories packages/fe-release,packages/fe-scripts -i patch
|
|
95
89
|
```
|
|
96
90
|
|
|
97
|
-
3.
|
|
91
|
+
3. **仅发布(版本已在 release PR 中更新)**
|
|
98
92
|
|
|
99
93
|
```bash
|
|
100
|
-
|
|
101
|
-
fe-release --env=test -P
|
|
102
|
-
|
|
103
|
-
# 发布到生产环境
|
|
104
|
-
fe-release --env=prod -P
|
|
94
|
+
fe-release --changesetVersion.skip-changeset --changesetVersion.mode publish
|
|
105
95
|
```
|
|
106
96
|
|
|
107
97
|
## 💻 使用方法
|
|
@@ -114,108 +104,132 @@ fe-release [options]
|
|
|
114
104
|
|
|
115
105
|
#### 核心选项
|
|
116
106
|
|
|
117
|
-
| 选项
|
|
118
|
-
|
|
|
119
|
-
| `-v, --version`
|
|
120
|
-
| `-d, --dry-run`
|
|
121
|
-
| `-V, --verbose`
|
|
122
|
-
| `-
|
|
123
|
-
| `-
|
|
124
|
-
| `--env` | 发布环境 | `prod` |
|
|
107
|
+
| 选项 | 描述 | 默认值 |
|
|
108
|
+
| ---------------------------------- | ------------------------ | -------- |
|
|
109
|
+
| `-v, --version` | 显示版本号 | - |
|
|
110
|
+
| `-d, --dry-run` | 预览模式,不实际执行更改 | `false` |
|
|
111
|
+
| `-V, --verbose` | 显示详细日志 | `false` |
|
|
112
|
+
| `-s, --source-branch` | 发布 PR 的目标分支 | `master` |
|
|
113
|
+
| `-i, --changesetVersion.increment` | 版本递增类型 | `patch` |
|
|
125
114
|
|
|
126
115
|
#### 高级选项
|
|
127
116
|
|
|
128
|
-
| 选项
|
|
129
|
-
|
|
|
130
|
-
| `-b, --branch-name`
|
|
131
|
-
| `-
|
|
132
|
-
|
|
|
133
|
-
| `--
|
|
134
|
-
| `--
|
|
135
|
-
|
|
|
117
|
+
| 选项 | 描述 | 默认值 |
|
|
118
|
+
| ------------------------------------------------ | ------------------------------ | ---------------------------------- |
|
|
119
|
+
| `-b, --github.branch-name` | 发布分支名模板 | `release/${repoName}-${releaseId}` |
|
|
120
|
+
| `-l, --workspaces.change-labels` | 变更标签(过滤发布范围) | - |
|
|
121
|
+
| `--workspaces.packages-directories` | 扫描的包目录 | `find-workspaces` |
|
|
122
|
+
| `--github.push-change-labels` | 将 changes 标签附加到发布 PR | `false` |
|
|
123
|
+
| `--github.skip-create-release-pr` | 跳过创建 GitHub PR | `false` |
|
|
124
|
+
| `--changesetVersion.mode` | `version` / `publish` / `both` | `version` |
|
|
125
|
+
| `--changesetVersion.skip-changeset` | 跳过 changeset 文件生成 | `false` |
|
|
126
|
+
| `--changesetVersion.ignore-non-updated-packages` | 恢复仅因依赖而变更的包 | `false` |
|
|
136
127
|
|
|
137
128
|
## ⚙️ 配置
|
|
138
129
|
|
|
139
130
|
### 环境变量
|
|
140
131
|
|
|
141
|
-
| 变量
|
|
142
|
-
|
|
|
143
|
-
| `FE_RELEASE`
|
|
144
|
-
| `FE_RELEASE_BRANCH`
|
|
145
|
-
| `FE_RELEASE_ENV`
|
|
146
|
-
| `FE_RELEASE_TOKEN`
|
|
132
|
+
| 变量 | 描述 | 默认值 |
|
|
133
|
+
| ----------------------------------- | ----------------------------------- | -------- |
|
|
134
|
+
| `FE_RELEASE` | 启用/禁用发布 | `true` |
|
|
135
|
+
| `FE_RELEASE_BRANCH` | 当前工作分支(CI 中设为 `master`) | `master` |
|
|
136
|
+
| `FE_RELEASE_ENV` | 发布环境 | - |
|
|
137
|
+
| `GITHUB_TOKEN` / `FE_RELEASE_TOKEN` | GitHub Token | - |
|
|
138
|
+
| `NPM_TOKEN` | npm 发布令牌 | - |
|
|
147
139
|
|
|
148
140
|
### fe-config.json
|
|
149
141
|
|
|
150
142
|
```json
|
|
151
143
|
{
|
|
152
144
|
"release": {
|
|
153
|
-
"
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
"branchName": "release-${pkgName}-${tagName}",
|
|
157
|
-
"PRTitle": "[${pkgName} Release] Branch:${branch}, Tag:${tagName}, Env:${env}",
|
|
158
|
-
"PRBody": "This PR includes version bump to ${tagName}",
|
|
159
|
-
"packagesDirectories": ["packages/*"],
|
|
160
|
-
"githubPR": {
|
|
161
|
-
"commitArgs": ["--no-verify"],
|
|
162
|
-
"pushChangedLabels": true,
|
|
163
|
-
"releaseName": "Release ${name} v${version}",
|
|
164
|
-
"commitMessage": "chore(tag): ${name} v${version}"
|
|
145
|
+
"changesetVersion": {
|
|
146
|
+
"changesetRoot": ".changeset",
|
|
147
|
+
"ignoreNonUpdatedPackages": false
|
|
165
148
|
},
|
|
166
|
-
"
|
|
167
|
-
"
|
|
168
|
-
|
|
169
|
-
{ "type": "fix", "section": "#### 🐞 Bug Fixes", "hidden": false },
|
|
170
|
-
{ "type": "chore", "section": "#### 🔧 Chores", "hidden": true },
|
|
171
|
-
{
|
|
172
|
-
"type": "docs",
|
|
173
|
-
"section": "#### 📝 Documentation",
|
|
174
|
-
"hidden": false
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
"type": "refactor",
|
|
178
|
-
"section": "#### ♻️ Refactors",
|
|
179
|
-
"hidden": false
|
|
180
|
-
},
|
|
181
|
-
{ "type": "perf", "section": "#### 🚀 Performance", "hidden": false },
|
|
182
|
-
{ "type": "test", "section": "#### 🚨 Tests", "hidden": true },
|
|
183
|
-
{ "type": "style", "section": "#### 🎨 Styles", "hidden": true },
|
|
184
|
-
{ "type": "ci", "section": "#### 🔄 CI", "hidden": true },
|
|
185
|
-
{ "type": "build", "section": "#### 🚧 Build", "hidden": false },
|
|
186
|
-
{ "type": "revert", "section": "#### ⏪ Reverts", "hidden": true },
|
|
187
|
-
{ "type": "release", "section": "#### 🔖 Releases", "hidden": true }
|
|
188
|
-
]
|
|
149
|
+
"github": {
|
|
150
|
+
"label": { "name": "CI-Release" },
|
|
151
|
+
"autoMergeReleasePR": false
|
|
189
152
|
}
|
|
190
153
|
}
|
|
191
154
|
}
|
|
192
155
|
```
|
|
193
156
|
|
|
157
|
+
配置项通过 `release.<plugin>.*` 与 CLI 的 `--<plugin>.*` 对应,详见 `src/cli.ts` 与 `src/defaults.ts`。
|
|
158
|
+
|
|
194
159
|
## 🔄 工作流程
|
|
195
160
|
|
|
196
|
-
|
|
161
|
+
fe-base 采用 **master 单线** 发布:功能合入 `master`,需要发版时打上 `CI-Release`。
|
|
162
|
+
|
|
163
|
+
### 分支与阶段
|
|
197
164
|
|
|
198
|
-
```mermaid
|
|
199
|
-
graph LR
|
|
200
|
-
A[代码变更] --> B[运行 fe-release]
|
|
201
|
-
B --> C[版本更新]
|
|
202
|
-
C --> D[生成更新日志]
|
|
203
|
-
D --> E[创建 Git 标签]
|
|
204
|
-
E --> F[发布到 NPM]
|
|
205
|
-
F --> G[创建 GitHub Release]
|
|
206
165
|
```
|
|
166
|
+
feature/* ──PR──► master ──fe-release──► release/* ──PR──► master ──► npm
|
|
167
|
+
(+ CI-Release)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
| 阶段 | 触发条件 | CI 工作流 | 工具 |
|
|
171
|
+
| -------------- | -------------------------------------------------------------- | ----------------------------------- | ------------------------------------------------- |
|
|
172
|
+
| 1. 功能开发 | PR 目标为 `master` | `general-check.yml` | lint / test / build |
|
|
173
|
+
| 2. 创建发布 PR | 合入 `master` 且带 `CI-Release`(且 head 不是 `release/*`) | `release.yml` → `create-release-pr` | `fe-release`(version 模式,git diff 找包) |
|
|
174
|
+
| 3. 发布 | 发布 PR(`release/* → master`)合并且带 `CI-Release` | `release.yml` → `publish` | `fe-release`(publish 模式,不再 bump 版本) |
|
|
175
|
+
|
|
176
|
+
### 阶段 1:功能 PR(目标分支 `master`)
|
|
177
|
+
|
|
178
|
+
1. 从 `master` 拉功能分支,开发并提交(遵循 Conventional Commits)。
|
|
179
|
+
2. 创建 PR,目标分支为 **`master`**。
|
|
180
|
+
3. CI 自动执行质量检查(lint / test / build)。
|
|
181
|
+
4. 可选:在 PR 上添加版本递增标签 `increment:major` / `increment:minor` / `increment:patch`(默认 patch)。
|
|
182
|
+
|
|
183
|
+
### 阶段 2:创建发布 PR(手动打 `CI-Release` 触发)
|
|
184
|
+
|
|
185
|
+
功能 PR **合并到 master 之前**,在 PR 上添加 **`CI-Release`** 标签(合并时必须仍保留该标签):
|
|
186
|
+
|
|
187
|
+
1. 合并时触发 `release.yml` 的 `create-release-pr` job(`closed` 事件)。
|
|
188
|
+
2. 检出 `master`,运行 `fe-release`(默认 **`changesetVersion` version 模式**):
|
|
189
|
+
- 通过 **git diff** 检测变更包
|
|
190
|
+
- 生成 changelog、更新 `CHANGELOG.md`、 bump 版本号
|
|
191
|
+
3. 推送 `release/<repo>-<id>` 分支,创建指向 **`master`** 的发布 PR(自动带 `CI-Release`)。
|
|
192
|
+
|
|
193
|
+
> 合入 master 时**没有** `CI-Release` 标签 → **不会**自动创建发布 PR。
|
|
194
|
+
> 若已合并但未打标签,可在 Actions 里手动运行 **Release sub packages**(`workflow_dispatch`)。
|
|
195
|
+
|
|
196
|
+
带 **`CI-Release`** 的功能 PR 在打开期间会跳过 `general-check`。
|
|
207
197
|
|
|
208
|
-
### PR
|
|
198
|
+
### 阶段 3:发布(合并发布 PR 到 master)
|
|
199
|
+
|
|
200
|
+
1. 审核并合并带 `CI-Release` 的**发布 PR**(`release/* → master`)到 **`master`**。
|
|
201
|
+
2. `release.yml` 的 `publish` job 运行 `fe-release --changesetVersion.mode publish`:
|
|
202
|
+
- **不再**生成 changelog 或 bump 版本(`skip-changeset`)
|
|
203
|
+
- 打 tag、发布 npm、创建 GitHub Release
|
|
204
|
+
|
|
205
|
+
### 标签说明
|
|
206
|
+
|
|
207
|
+
| 标签 | 来源 | 作用 |
|
|
208
|
+
| ------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------- |
|
|
209
|
+
| `CI-Release` | 手动打在功能 PR 上(触发创建发布 PR);发布 PR 上由 `fe-release` 自动添加 | 触发 version 流程;跳过 general-check;`release/*` 合入 master 后触发 publish |
|
|
210
|
+
| `increment:*` | 手动添加 | 覆盖 semver 递增策略 |
|
|
211
|
+
|
|
212
|
+
> 发布 PR 统一使用 **`CI-Release`** 一个标签即可,无需再单独创建 `Release` 标签。
|
|
213
|
+
|
|
214
|
+
### 手动触发发布
|
|
215
|
+
|
|
216
|
+
在 GitHub Actions 中手动运行 **Release sub packages** 工作流(`workflow_dispatch`),
|
|
217
|
+
会从当前 `master` 创建发布 PR,无需等待某次功能合并。
|
|
218
|
+
|
|
219
|
+
### 流程图
|
|
209
220
|
|
|
210
221
|
```mermaid
|
|
211
|
-
graph
|
|
212
|
-
A[
|
|
213
|
-
B
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
222
|
+
graph TD
|
|
223
|
+
A[feature 分支] -->|PR| B[master]
|
|
224
|
+
B -->|lint test build| B
|
|
225
|
+
B -->|合并且带 CI-Release| C[create-release-pr]
|
|
226
|
+
C -->|fe-release git diff| D[release/* → master PR]
|
|
227
|
+
D -->|自动打 CI-Release| E[审核发布 PR]
|
|
228
|
+
E -->|合并到 master| F[publish → npm + GitHub Release]
|
|
217
229
|
```
|
|
218
230
|
|
|
231
|
+
更完整的模块说明见 `src/index.ts` 顶部注释。
|
|
232
|
+
|
|
219
233
|
## 🔍 常见问题
|
|
220
234
|
|
|
221
235
|
### 常见问题
|
|
@@ -227,13 +241,11 @@ graph LR
|
|
|
227
241
|
```
|
|
228
242
|
|
|
229
243
|
解决方案:
|
|
230
|
-
|
|
231
244
|
- 检查 `FE_RELEASE` 环境变量
|
|
232
245
|
- 确认是否有需要发布的变更
|
|
233
246
|
- 验证包版本是否需要更新
|
|
234
247
|
|
|
235
248
|
2. **PR 创建失败**
|
|
236
|
-
|
|
237
249
|
- 验证 GitHub token 权限
|
|
238
250
|
- 检查仓库访问权限
|
|
239
251
|
- 确认分支是否存在
|
|
@@ -252,24 +264,3 @@ graph LR
|
|
|
252
264
|
```bash
|
|
253
265
|
fe-release -V
|
|
254
266
|
```
|
|
255
|
-
|
|
256
|
-
## 🤝 贡献指南
|
|
257
|
-
|
|
258
|
-
1. Fork 本仓库
|
|
259
|
-
2. 创建特性分支
|
|
260
|
-
3. 提交变更
|
|
261
|
-
4. 推送到分支
|
|
262
|
-
5. 创建 Pull Request
|
|
263
|
-
|
|
264
|
-
## 📄 许可证
|
|
265
|
-
|
|
266
|
-
本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件
|
|
267
|
-
|
|
268
|
-
## 🙏 致谢
|
|
269
|
-
|
|
270
|
-
- [@changesets/cli](https://github.com/changesets/changesets) 团队
|
|
271
|
-
- 所有项目贡献者
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
更多信息,请访问我们的[文档](https://qlover.github.io/fe-release)。
|