本指南将帮助你设置完整的 GitHub Actions 自动化工作流,实现代码提交即自动发布的流程。
将以下文件复制到你的项目中:
# 创建 GitHub Actions 目录
mkdir -p .github/workflows
# 复制工作流文件
cp docs/templates/github/workflows/release.template.yml .github/workflows/release.yml
cp docs/templates/github/workflows/ci.template.yml .github/workflows/ci.yml-
获取 NPM Token
# 登录 NPM npm login # 或者访问 https://www.npmjs.com/ # 点击头像 -> Access Tokens -> Generate New Token # 选择 "Automation" 类型
-
设置 GitHub Secrets
- 访问你的 GitHub 仓库
- 点击
Settings->Secrets and variables->Actions - 点击
New repository secret - 名称:
NPM_TOKEN - 值: 你的 NPM token
确保你的 package.json 包含必要的脚本:
{
"scripts": {
"build": "tsc",
"test": "jest",
"test:coverage": "jest --coverage",
"lint": "eslint src/**/*.ts",
"type-check": "tsc --noEmit"
}
}在 GitHub 仓库设置中配置以下 Secrets:
| Secret 名称 | 描述 | 获取方式 |
|---|---|---|
NPM_TOKEN |
NPM 发布令牌 | npmjs.com -> Access Tokens |
GITHUB_TOKEN |
GitHub API 令牌 | 自动提供,无需配置 |
| Secret 名称 | 描述 | 用途 |
|---|---|---|
SLACK_WEBHOOK |
Slack 通知 | 发布通知 |
DISCORD_WEBHOOK |
Discord 通知 | 发布通知 |
-
登录 NPM 官网
- 访问 https://www.npmjs.com/
- 登录你的账户
-
创建访问令牌
点击头像 -> Access Tokens -> Generate New Token -
选择令牌类型
- Classic Token: 选择 "Automation"
- Granular Access Token: 选择相应的包权限
-
复制令牌
⚠️ 令牌只显示一次,请立即复制保存
-
添加到 GitHub Secrets
仓库 -> Settings -> Secrets and variables -> Actions -> New repository secret Name: NPM_TOKEN Secret: 你的令牌
触发条件:
- Push 到
main/master/develop分支 - Pull Request 到
main/master分支
检查内容:
- 🧪 多平台多版本测试 (Ubuntu/Windows/macOS + Node 18/20/21)
- 🔐 安全扫描和漏洞检查
- 📦 依赖状态检查
- ⚡ 性能和包大小测试
- 🔄 多包管理器兼容性 (npm/yarn/pnpm)
- 📚 文档完整性检查
触发条件:
- Push 带有
v*标签 (如v1.0.0) - Push 到
main/master分支且提交信息包含特定关键词
发布流程:
- 代码质量检查
- 构建项目
- 发布到 NPM
- 创建 GitHub Release
- 自动版本管理
使用规范化的提交信息,系统会自动判断版本类型:
# 新功能 (minor 版本升级)
git commit -m "feat: 添加新的数据处理功能"
# 修复 (patch 版本升级)
git commit -m "fix: 修复参数解析错误"
# 破坏性更改 (major 版本升级)
git commit -m "breaking: 重构 API 接口"
# 强制发布
git commit -m "[release] 发布新版本"
# 推送到主分支
git push origin main提交信息约定:
feat:新功能 → minor 版本 (1.0.0 → 1.1.0)fix:修复 → patch 版本 (1.0.0 → 1.0.1)breaking:破坏性更改 → major 版本 (1.0.0 → 2.0.0)[release]强制发布 → patch 版本
# 手动创建版本标签
git tag v1.2.0
# 推送标签触发发布
git push origin v1.2.0# 升级 patch 版本
npm version patch
# 升级 minor 版本
npm version minor
# 升级 major 版本
npm version major
# 推送标签
git push --follow-tags-
GitHub Actions 页面
仓库 -> Actions -> 查看运行状态 -
发布状态检查
# 检查 NPM 包状态 npm info your-package-name # 检查最新版本 npm view your-package-name version
-
GitHub Release 检查
仓库 -> Releases -> 查看发布记录
错误: npm ERR! 403 Forbidden
解决方案:
# 检查 NPM Token 权限
npm whoami
# 重新生成 Token
# 确保选择 "Automation" 类型
# 更新 GitHub Secrets错误: npm ERR! You cannot publish over the previously published versions
解决方案:
# 检查当前版本
npm view your-package-name version
# 手动升级版本
npm version patch
# 重新推送
git push --follow-tags错误: npm run build 失败
解决方案:
# 本地测试构建
npm run build
# 检查 TypeScript 配置
npx tsc --noEmit
# 检查依赖
npm audit fix错误: 测试用例未通过
解决方案:
# 本地运行测试
npm test
# 更新测试快照
npm test -- --updateSnapshot
# 检查测试覆盖率
npm run test:coverage-
查看详细日志
GitHub Actions -> 点击失败的工作流 -> 查看详细步骤 -
本地模拟 CI 环境
# 使用相同的 Node 版本 nvm use 20 # 清理安装 rm -rf node_modules package-lock.json npm ci # 运行所有检查 npm run lint npm run type-check npm run build npm test
-
检查 package.json 配置
{ "files": [ "dist/**/*", "README.md", "LICENSE" ], "main": "dist/index.js", "types": "dist/index.d.ts", "bin": { "your-cli": "dist/cli.js" } }
使用 Conventional Commits 规范:
# 格式: <type>[optional scope]: <description>
feat: 添加新功能
fix: 修复 bug
docs: 更新文档
style: 代码格式调整
refactor: 重构代码
test: 添加测试
chore: 构建过程或辅助工具的变动# 语义化版本 (Semantic Versioning)
# MAJOR.MINOR.PATCH
# 1.0.0 -> 1.0.1 (patch: 修复)
# 1.0.0 -> 1.1.0 (minor: 新功能)
# 1.0.0 -> 2.0.0 (major: 破坏性更改)# 推荐的分支模型
main/master # 生产分支,自动发布
develop # 开发分支,CI 检查
feature/* # 功能分支
hotfix/* # 热修复分支- 所有测试通过
- 代码覆盖率达标
- 文档已更新
- CHANGELOG.md 已更新
- 版本号符合语义化规范
- 构建产物正常
# 定期更新依赖
npm audit
npm update
# 使用 .npmignore 排除敏感文件
echo "*.log" >> .npmignore
echo ".env*" >> .npmignore
echo "test/" >> .npmignore现在你的项目已经配置了完整的 CI/CD 流程!
每次提交代码时:
- 🔄 自动运行质量检查
- 🏷️ 自动管理版本号
- 📦 自动发布到 NPM
- 📝 自动创建 Release
享受自动化带来的便利吧! 🚀