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