@peiyanlu/release 0.0.2 → 0.0.4

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 CHANGED
@@ -15,28 +15,90 @@
15
15
  </a>
16
16
  </p>
17
17
 
18
+ 🚀 **一个用于自动化版本管理与包发布的通用 CLI 工具**
18
19
 
19
- 🚀 Generic CLI tool to automate versioning and package publishing
20
+ 提供完整的发布工作流自动化:
20
21
 
21
- - Bump version (in e.g. `package.json`)
22
- - [Git commit, tag, push][1]
23
- - [Create release at GitHub][3]
24
- - [Generate changelog][5]
25
- - [Publish to npm][6]
22
+ - [**Bump 版本号**][1]
23
+ - [**自动生成 Changelog**][2]
24
+ - [**Git**:暂存 → 提交 → 打 Tag → 推送][3]
25
+ - [**发布到 npm**][4]
26
+ - [**GitHub**:创建 Release][5]
27
+ - [**Monorepo**][6]
26
28
 
27
- ## Installation
29
+ ## 安装
28
30
 
29
31
  ```bash
30
32
  npm install -D @peiyanlu/release
31
-
33
+ # 或
32
34
  yarn add -D @peiyanlu/release
33
-
35
+ # 或
34
36
  pnpm add -D @peiyanlu/release
35
37
  ```
36
38
 
37
- ## Configuration
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 的账户) |
38
83
 
39
- 发布流程可以通过配置文件进行自定义。如果项目中没有提供配置文件,工具会自动使用内置的默认配置,配置文件可以是以下文件之一:`release.config.{ts,mts,cts,js,mjs,cjs}`
84
+ > 当使用 **Trusted Publishing(OIDC)** 时,通常无需提供 `--otp`。
85
+
86
+
87
+ ## 配置
88
+
89
+ 发布流程可以通过配置文件进行自定义。
90
+ 如果项目中**未提供配置文件**,工具会自动使用**内置默认配置**。
91
+
92
+ 默认配置适用于 **单仓库(Single Repo)** 项目。
93
+ 当项目为 **Monorepo** 结构时,**必须显式提供配置文件**,并开启 Monorepo 模式以正确识别各个子包。
94
+
95
+ 支持的配置文件格式:
96
+
97
+ ```
98
+ release.config.{ts,mts,js,mjs}
99
+ ```
100
+
101
+ 示例配置:
40
102
 
41
103
  ```ts
42
104
  // release.config.ts
@@ -44,68 +106,190 @@ import { defineConfig } from '@peiyanlu/release'
44
106
 
45
107
 
46
108
  export default defineConfig({
109
+ isMonorepo: false,
110
+ packages: [],
111
+ getPkgDir: (pkg) => `.`,
112
+ toTag: (pkg: string, version: string) => `v${ version }`,
113
+ changelogTagPrefix: undefined,
114
+
47
115
  git: {
48
- commitMessage: 'chore(release): ${version}',
49
- tagName: '${version}',
116
+ commit: true,
117
+ tag: true,
118
+ push: true,
119
+ commitMessage: 'chore(release): ${tag}',
120
+ tagMessage: '${tag}',
50
121
  },
51
122
  npm: {
52
123
  publish: true,
53
124
  },
54
125
  github: {
55
126
  release: true,
56
- autoGenerate: true,
127
+ releaseName: '${tag}',
57
128
  },
58
129
  })
130
+ ```
59
131
 
132
+ ### Monorepo 配置
133
+
134
+ 在 Monorepo 场景下,需要显式声明仓库结构、子包列表以及 Tag / Changelog 的生成规则。
135
+
136
+ 示例配置:
137
+
138
+ ```ts
139
+ // release.config.ts
140
+ import { defineConfig } from '@peiyanlu/release'
141
+
142
+
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
+ changelogTagPrefix: (pkg: string) => `${ pkg }@`,
149
+
150
+ git: {
151
+ commit: true,
152
+ tag: true,
153
+ push: true,
154
+ commitMessage: 'chore(release): ${tag}',
155
+ tagMessage: '${tag}',
156
+ },
157
+ npm: {
158
+ publish: true,
159
+ },
160
+ github: {
161
+ release: true,
162
+ releaseName: '${tag}',
163
+ },
164
+ })
60
165
  ```
61
166
 
62
- ## Git
167
+ ### 使用 CLI 生成配置文件
63
168
 
169
+ 工具内置 `init` 子命令,可用于快速生成发布配置文件。
64
170
 
65
- 将 **暂存(stage)→ 提交(commit)→ 打标签(tag)→ 推送(push)** 这些发布步骤自动化,并支持推送到 **任意 Git 远程仓库**。
171
+ ```bash
172
+ release init
173
+ ```
66
174
 
175
+ #### init 参数说明
67
176
 
68
- ## npmjs.com Releases
177
+ | 参数 | 说明 |
178
+ |------------------|---------------------|
179
+ | `-f, --force` | 覆盖已存在的配置文件 |
180
+ | `-m, --monorepo` | 生成 Monorepo 项目的配置模板 |
69
181
 
182
+ #### 行为说明
70
183
 
71
- 截至 **2025 年 7 月**,GitHub CI 工作流现在可以使用 npm 的 **[Trusted Publishing(可信发布)][30]** 的 **OpenID Connect(OIDC)** 集成,从 CI/CD 中实现**安全、无 Token 的发布**。
72
- 这将不再需要长期有效的访问令牌(long-lived tokens),并且会**自动生成来源证明(provenance attestations)**。
184
+ - 自动检测项目模块类型(ESM / CJS)
185
+ - 自动检测是否使用 TypeScript
186
+ - 根据检测结果生成对应格式的配置文件:
187
+ - `release.config.ts`
188
+ - `release.config.mts`
189
+ - `release.config.js`
190
+ - `release.config.mjs`
191
+ - 若配置文件已存在且未使用 `--force`,将终止并提示错误
73
192
 
