#conventional-commits #version #semver #deployment #publish #git-commit #release

bin+lib versio

Versio 是一个用于管理和发布项目版本的工具

27 个版本

0.8.3 2024年2月8日
0.7.6 2023年7月16日
0.7.1 2023年1月6日
0.7.0 2022年12月26日
0.4.5 2020年11月20日

#126 in 配置

Download history 120/week @ 2024-04-01 133/week @ 2024-04-15 13/week @ 2024-06-03

每月 132 次下载

自定义许可证LGPL-2.0-or-later

275KB
7K SLoC

Versio

Versio(发音为 vir-zhee-oh)是一个管理您项目版本进化的工具。它根据 常规提交 智能更新 语义版本号。它可以处理变更日志、项目标签、发布子目录、GPG 签名、拉取请求等。

Versio 在处理 单一代码库 时特别智能,不仅允许对库中每个项目进行单独控制,还可以管理它们之间的依赖关系和引用。

入门

安装最快的方式是使用我们 发布 中的预构建程序。有关更多详情和安装 Versio 的其他方法,请参阅 安装文档

安装后,在您的项目中尝试以下操作以创建新版本

$ git pull
$ versio init  # this creates .versio.yaml
$ git add .versio.yaml .gitignore
$ git commit -m "build: add versio management"
$ git push
$ versio release

我们在 使用案例 中列出了一些 Versio 可在项目中使用的场景。

谁在使用 Versio?

Versio 列在一些地方,并被一些项目使用。如果您在野外发现了 Versio(或您自己正在使用它)但在此处未显示,请提交 问题。我们将确保您得到提及。

我们在这里!

我们在这里使用!

  • Versio:当然我们在开发 Versio 时使用 Versio。

背景

Versio 可以通过更新来自 semver 的版本号、生成变更日志和管理项目之间的依赖关系来自动化发布流程,从而让开发者从协调版本分配中解放出来。

Versio 还可以提供您项目的机器可读列表:它们所在的位置、它们之间的关系、它们的标签——这可以帮助构建您的发布流程的其他部分:例如构建、测试、发布和部署。

工作原理

许多软件项目在某种形式的清单文件中声明它们的版本号。Node/NPM 项目有一个 "package.json" 文件,Rust/Cargo 使用 "Cargo.toml",Java/Maven 有 "pom.xml",Python/pip 有 "setup.py",Ruby/gem 有 gemspec 文件,等等。Go 项目和 Terraform 模块等选择在 VCS 标签中而不是在文件中保留版本号。无论您的项目结构如何,您都可以在 Versio 配置文件中列出您项目版本号的位置,然后 Versio 就可以管理它们。

  • Versio 读取您存储库中的配置文件(默认名为 .versio.yaml),并找到那里引用的每个项目的版本号。
  • 它还会读取配置文件的旧版本和版本号,从您版本控制历史中的特定标签(默认:versio-prev)开始。
  • 基于旧版本、当前版本和介于其间的常规提交,Versio 将更新您项目的版本号。
  • Versio 将提交和推送更新的清单文件,并更新 versio-prev 标签。
  • Versio 还可以创建或更新每个项目的版本标签。
  • Versio 可以根据自上次发布以来所做的拉取请求和提交来生成或更新变更日志。

运行

查看 用例 以了解如何通过具体用例使用 Versio,包括管理您的存储库、使用特定流程或将 Versio 集成到 CI/CD;或者查看 Versio 参考 以获取所有命令行选项和 .versio.yaml 配置文件的格式。

功能

Versio 有一系列易于在项目中使用的好特性;这里只列举了一些。

拉取请求扫描

Versio 可以使用 Git API 根据拉取请求对提交进行分组,并甚至可以“取消合并”拉取请求以提取隐藏在合并提交中的常规提交。此过程对于来自 GitHub 的存储库是自动发生的。有关更多信息,请参阅 PR 扫描 页面。

版本标签

您可以编写 VCS 标签,并用它们代替清单文件;这在 Go 和 Terraform 项目中是一个常见的模式。要使用此功能,您需要提供项目的标签前缀和默认值。有关详细信息,请参阅 版本标签 文档。

主要子目录

一些项目在不同的子目录中保留软件的主要修订版,通常命名为 v2v3 等。这允许开发者同时跟踪多个、有时非常不同的应用程序结构。您可以通过在项目配置中提供 subs 属性来利用此功能。有关说明,请参阅 主要子目录 页面。

变更日志管理

如果您对默认的变更日志不满意,可以编写自己的liquid模板来代替;将其放在项目本身、文件系统中的其他地方,或者从网络服务中提供。如果这还不够灵活,您还可以输出包含所有发布信息的JSON文档,并在自己的管道中使用它来执行自定义操作。此外,您还可以检查内置模板、仅发布变更日志或使用变更日志格式化发布计划。有关此强大功能的更多详细信息,请参阅变更日志页面。

版本控制级别

版本控制级别允许您控制Versio与Git仓库交互的方式:您可以选择仅在本地交互、与远程交互,或者完全不交互。有关更多信息,请参阅其文档中的描述。

版本链

有时一个项目的版本将依赖于另一个项目的更改,即使这两个项目都在同一个monorepo中。Versio允许您管理这些依赖关系,并自动递增所有依赖版本。有关更多信息,请参阅版本链文档。

版本控制签名

您可能想对您的提交或标签进行签名,以向您的用户和同事提供更多的安全性。Versio也喜欢安全性!Versio可以读取已签名的标签和提交,并且通过适当的配置,将为其自己的提交和标签签名。有关如何进行此操作的更多信息,请参阅签名页面。

故障排除

有一个完整的故障排除文档,用于跟踪和报告错误或其他意外行为。然而,很多时候,这取决于在启用日志记录和错误跟踪的情况下运行Versio。

RUST_LOG=versio=trace RUST_BACKTRACE=1 versio <command>

贡献

我们非常欢迎您为Versio贡献代码!请随意分支或分叉此存储库,并提交一个拉取请求。

versio是用Rust编写的,这是一种用于编写原生可执行文件的有力且安全的语言。访问Rust语言主页以了解有关编写和编译Rust程序的更多信息,并查看Versio的贡献页面。

我们也很乐意接受想法、建议、文档、教程以及任何和所有的反馈。请在此存储库的支持页面上留言,或直接向其所有者发送消息。

依赖关系

~72MB
~1.5M SLoC