如何在monorepo中自动生成python包的版本?



当涉及到从只包含一个python包的repo使用常规提交生成版本时,事情很容易,您只需要使用一个工具来循环所有repo提交并通过解析这些常规提交来计算版本(break-change=major, feat=minor, fix=patch),到目前为止一切顺利。

在包含多个需要跟踪不同版本的产品的单线程中会发生什么?让我给你举个例子,以python的azure sdk为例,你如何使用传统的提交&为这种类型的回购提供有效的工具?

我想提出一个明显可扩展的解决方案,例如,它可以在管道级别自动计算不同单线程产品的版本,而无需任何开发人员的交互。我想在这里澄清的一些要点是:

  • 分支名称语义
  • 常规提交语义(这是一个使用可选作用域来引用不同产品的好例子吗)
  • 版本控制工具
  • 管道

但无论如何,我的问题很简单,有没有什么最佳实践可以遵循?

下面是我们如何使用Reliza Hub (out工具)的示例:https://github.com/relizaio/rebom/blob/master/.github/workflows/github_actions.yml

的想法:

  1. 每次push都会为每个分支生成一个release,该release存储在工具中。
  2. 该工具还负责根据所选的模式生成下一个发布版本(当我们这样做时,这一步是可选的,因为您可以在这里使用不同的工具或方法)。
  3. 接下来,对于monorepo中的每个repo,您检查工具中最近一次成功提交,并将其与您拥有的实际提交进行比较,基本上是以下代码:
            difflines=$(git diff $last_commit..$GITHUB_SHA ./ | wc -l)
            if [ "$difflines" != "0" ]
            then
              dobuild=true
            fi
  1. 如上所述,只有在这个特定目录(repo)有差异时才进行构建。
  2. 如果构建成功,将成功状态和其他所需的元数据记录回工具。
  3. 冲洗并重复每次代码推送。

可能有其他工具可以做到这一点,但关键是您需要一些外部存储来跟踪映射到相应提交的成功构建。有些人还尝试重载git标签来实现这一点,但这很少适用于单节点。

最新更新