下一代全自动版本管理与发布工具 semantic-release 来了!

大家好,很高兴又见面了,我是”高级前端‬进阶‬”,由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

下一代全自动版本管理与发布工具 semantic-release 来了!

什么是 semantic-release

 Fully automated version management and package publishing

semantic-release 可自动执行整个软件包发布工作流程,包括:确定下一个版本号、生成发布说明以及发布软件包。其消除了开发者情感与版本号之间的直接联系,严格遵循语义化版本控制规范,并将变更的影响传达给用户。

semantic-release 的直接亮点包括:

  • 全自动发布且强制执行语义化版本控制规范
  • 新功能和修复程序可立即供用户使用,同时通知维护者和用户新版本发布
  • 使用规范化的提交消息约定来记录代码库中的变更
  • 基于 Git 合并,发布到不同的分发渠道,例如: npm dist-tags
  • 支持与持续集成工作流程集成,避免手动发布可能出现的错误
  • 通过插件支持任何包管理器和编程语言,且通过可共享的配置实现简单且可重用的配置
  • 支持 npm 包溯源,通过 GitHub Actions 上的签名证明来提高供应链安全性

目前 semantic-release 在 Github 通过 MIT 协议开源,有超过 23.1k 的 star、1.3k 的 fork,有 128k 的项目依赖量,是一个值得尝试的前端优质开源项目。

如何使用 semantic-release

提议开发者在 CI 环境中直接安装 semantic-release,作为使用 npx 执行命令的一部分:

npx semantic-release

如果需要使用基础 semantic-release 包中未包含的插件和/或预设,也可以在执行 npx 命令时一并安装:

npx --package semantic-release --package @semantic-release/exec --package conventional-changelog-conventionalcommits semantic-release

当使用 npx 全局安装 semantic-release 时,提议至少设置要安装的主版本号,例如:使用 npx semantic-release@25,从而可以控制流水线使用的 semantic-release 主版本,避免在 semantic-release 发布新主版本时破坏发布。

将 semantic-release 锁定到特定版本可以使发布更加确定。但锁定版本也意味着,当发布新版本时,必须升级 semantic-release。

开发者可以使用 Renovate 的正则表达式管理器,在上述两种情况下自动更新 semantic-release,只需要将以下内容添加到 Renovate 配置文件中:

{
  "customManagers": [
    {
      "customType": "regex",
      "description": "Update semantic-release version used by npx",
      "managerFilePatterns": ["^\.github/workflows/[^/]+\.ya?ml$"],
      "matchStrings": ["\srun: npx semantic-release@(?<currentValue>.*?)\s"],
      "datasourceTemplate": "npm",
      "depNameTemplate": "semantic-release"
    }
  ]
}

semantic-release 旨在每次发布分支构建成功后,在持续集成 (CI) 环境中执行。这样一来,发布过程就无需人工直接参与,从而保证发布过程自然流畅。

对于添加到发布分支(例如:master、main、next、beta)的每个新提交(无论是通过 git push、合并拉取请求还是从其他分支合并),都会触发 CI 构建,并在自上次发布以来代码库发生影响软件包功能的更改时运行 semantic-release 命令来发布新版本。同时,semantic-release 提供了多种方式来控制已发布版本的发布时间、内容和受众。

更多关于semantic-release的高级用法和配置可以参考文末资料,本文不再过多展开。

参考资料

https://github.com/semantic-release/semantic-release/blob/master/docs/usage/installation.md

https://github.com/semantic-release/semantic-release

https://blog.xotahal.cz/semantic-release-for-fastlane/

https://medium.com/hackernoon/automate-npm-releases-with-semantic-release-and-human-written-change-logs-2adb1dce487

https://www.youtube.com/watch?v=QZdY4XYbqLI

© 版权声明

相关文章

暂无评论

none
暂无评论...