193
+ ## Bump 版本号
74
194
 
75
- ## GitHub Releases
195
+ 工具内置语义化版本(Semantic Versioning)管理能力,可自动更新`package.json` 中的版本号:
76
196
 
77
- GitHub 项目可以将 **Release** 附加到 **Git 标签(Tag)** 上,其中包含 **发布说明(release notes)** 和 **构建产物(assets)**。
78
- 在你的发布流程中,有两种方式可以创建 **GitHub Releases**:
197
+ - 支持标准版本类型:
198
+ - `major`:不兼容的重大变更(1.x.x → 2.0.0)
199
+ - `minor`:向后兼容的新功能(1.1.x → 1.2.0)
200
+ - `patch`:向后兼容的 Bug 修复(1.1.1 → 1.1.2)
201
+ - 支持**预发布版本**:
202
+ - `alpha`、`beta`、`rc` 等(如 `1.2.0-alpha.1`)
203
+ - 支持**自定义版本号**:
204
+ - 可直接指定目标版本(如 `1.3.0`)
205
+ - 支持 **--show-release** 预览:
206
+ - 在不修改文件的情况下查看即将升级到的版本
79
207
 
80
- 1. **自动化方式**(需要提供 `GITHUB_TOKEN`)
81
- 2. **手动方式**(通过 GitHub 网页界面,使用预先填充好的字段来创建)
208
+ 版本更新后,工具会自动同步到后续的 Git Tag、GitHub Release 与 npm 发布流程。
82
209
 
83
210
  ## Changelog
84
211
 
85
- 通过读取 Git 提交历史(`git log`) 自动生成 Changelog
212
+ 基于 Git **Conventional Commits** 规范提交历史自动生成结构化 Changelog
86
213
 
87
- ```bash
88
- git log --pretty=format:"%s %h %H" {from}...{to}
214
+ COMMIT_TYPES:
215
+
216
+ - 默认:`feat | feature | fix | perf | revert | docs | style | chore | refactor | test | build | ci`
217
+ - 自定义:`config | deps | security | i18n | ux | hotfix`
218
+
219
+ 支持 **--show-changelog** 预览模式:
220
+
221
+ - 仅展示用于生成 Changelog 的 Commits
222
+ - 不会修改任何文件或提交历史
223
+
224
+ ## Git 自动化
225
+
226
+ 自动执行标准发布流程:
227
+
228
+ **stage → commit → tag → push**
229
+
230
+ 并支持推送到**任意 Git 远程仓库**,适配单仓库与多仓库场景。
231
+
232
+
233
+ ## npm 发布(Trusted Publishing)
234
+
235
+ 工具会根据 `package.json` 中的 `publishConfig` 配置,将包发布到对应的 npm 仓库。
236
+
237
+ ```json
238
+ {
239
+ "publishConfig": {
240
+ "access": "public",
241
+ "registry": "https://registry.npmjs.org/"
242
+ }
243
+ }
89
244
  ```
90
245
 
91
- ## Publish to npm
246
+ 自 **2025 年 7 月** 起,GitHub CI 已支持 npm 的 **Trusted Publishing(可信发布)** + **OIDC**:
247
+
248
+ - ✅ 无需长期有效的 npm Token
249
+ - ✅ 使用 OpenID Connect 进行身份验证
250
+ - ✅ 自动生成 provenance(来源证明)
251
+
252
+ 适用于 CI/CD 场景下的**安全、无 Token** 自动化发布。
253
+
254
+
255
+ ## GitHub Releases
92
256
 
93
- 通过读取 `package.json` 中的 `publishConfig` 配置发布到 npm 仓库
257
+ GitHub Release 可基于 Git Tag 自动创建,并支持附带:
258
+
259
+ - **Release Notes(发布说明)**
260
+ - **构建产物(Assets)**
261
+
262
+ 支持两种创建方式:
263
+
264
+ 1. **自动化方式**:使用 `GITHUB_TOKEN` 直接创建
265
+ 2. **手动方式**:通过 GitHub Web UI 创建(工具预填充字段)
266
+
267
+ ## Monorepo
268
+
269
+ 工具默认配置偏向于 **单仓库(Single Repo)** 项目,但是可以通过配置使其支持 **Monorepo**
270
+
271
+ ## Dry Run
272
+
273
+ ```bash
274
+ pnpm release --dry-run
275
+ ```
94
276
 
277
+ 可以**完整展示发布流程,但不会执行任何实际修改**,适合调试和验证配置。
95
278
 
96
- ## Dry Runs
97
279
 
98
- 使用 `--dry-run` 可以展示整个交互流程,以及工具原本将要执行的所有命令,但不会真正执行任何操作。
280
+ ## 相关链接
99
281
 
282
+ - [npm Trusted Publishing](https://docs.npmjs.com/trusted-publishers)
283
+ - [GitHub Releases 官方文档](https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases)
100
284
 
101
- [1]: #git
285
+ [1]: #bump-版本号
102
286
 
103
- [3]: #github-releases
287
+ [2]: #changelog
104
288
 
105
- [5]: #changelog
289
+ [3]: #git-自动化
106
290
 
107
- [6]: #publish-to-npm
291
+ [4]: #npm-发布trusted-publishing
108
292
 
109
- [30]: https://docs.npmjs.com/trusted-publishers
293
+ [5]: #github-releases
110
294
 
111
- [32]: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases
295
+ [6]: #monorepo