如何知道要使用哪个版本的 GitHub Action

Posted

技术标签:

【中文标题】如何知道要使用哪个版本的 GitHub Action【英文标题】:How to know what version of a GitHub Action to use 【发布时间】:2022-01-08 13:21:36 【问题描述】:

我注意到在各种 GitHub 操作工作流示例中,通常在调用预定义操作(使用 uses: 语法)时,会指定该操作的特定版本。例如:

steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'

上述工作流程为actions/checkoutactions/setup-python 指定@v2

问题是,怎么知道@v2 是最好的版本? 我如何知道@v3 何时可用?

更令人困惑的是用于发布到 pypi 的操作,pypa/gh-action-pypi-publish。在我查看的示例中,我看到至少指定了四个不同的版本:

pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 pypa/gh-action-pypi-publish@master pypa/gh-action-pypi-publish@v1 pypa/gh-action-pypi-publish@release/v1

我如何知道该使用哪一个? 一般来说,您如何知道哪些是可用的,以及有什么区别?

【问题讨论】:

【参考方案1】:

如何知道使用哪个版本?

在编写工作流程并包含操作时,我建议查看 GitHub 存储库上的 发布 选项卡。对于actions/setup-python,那就是https://github.com/actions/setup-python/releases

在该页面上,您应该看到有哪些版本以及最新版本是什么。您想使用最新版本,因为这样可以确保您不会落后并且将来升级不会变得太痛苦。

如何引用版本?

按照惯例,动作发布时带有特定标签(例如v1.0.1)以及主要标签(例如v1)。这允许您引用类似actions/setup-python@v1 的操作。一旦版本v1.0.2 发布,您将自动使用该版本。这意味着您可以从错误修复和新功能中获利,但无法进行重大更改。

但是,请注意,这只是惯例。并非每个动作的作者都会发布主要标签并随着新标签的发布而移动。此外,作者可能会在不影响主要版本的情况下引入重大更改。

何时使用其他格式

正如您所说,您可以通过其他方式引用操作,例如特定提交(例如actions/setup-python@27b31702a0e7fc50959f5ad993c78deac1bdfc29)等。

一般来说,您希望坚持使用上述标签。特别是,引用@main@master 是危险的,因为您将始终获得最新的更改,这可能会破坏您的工作流程。如果有一个操作建议你引用他们的默认分支并且他们不发布标签,我建议在他们的 GitHub 存储库中创建一个问题,要求发布标签。

如果您需要使用特定版本,使用 git 哈希会很有用。一个用例可能是您想要测试特定版本是否可以解决问题,或者您是否看到操作的作者已经推送了一些带有尚未标记的更改的新提交。然后,您可以测试该版本的操作。

如何知道什么时候有新版本?

您可以为此使用 Dependabot:Keeping your actions up to date with Dependabot。 Dependabot 是一种工具,它可以在您的任何操作的新版本可用时立即在您的存储库中创建拉取请求,以便您可以查看更改内容并保持工作流程最新。

这是一个示例 Dependabot 配置,它通过创建 PR 使您的操作保持最新:

version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"

【讨论】:

【参考方案2】:

人们应该习惯这种基于标签的发布管理(其他示例,如 Docker),如 this 等文章中所述。

用户如何知道要使用哪个标签?通常操作文档文件包含要使用的推荐版本,因此 99% 的用户应该遵循它。如果你想活在最前沿,你只需要使用其他标签。

【讨论】:

以上是关于如何知道要使用哪个版本的 GitHub Action的主要内容,如果未能解决你的问题,请参考以下文章

如何知道我使用的是哪个版本的 C 语言?

我如何知道哪个版本的 Xcode/哪个 SDK 构建了 xcarchive?

如何知道在 django 中使用了哪个版本的应用程序 [重复]

你如何知道 Ubuntu 上安装了哪个版本的 GTK+?

如何知道spring boot中嵌入了哪个tomcat版本

如何检查加载了哪个版本的 jQuery?