菜单

发布流程

相关源文件

此页面记录了 Nodemon 如何管理其发布流程,包括版本控制策略、工具以及从代码更改到 npm 包发布的自动化管道。有关向 Nodemon 贡献代码更改的信息,请参阅 贡献指南

概述

Nodemon 使用由 semantic-release 和 GitHub Actions 驱动的自动化发布流程。这种方法消除了手动版本升级和变更日志生成的需要,同时确保基于约定式提交消息的一致版本控制。

发布流程会自动

  • 根据提交消息确定下一个版本号
  • 生成变更日志条目
  • 创建带有发布说明的 GitHub 发布
  • 发布包到 npm

来源: package.json41-42 .github/workflows/release.yml

发布工作流

当推送到 main 分支或 main 分支上的测试成功完成时,将自动触发发布流程。这确保了只有通过所有测试的代码才能发布。

来源: .github/workflows/release.yml2-10 .github/workflows/node.js.yml4-10

版本策略

Nodemon 遵循语义化版本控制 (SemVer) 原则,其中版本号结构为 MAJOR.MINOR.PATCH

  • MAJOR:不兼容的 API 更改
  • MINOR:向后兼容的功能添加
  • PATCH:向后兼容的错误修复

实际版本号由 semantic-release 根据自上次发布以来的约定式提交消息自动确定。

在 package.json 中,版本设置为 "0.0.0-development",这是一个占位符,semantic-release 将在发布过程中替换它。

来源: package.json70 commitlint.config.js

提交指南

Nodemon 使用 Conventional Commits 规范的提交消息,并通过 commitlint 执行。此标准通过将提交消息与语义版本增量关联,帮助自动化发布流程。

提交消息格式

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

常见的提交类型包括

类型描述版本影响
feat新功能MINOR
fix错误修复PATCH
docs文档更改
style代码样式更改(格式化等)
refactor代码重构,无行为更改
perf性能改进PATCH
test添加/修复测试
chore构建过程或工具更改

在类型后添加 !(例如,feat!:)或在页脚添加 BREAKING CHANGE: 表示重大更改,这将触发 MAJOR 版本升级。

来源: commitlint.config.js package.json33-34

CI/CD集成

Nodemon 使用 GitHub Actions 自动化测试和发布流程。涉及两个主要工作流:

  1. 测试工作流 (.github/workflows/node.js.yml):在每次推送到 main 和 pull 请求时运行

    • 运行测试以确保代码质量
    • 如果测试失败,则阻止发布流程
  2. 发布工作流 (.github/workflows/release.yml):在 main 分支测试通过时或直接推送到 main 分支时运行

    • 检出仓库
    • 设置 Node.js
    • 安装依赖项
    • 运行 semantic-release

来源: .github/workflows/release.yml .github/workflows/node.js.yml

发布产物

发布完成后,会创建以下构件

  1. 更新的 package.json:版本号根据提交消息更新。
  2. GitHub Release:在 GitHub 上创建新的发布,并附带自动生成的说明。
  3. npm 包:更新的包发布到 npm 注册表。

用户随后可以通过 npm 安装该包

来源: package.json1-75 .github/workflows/release.yml23-29

环境设置

发布流程需要特定的环境变量才能正常运行

环境变量目的
GITHUB_TOKEN与 GitHub API 身份验证以创建发布
NPM_TOKEN与 npm 注册表身份验证以发布包

这些令牌存储为 GitHub 存储库机密,并在工作流中安全访问。

来源: .github/workflows/release.yml26-28

排查发布问题

如果发布失败,最常见的问题是:

  1. 测试失败:确保在尝试发布之前所有测试都已通过。
  2. 无效的提交消息:确保提交遵循约定式提交格式。
  3. 缺少环境变量:验证 GitHub 机密是否已正确配置。

对于出现故障情况下的手动干预,需要具有适当权限的团队成员

  1. 查看 GitHub Actions 日志以识别问题
  2. 修复根本问题
  3. 重新运行工作流或推送修复以再次触发它

来源: .github/workflows/release.yml package.json41-43