如何从我当前正在处理的分支重用 GitHub Actions 工作流程?

Jos*_*hua 34 github-actions

我想用可重用的工作流程抽象一些 GitHub 操作。

为了做到这一点,我需要以以下格式调用我新定义的可调用工作流程{owner}/{repo}/{path}/{filename}@{ref}

例如(来自文档)

jobs:
  call-workflow-1:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@172239021f7ba04fe7327647b213799853a9eb89
  call-workflow-2:
    uses: octo-org/another-repo/.github/workflows/workflow-2.yml@v1
Run Code Online (Sandbox Code Playgroud)

然而,实际上,我正在我的分支 上工作,some-branch-name我正在处理我的workflow-1.yml文件,并且我希望能够按照当前分支中定义的方式运行我的操作,给定

`{ref} 可以是 SHA、发布标签或分支名称。

看来我需要使用

jobs:
  call-workflow-1:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@some-branch-name
Run Code Online (Sandbox Code Playgroud)

但是,我希望这适用于任何分支机构,所以

jobs:
  call-workflow-1:
    uses: octo-org/this-repo/.github/workflows/workflow-1.yml@${{ github.ref }}
Run Code Online (Sandbox Code Playgroud)

但是,事实证明这是不可能的,因为表达式不能uses属性中使用。

我怎样才能实现这个目标?

TWi*_*Rob 26

自 2022 年 1 月 25 日起现已支持此功能。

https://github.blog/changelog/2022-01-25-github-actions-reusable-workflows-can-be-referenced-locally/

博客中的用法示例:

jobs:
  call-workflow-in-local-repo:
    uses: ./.github/workflows/workflow-2.yml
Run Code Online (Sandbox Code Playgroud)

我打开的问题中的一个现实生活中的例子: https ://github.com/TWiStErRob/net.twisterrob.healthcheck/pull/28

注意:使用此./语法,可重用工作流定义(.yml文件)和用法(uses来自作业)必须位于同一存储库中。请参阅:此处了解更多信息。


Gui*_*urd 14

编辑:自 2022 年 1 月 25 日起现已支持此功能

(查看TWiStErRob的答案以了解更多详细信息)。


之前的答案(2022 年更新之前)

正如您所说:目前无法完成,因为 Github Actions 不支持带有uses属性的表达式。

目前还没有解决方法?因为工作流解释器(当您将工作流推送到存储库时还会检查工作流语法)此时无法从表达式中获取值。

如果工作流被解释器识别,它可能会起作用,但它不会出现在选项卡上,Actions因为它被认为是无效的。

目前,您只能在符号后面使用tag,branch ref或,就像使用任何操作一样。commit hash@

请注意,其他人也遇到了同样的问题

  • “然而”已经到来:/sf/answers/5074927231/ (2认同)