@peiyanlu/release 0.0.3 → 0.0.5
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 +147 -20
- package/dist/cli.mjs +302 -452
- package/dist/index.d.mts +35 -43
- package/package.json +14 -11
- package/dist/index.cjs +0 -26
- package/dist/index.d.cts +0 -166
package/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# Release Project
|
|
2
2
|
|
|
3
3
|
<p>
|
|
4
|
-
<a href="https://www.npmjs.com/package/@peiyanlu/
|
|
5
|
-
<img src="https://img.shields.io/badge/npm-@peiyanlu/
|
|
4
|
+
<a href="https://www.npmjs.com/package/@peiyanlu/release" target="_blank">
|
|
5
|
+
<img src="https://img.shields.io/badge/npm-@peiyanlu/release-blue.svg?logo=npm" alt="NPM Package" />
|
|
6
6
|
</a>
|
|
7
|
-
<a href="https://www.npmjs.com/package/@peiyanlu/
|
|
8
|
-
<img src="https://img.shields.io/npm/v/@peiyanlu/
|
|
7
|
+
<a href="https://www.npmjs.com/package/@peiyanlu/release" target="_blank">
|
|
8
|
+
<img src="https://img.shields.io/npm/v/@peiyanlu/release.svg" alt="NPM Version" />
|
|
9
9
|
</a>
|
|
10
|
-
<a href="https://www.npmjs.com/package/@peiyanlu/
|
|
11
|
-
<img src="https://img.shields.io/npm/l/@peiyanlu/
|
|
10
|
+
<a href="https://www.npmjs.com/package/@peiyanlu/release" target="_blank">
|
|
11
|
+
<img src="https://img.shields.io/npm/l/@peiyanlu/release.svg" alt="Package License" />
|
|
12
12
|
</a>
|
|
13
|
-
<a href="https://www.npmjs.com/package/@peiyanlu/
|
|
14
|
-
<img src="https://img.shields.io/npm/dm/@peiyanlu/
|
|
13
|
+
<a href="https://www.npmjs.com/package/@peiyanlu/release" target="_blank">
|
|
14
|
+
<img src="https://img.shields.io/npm/dm/@peiyanlu/release.svg" alt="NPM Downloads" />
|
|
15
15
|
</a>
|
|
16
16
|
</p>
|
|
17
17
|
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
- [**Git**:暂存 → 提交 → 打 Tag → 推送][3]
|
|
25
25
|
- [**发布到 npm**][4]
|
|
26
26
|
- [**GitHub**:创建 Release][5]
|
|
27
|
+
- [**Monorepo**][6]
|
|
27
28
|
|
|
28
29
|
## 安装
|
|
29
30
|
|
|
@@ -35,16 +36,103 @@ yarn add -D @peiyanlu/release
|
|
|
35
36
|
pnpm add -D @peiyanlu/release
|
|
36
37
|
```
|
|
37
38
|
|
|
39
|
+
## CLI
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
release [release-type] [options]
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
`release-type` 用于指定版本升级类型,支持:
|
|
46
|
+
|
|
47
|
+
- `patch`:Bug 修复版本(默认)
|
|
48
|
+
- `minor`:向后兼容的新功能
|
|
49
|
+
- `major`:不向后兼容的破坏性更新
|
|
50
|
+
|
|
51
|
+
当未传入 `release-type` 时,默认使用 `patch`
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pnpm release minor --ci
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### 通用参数
|
|
58
|
+
|
|
59
|
+
| 参数 | 说明 |
|
|
60
|
+
|--------------------|------------------------------------------------------------|
|
|
61
|
+
| `-v, --version` | 输出当前 CLI 版本并退出 |
|
|
62
|
+
| `-h, --help` | 显示帮助信息 |
|
|
63
|
+
| `-n, --dry-run` | 空跑模式,展示将要执行的发布流程但不做任何修改 |
|
|
64
|
+
| `--show-release` | 打印即将发布的版本号并退出 |
|
|
65
|
+
| `--show-changelog` | 打印生成的 Changelog 并退出 |
|
|
66
|
+
| `--ci` | 启用 CI 模式:禁用交互提示,缺少必要参数时直接失败;GitHub Actions 等 CI/CD 环境中默认启用 |
|
|
67
|
+
|
|
68
|
+
### Monorepo / CI 相关参数
|
|
69
|
+
|
|
70
|
+
| 参数 | 说明 |
|
|
71
|
+
|-----------------------|----------------------------------|
|
|
72
|
+
| `-p, --package <pkg>` | 指定要发布的子包名称(仅用于 Monorepo 的 CI 场景) |
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
pnpm release minor --ci --package test-a
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### npm 发布相关参数
|
|
79
|
+
|
|
80
|
+
| 参数 | 说明 |
|
|
81
|
+
|----------------|--------------------------------|
|
|
82
|
+
| `--otp <code>` | npm 发布时使用的一次性验证码(用于开启 2FA 的账户) |
|
|
83
|
+
|
|
84
|
+
> 当使用 **Trusted Publishing(OIDC)** 时,通常无需提供 `--otp`。
|
|
85
|
+
|
|
86
|
+
|
|
38
87
|
## 配置
|
|
39
88
|
|
|
40
|
-
|
|
89
|
+
发布流程可以通过配置文件进行自定义。
|
|
90
|
+
如果项目中**未提供配置文件**,工具会自动使用**内置默认配置**。
|
|
91
|
+
|
|
92
|
+
默认配置适用于 **单仓库(Single Repo)** 项目。
|
|
93
|
+
当项目为 **Monorepo** 结构时,**必须显式提供配置文件**,并开启 Monorepo 模式以正确识别各个子包。
|
|
41
94
|
|
|
42
95
|
支持的配置文件格式:
|
|
43
96
|
|
|
44
97
|
```
|
|
45
|
-
release.config.{ts,mts,
|
|
98
|
+
release.config.{ts,mts,js,mjs}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
示例配置:
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
// release.config.ts
|
|
105
|
+
import { defineConfig } from '@peiyanlu/release'
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
export default defineConfig({
|
|
109
|
+
isMonorepo: false,
|
|
110
|
+
packages: [],
|
|
111
|
+
getPkgDir: (pkg) => `.`,
|
|
112
|
+
toTag: (pkg: string, version: string) => `v${ version }`,
|
|
113
|
+
tagPrefix: undefined,
|
|
114
|
+
|
|
115
|
+
git: {
|
|
116
|
+
commit: true,
|
|
117
|
+
tag: true,
|
|
118
|
+
push: true,
|
|
119
|
+
commitMessage: 'chore(release): ${tag}',
|
|
120
|
+
tagMessage: '${tag}',
|
|
121
|
+
},
|
|
122
|
+
npm: {
|
|
123
|
+
publish: true,
|
|
124
|
+
},
|
|
125
|
+
github: {
|
|
126
|
+
release: true,
|
|
127
|
+
releaseName: '${tag}',
|
|
128
|
+
},
|
|
129
|
+
})
|
|
46
130
|
```
|
|
47
131
|
|
|
132
|
+
### Monorepo 配置
|
|
133
|
+
|
|
134
|
+
在 Monorepo 场景下,需要显式声明仓库结构、子包列表以及 Tag / Changelog 的生成规则。
|
|
135
|
+
|
|
48
136
|
示例配置:
|
|
49
137
|
|
|
50
138
|
```ts
|
|
@@ -53,20 +141,55 @@ import { defineConfig } from '@peiyanlu/release'
|
|
|
53
141
|
|
|
54
142
|
|
|
55
143
|
export default defineConfig({
|
|
144
|
+
isMonorepo: true,
|
|
145
|
+
packages: [ 'demo-a', 'demo-b' ],
|
|
146
|
+
getPkgDir: (pkg) => `packages/${ pkg }`,
|
|
147
|
+
toTag: (pkg: string, version: string) => `${ pkg }@${ version }`,
|
|
148
|
+
tagPrefix: (pkg: string) => `${ pkg }@`,
|
|
149
|
+
|
|
56
150
|
git: {
|
|
57
|
-
|
|
58
|
-
|
|
151
|
+
commit: true,
|
|
152
|
+
tag: true,
|
|
153
|
+
push: true,
|
|
154
|
+
commitMessage: 'chore(release): ${tag}',
|
|
155
|
+
tagMessage: '${tag}',
|
|
59
156
|
},
|
|
60
157
|
npm: {
|
|
61
158
|
publish: true,
|
|
62
159
|
},
|
|
63
160
|
github: {
|
|
64
161
|
release: true,
|
|
65
|
-
|
|
162
|
+
releaseName: '${tag}',
|
|
66
163
|
},
|
|
67
164
|
})
|
|
68
165
|
```
|
|
69
166
|
|
|
167
|
+
### 使用 CLI 生成配置文件
|
|
168
|
+
|
|
169
|
+
工具内置 `init` 子命令,可用于快速生成发布配置文件。
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
release init
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
#### init 参数说明
|
|
176
|
+
|
|
177
|
+
| 参数 | 说明 |
|
|
178
|
+
|------------------|---------------------|
|
|
179
|
+
| `-f, --force` | 覆盖已存在的配置文件 |
|
|
180
|
+
| `-m, --monorepo` | 生成 Monorepo 项目的配置模板 |
|
|
181
|
+
|
|
182
|
+
#### 行为说明
|
|
183
|
+
|
|
184
|
+
- 自动检测项目模块类型(ESM / CJS)
|
|
185
|
+
- 自动检测是否使用 TypeScript
|
|
186
|
+
- 根据检测结果生成对应格式的配置文件:
|
|
187
|
+
- `release.config.ts`
|
|
188
|
+
- `release.config.mts`
|
|
189
|
+
- `release.config.js`
|
|
190
|
+
- `release.config.mjs`
|
|
191
|
+
- 若配置文件已存在且未使用 `--force`,将终止并提示错误
|
|
192
|
+
|
|
70
193
|
## Bump 版本号
|
|
71
194
|
|
|
72
195
|
工具内置语义化版本(Semantic Versioning)管理能力,可自动更新`package.json` 中的版本号:
|
|
@@ -86,20 +209,18 @@ export default defineConfig({
|
|
|
86
209
|
|
|
87
210
|
## Changelog
|
|
88
211
|
|
|
89
|
-
基于 Git
|
|
212
|
+
基于 Git **Conventional Commits** 规范提交历史自动生成结构化 Changelog
|
|
90
213
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
214
|
+
COMMIT_TYPES:
|
|
215
|
+
|
|
216
|
+
- 默认:`feat | feature | fix | perf | revert | docs | style | chore | refactor | test | build | ci`
|
|
217
|
+
- 自定义:`config | deps | security | i18n | ux | hotfix`
|
|
94
218
|
|
|
95
219
|
支持 **--show-changelog** 预览模式:
|
|
96
220
|
|
|
97
221
|
- 仅展示用于生成 Changelog 的 Commits
|
|
98
222
|
- 不会修改任何文件或提交历史
|
|
99
223
|
|
|
100
|
-
可与 **Conventional Commits** 规范结合使用,实现规范化、可读性更高的变更日志。
|
|
101
|
-
|
|
102
|
-
|
|
103
224
|
## Git 自动化
|
|
104
225
|
|
|
105
226
|
自动执行标准发布流程:
|
|
@@ -143,6 +264,10 @@ GitHub Release 可基于 Git Tag 自动创建,并支持附带:
|
|
|
143
264
|
1. **自动化方式**:使用 `GITHUB_TOKEN` 直接创建
|
|
144
265
|
2. **手动方式**:通过 GitHub Web UI 创建(工具预填充字段)
|
|
145
266
|
|
|
267
|
+
## Monorepo
|
|
268
|
+
|
|
269
|
+
工具默认配置偏向于 **单仓库(Single Repo)** 项目,但是可以通过配置使其支持 **Monorepo**
|
|
270
|
+
|
|
146
271
|
## Dry Run
|
|
147
272
|
|
|
148
273
|
```bash
|
|
@@ -166,3 +291,5 @@ pnpm release --dry-run
|
|
|
166
291
|
[4]: #npm-发布trusted-publishing
|
|
167
292
|
|
|
168
293
|
[5]: #github-releases
|
|
294
|
+
|
|
295
|
+
[6]: #monorepo
|