如何确定使用哪个版本?
在编写工作流并包含动作时,建议查看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哈希可能很有用。一个使用案例可能是您想测试特定版本是否可以解决问题,或者如果动作的作者推送了一些未被标记的更改,您可以测试该版本的动作。
安全性
从安全角度来看,使用标签(例如@v1
或@v1.1.0
)或分支(例如@main
)存在问题,因为该存储库的作者可能会更改其引用位置。恶意的动作作者可能会向该分支添加恶意代码,甚至仅在审核PR时不够谨慎,从而引入漏洞(例如通过传递依赖项)。
使用哈希(例如@27b31702a0e7fc50959f5ad993c78deac1bdfc29
)可以确切地知道你得到了什么,除非你选择通过更新哈希来更改版本(此时你可以仔细审查更改),否则它不会改变。
截至2022年初,使用哈希而非标签的做法并不普遍,但例如GitHub为其文档存储库采用了这种方式。随着供应链安全变得越来越重要,出现了一些工具来帮助进行“固定”(通过哈希而非标签指向特定版本),例如sethvargo/ratchet。但是即使是下面提到的Dependabot也应该能够将哈希更新到最新的哈希值。
如何知道是否有新版本?
你可以使用Dependabot: 使用Dependabot保持操作的最新状态。Dependabot是一个工具,一旦任何操作的新版本可用,它就会在你的存储库中创建一个拉取请求,以便你可以审查更改并保持工作流程的最新状态。
以下是一个示例Dependabot配置,它通过创建PR来保持你的操作最新:
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"