12 个版本
| 0.14.0 | 2024 年 2 月 18 日 |
|---|---|
| 0.13.6 | 2023 年 12 月 26 日 |
| 0.13.5 | 2023 年 10 月 18 日 |
| 0.13.2 | 2023 年 3 月 30 日 |
| 0.13.0 | 2022 年 11 月 29 日 |
#330 在 命令行工具
25KB
397 行
ghaction-version-gen
ghaction-version-gen 是一个 Docker GitHub 动作,为您在部署动作中使用输出版本号。
为仓库生成版本信息有许多方法。它们通常涉及以某种方式处理 GITHUB_REF,也许甚至使用 github-script。
此存储库也是如何创建一个在容器中编译 Rust 入口点并将其移动到第二个最小容器的 Docker GitHub 动作的示例。
输出
以下是该动作的 主要 输出,通常用于版本控制
-
version_tagged:对于仅应部署在标签上的仓库,如果 GitHub 事件是标签的推送,则定义。输出本身是标签,可选的
v被移除。可以通过
OVERRIDE_VERSION_TAGGED环境变量覆盖此输出。 -
version_commit:对于在标签上部署且在master或main上提交所有提交的仓库。如果 GitHub 事件是标签的推送或这些分支之一,则定义。输出本身是推送的标签,或分支上的最新标签,后跟分支与标签之间的距离(始终不带
v)。可以通过
OVERRIDE_VERSION_COMMIT环境变量覆盖此输出。 -
version_docker_ci:对于持续部署到 hub.docker 的仓库。如果提交推送到master或main,则变量具有值 "latest";如果推送了标签,则具有标签(不带v);否则,它具有值 "null" 作为字符串。最后一种情况允许我们始终将变量用作 build-push-action 的版本,它不喜欢空字符串。可以通过
OVERRIDE_VERSION_DOCKER_CI环境变量覆盖此输出。
您可以在 示例 部分中使用这些变量。
这个 GitHub Action 也可以检查项目特定版本是否与最新标签匹配。目前,仅检查 Rust 的 Cargo.toml 文件。如果存在不匹配,并且正在推送新的标签,该操作将失败。
次要输出
以下是一些可能用于调试或作为替代版本控制方案的 次要 输出。
is_push:如果识别出 GitHub 事件,则为 "true",否则为 "false"。is_tag:如果识别出 GitHub ref,则为 "true",否则为 "false"。is_main:"true",如果 GitHub ref 是main或master分支。is_push_tag:"true",如果推送了标签。is_push_main:"true",如果推送了main或master。commit:提交的哈希值。commit_main:主/主分支的提交哈希值。is_main_here:"true",如果主/主分支与当前提交相匹配。git_describe_tags:git describe --tags的输出。tag_latest:最新的标签。distance:当前提交与tag_latest之间的距离。tag_distance:tag_latest-distance。tag_head:如果 HEAD 上有标签(不依赖于 GitHub 事件),则为该标签。dash_distance:-预加到distance。tag_latest_ltrimv:不带可选的前置v的tag_latest。tag_head_ltrimv:如果tag_head已定义,则不带可选的前置v的tag_head。rust_crate_version:如果存在,则为 Cargo.toml 中的版本。version_tagged:tag_head_ltrimv,如果is_push_tag。version_commit:tag_head_ltrimv,如果is_push_tag或tag_distance_ltrimv,如果is_push_main。version_docker_ci:"latest",如果is_push_main,否则为tag_head_ltrimv,如果is_push_tag。version_mismatch:如果文件内容与最新标签之间存在版本不匹配,则为错误消息。这也会出现在 GitHub Action 的 "错误" 中。
示例
version_tagged 和 version_commit
使用 version_tagged 和 version_commit 非常简单。
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- id: version
uses: docker://lpenz/ghaction-version-gen:0.13.4
...
- name: deploy
uses: <deploy action>
if: steps.version.outputs.version_tagged != ''
with:
version: ${{ steps.version.outputs.version_tagged }}
这会使 deploy 步骤仅在推送标签时运行,并将 version 设置为不带可选的 v 前缀的标签。
如果我们将示例中的 version_tagged 替换为 version_commit,我们得到额外的行为:当推送 main 或 master 时,version_commit 也会定义,并且它假定最后一个标签(v 被剥离)的值,后缀为 - 和推送提交到该标签的距离。这应该在每次推送 main 时部署的项目中使用。
version_docker_ci
变量 version_docker_ci 是为与 Docker 的 build-push-action 一起使用而设计的。它应该在需要从标签和 main/master 部署的项目中使用,但我们希望 main/master 在 Docker Hub 上被识别为 latest。
这是它的使用方式
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- id: version
uses: docker://lpenz/ghaction-version-gen:0.13.4
- uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- uses: docker/build-push-action@v2
with:
push: ${{ steps.version.outputs.version_docker_ci != 'null' }}
tags: ${{ github.repository }}:${{ steps.version.outputs.version_docker_ci }}
请注意,我们没有将 build-push-action 步骤设置为条件,因为我们始终需要构建容器。相反,我们通过检查 version_docker_ci 是否不为 null 来使 push 条件化。我们使用 null 而不是空字符串作为解决方案,因为该操作不允许我们将空字符串用作 tags 中的版本。
依赖项
~3.5–5.5MB
~98K SLoC