181 lines
2.8 KiB
Markdown
181 lines
2.8 KiB
Markdown
# 发布工作流
|
||
|
||
## 工具
|
||
|
||
| 工具 | 用途 |
|
||
| ------------- | ------------------------------ |
|
||
| bumpp | 交互式版本号递增 |
|
||
| changelogen | 从提交记录生成变更日志 |
|
||
| pkg-pr-new | PR 预览包 |
|
||
|
||
## bumpp(版本号递增)
|
||
|
||
```bash
|
||
pnpm add -D bumpp
|
||
```
|
||
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"release": "bumpp"
|
||
}
|
||
}
|
||
```
|
||
|
||
交互式提示选择补丁/次版本/主版本。可选参数:
|
||
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"release": "bumpp --commit --tag --push"
|
||
}
|
||
}
|
||
```
|
||
|
||
针对单体仓库:
|
||
|
||
```bash
|
||
bumpp -r # 递归
|
||
bumpp packages/*/package.json # 指定包
|
||
```
|
||
|
||
## changelogen(变更日志)
|
||
|
||
```bash
|
||
pnpm add -D changelogen
|
||
```
|
||
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"changelog": "changelogen --release"
|
||
}
|
||
}
|
||
```
|
||
|
||
组合工作流:
|
||
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"release": "changelogen --release && bumpp"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 完整发布流程
|
||
|
||
```json
|
||
{
|
||
"scripts": {
|
||
"release": "pnpm lint && pnpm test && changelogen --release && bumpp --commit --tag --push"
|
||
}
|
||
}
|
||
```
|
||
|
||
CI 在标签推送时发布到 npm。
|
||
|
||
## pkg-pr-new(PR 预览)
|
||
|
||
适用于可发布的包。在 PR 上创建安装链接。
|
||
|
||
```yaml
|
||
# .github/workflows/pkg-pr-new.yml
|
||
name: Publish PR
|
||
on: pull_request
|
||
|
||
jobs:
|
||
publish:
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- uses: actions/checkout@v4
|
||
- uses: pnpm/action-setup@v4
|
||
- uses: actions/setup-node@v4
|
||
with:
|
||
node-version: 22
|
||
cache: pnpm
|
||
- run: pnpm install
|
||
- run: pnpm build
|
||
- run: pnpm dlx pkg-pr-new publish --compact --pnpm
|
||
```
|
||
|
||
针对单体仓库:
|
||
|
||
```bash
|
||
pnpm dlx pkg-pr-new publish --compact --pnpm './packages/*'
|
||
```
|
||
|
||
PR 评论会显示:
|
||
|
||
```
|
||
pnpm add https://pkg.pr.new/your-org/your-package@123
|
||
```
|
||
|
||
## 约定式提交
|
||
|
||
changelogen 正常工作需要:
|
||
|
||
```
|
||
feat: add dark mode support
|
||
fix: resolve memory leak in parser
|
||
docs: update README
|
||
chore: update dependencies
|
||
```
|
||
|
||
## npm 发布
|
||
|
||
### 基于令牌(旧方式)
|
||
|
||
```yaml
|
||
- run: pnpm publish --access public --no-git-checks
|
||
env:
|
||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||
```
|
||
|
||
### OIDC(推荐)
|
||
|
||
无需令牌。完整配置见 ci-workflows.md。
|
||
|
||
```yaml
|
||
- run: pnpm publish --access public --no-git-checks --provenance
|
||
```
|
||
|
||
## 单体仓库发布
|
||
|
||
使用 pnpm:
|
||
|
||
```bash
|
||
pnpm -r publish --access public
|
||
```
|
||
|
||
使用 bumpp:
|
||
|
||
```bash
|
||
bumpp -r && pnpm -r publish
|
||
```
|
||
|
||
## 预发布版本
|
||
|
||
```bash
|
||
bumpp --preid beta # 1.0.0 -> 1.0.1-beta.0
|
||
bumpp --preid alpha # 1.0.0 -> 1.0.1-alpha.0
|
||
```
|
||
|
||
## Package.json 要求
|
||
|
||
```json
|
||
{
|
||
"name": "@scope/package",
|
||
"version": "1.0.0",
|
||
"repository": {
|
||
"type": "git",
|
||
"url": "git+https://github.com/org/repo.git"
|
||
},
|
||
"publishConfig": {
|
||
"access": "public"
|
||
}
|
||
}
|
||
```
|
||
|
||
`repository` 对于 npm provenance 是必需的。
|