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

Dan*_*arb 13 python github-actions building-github-actions

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

steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.x'
Run Code Online (Sandbox Code Playgroud)

上述工作流程指定了@v2actions/checkoutactions/setup-python

问题是,如何知道哪个版本@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

我怎么知道该使用哪一个? 一般来说,您如何知道哪些可用,以及它们之间的差异是什么?

ret*_*hab 20

如何知道使用哪个版本?

在编写工作流程并包含操作时,我建议查看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)和其他。

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

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

安全

从安全角度来看,使用标签(例如@v1@v1.1.0)或分支(例如@main)是有问题的,因为该存储库的作者可能会更改它所引用的位置。操作的恶意作者可能会向该分支添加恶意代码,甚至在审查 PR 时不够小心,从而引入漏洞(例如通过传递依赖)。

通过使用哈希(例如@27b31702a0e7fc50959f5ad993c78deac1bdfc29),您可以确切地知道您得到的内容,并且它不会改变,除非您选择通过更新哈希来更改版本(此时您可以仔细查看更改)。

截至 2022 年初,使用哈希值代替标签尚未得到广泛采用,但例如 GitHub 在其文档存储库中就这样做了。随着供应链安全变得越来越重要,人们创建了一些工具来帮助“固定”(通过哈希而不是标签指向特定版本),例如sethvargo/ratchet。但即使是 depedanbot(见下文)也应该能够将哈希值更新为最新的哈希值。

如何知道何时有新版本?

您可以使用 Dependabot 来实现以下目的:使用Dependabot 使您的操作保持最新状态。Dependabot 是一种工具,一旦您的任何操作有新版本可用,它就会在您的存储库中创建拉取请求,以便您可以查看更改内容并保持工作流程最新。

以下是 Dependabot 配置示例,它通过创建 PR 使您的操作保持最新状态:

version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"
Run Code Online (Sandbox Code Playgroud)