为开源项目提供常见的可复用的 GitHub Actions Workflow。
- 单元测试
- 自动发包
- 自动初始化仓库配置
自动跑 Lint 和 Cov 单测
- 配置
npm scripts
:
{
"name": "your-project",
"scripts": {
"lint": "eslint .",
"test": "mocha",
"ci": "c8 npm test"
}
}
- 创建
.github/workflows/ci.yml
:
name: CI
on:
push:
branches: [ master, main ]
pull_request:
branches: [ master, main, next, beta, '*.x' ]
jobs:
Job:
name: Node.js
uses: node-modules/github-actions/.github/workflows/node-test.yml@master
# 支持以下自定义配置,一般用默认值即可
# with:
# os: 'ubuntu-latest, macos-latest, windows-latest'
# version: '16, 18, 20, 22'
# secrets:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
Job:
name: Node.js
uses: node-modules/github-actions/.github/workflows/node-test-mysql.yml@master
with:
os: 'ubuntu-latest'
# secrets:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
使用 semantic-release 自动发布 NPM 包。
- 根据 Git 日志自动计算版本号
- 自动生成 ChangeLog 文件
- 自动创建 GitHub Release 说明
- 自动打 Tag 标签
- 自动发布到 Registry,支持 NPM 和 GitHub
- 自动触发 CNPM 同步
支持合并到主干分支后自动发布,也支持手动发布。
手动发布方式:访问仓库的 Actions 页面,左侧选择 Release Workflow,点击右侧的
Run Workflow
即可。
根据 Commit Message 自动计算下一个版本号:
- major 大版本:
BREAKING CHANGE:
,必须加到 commit body 里面而不是第一行标题,否则不生效
perf(pencil): remove graphiteWidth option
BREAKING CHANGE: The graphiteWidth option has been removed.
The default graphite width of 10mm is always used for performance reason.
feat: support WebStream
BREAKING CHANGE: Drop Node.js < 18 support
- minor 特性版本:
feat:
等 - patch 补丁版本:
fix:
/Revert
等 - 不发布版本:
chore:
/docs:
/style:
等 - 详见:https://github.com/semantic-release/commit-analyzer
注意:
- 不支持发布 0.x 版本,master 首次发布将是 1.0.0 版本
- 如果你不期望直接发布,请在
beta
分支提交代码运行,将发布1.0.0-beta.1
版本 - 多版本发布实践参见 semantic-release 文档
-
创建 NPM Token
- NPM Registry 需创建 Automation Token,参见文档
- GitHub Package 无需创建,默认支持
-
创建 GitHub Token
- 因为生成的 CHANGELOG.md 和 package.json 需回写 GitHub,而默认的
GITHUB_TOKEN
没有该权限 - 因此需要创建一个新的 Token,参见文档
- 因为生成的 CHANGELOG.md 和 package.json 需回写 GitHub,而默认的
-
配置 Token
- 在项目或组织维度配置 2 个
secrets
:NPM_TOKEN
和GIT_TOKEN
- 参见文档
- 在项目或组织维度配置 2 个
-
创建
.github/workflows/release.yml
:
name: Release
on:
# 合并后自动发布
push:
branches: [ master, main, next, beta, '*.x' ]
# 手动发布
workflow_dispatch: {}
jobs:
release:
name: Node.js
uses: node-modules/github-actions/.github/workflows/node-release.yml@master
secrets:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GIT_TOKEN: ${{ secrets.GIT_TOKEN }}
# with:
# checkTest: false
# dryRun: true
修改 release.yml
的 secrets:
secrets:
NPM_TOKEN: ${{ secrets.GITHUB_TOKEN }}
修改 package.json
:
{
"publishConfig": {
"access": "public",
"registry": "https://npm.pkg.github.com"
},
}