semantic-versioning - 在 ConcourseCI 中自动化 semver
问题描述
我有一个 ConcourseCI 管道,它使用此资源类型自动增加我的版本号:https ://github.com/concourse/semver-resource
我的资源声明如下所示:
- name: version
type: semver
source:
driver: git
initial_version: 0.0.1
uri: {{version-repo-uri}}
branch: {{version-repo-branch}}
file: {{version-file}}
private_key: {{git-key}}
我的工作是这样的:
- name: increment-version
plan:
- get: {{git-repo-name}}
trigger: true
- get: version
params: {bump: patch}
- put: version
params: {file: version/version}
正如你所看到的,现在我总是在更新补丁版本。但是,我想要一种简单且最好是自动化的方式,让管道根据情况增加 MAJOR、MINOR、PATCH 或 RC 版本。
是否有一个 git hook 或类似的东西会知道什么时候碰撞什么?将 semver 自动化到管道中时的任何实施最佳实践?我应该使用其他任何 Concourse 资源类型吗?或者这是我们绝对应该让人类决定的事情?在这种情况下,如何轻松地将“手动”步骤集成到 CD 管道中?
我能想到的最接近的事情是在我的项目(提交到 github)中有一个带有预期版本的版本文件,它将设置 MAJOR、MINOR、PATCH 编号。管道获取该文件,以某种方式将其用作基础,并且仅增加 RC 编号,但这感觉非常容易出错。
需要说明的是,我不是在问理论上如何发布版本,以及主要、次要或补丁的含义。我在实践中询问如何实施https://semver.org/上列出的那些建议。
解决方案
我对这个问题的解决方案是标记提交,以及一个读取 Git 提交消息并根据内容逐步执行版本的脚本:
如果当前提交上存在版本标签:始终执行PATCH。
别的:
列出直到前一个标签的所有提交。
- 如果任何消息包含“step:major”,则 step MAJOR
- 否则,如果所有消息都包含“step:patch”或“step:micro”,那么 step PATCH
- 其他步骤 MINOR
这意味着如果提交者未在消息中声明任何内容,则假定更改是功能更改。
在分发构建的工件之前标记并推送提交。否则,下一个构建可能会生成一个已经存在的版本。
只需根据用例的需要修改逻辑。
推荐阅读
- java - 使用优雅的方式将两个可选合二为一
- cron - 如何设置周一和周三的 cronjob?
- wordpress - Apache/2.4.46 (Win64) OpenSSL/1.1.1j PHP/7.4.16 服务器在 localhost 端口 80
- delphi - 如何使用 Indy 向存储在 TListView 组件中的多个电子邮件地址发送消息?
- c# - C# 线程和断言不工作的问题
- qemu - Qemu Image Convert 在 Debian 启动时花费的时间太长
- ios - 如何通过在 Swift 5 中按下按钮来为图像设置动画。(OOP)
- python - Python pyats 和丰富的模块
- javafx - VBox 内的 TextArea 不垂直缩放
- php - fopen() 无法读取/写入 Mac Big Sur