对于昨天有效的可重用工作流程,Github 操作突然抛出“未指定版本”

Mic*_*elB 19 github github-actions github-actions-workflows

我不确定这是一个错误还是昨天发生的重大更改,我有一个非常简单的设置,调用三个可重用的工作流程:

name: pr-checks

on:
  pull_request:
    branches: "**"

jobs:
  lint:
    name: Call Lint
    uses: ./.github/checks/check-lint.yaml

  test:
    name: Call Test
    uses: ./.github/checks/check-test.yaml

  e2e:
    name: Call E2E
    uses: ./.github/checks/check-e2e.yaml
Run Code Online (Sandbox Code Playgroud)

但这会抛出

"invalid value workflow reference: no version specified"
Run Code Online (Sandbox Code Playgroud)

截至目前,尽管昨天相同的工作流程已经有效。

当在“作业”级别重用这样的工作流程时 - 没有必要指定版本,事实上,如果我指定版本,它曾经会出错。

附上屏幕截图,因为我认为这没有多大意义。

在此输入图像描述

我确实单击了“重新运行所有作业”,它重新运行成功。

然而,没有任何明显的差异,并且在删除构建步骤之后只是为了确保那里没有发生任何奇怪的事情:

在此输入图像描述

Gui*_*urd 33

正如您在两张屏幕截图中看到的,一张是指.github/workflows目录(有效的),另一张是指.github/checks目录(无效的)。

简短回答: 如果您将工作流程文件夹更改回workflows而不是checks,它应该按预期工作。


长答案:两个不同概念的语法之间似乎存在混淆:

当地行动

要从工作流程访问本地操作(带有action.yml文件的文件夹),您需要使用actions/checkout第一个,以允许它访问其他存储库文件夹和文件。

例子:

    steps:
      - uses: actions/checkout@v3 # Necessary to access local action
      - name: Local Action Call
        uses: ./.github/actions/local-action #path/to/action
Run Code Online (Sandbox Code Playgroud)

我前段时间在这里做了一个 POC ,如果你想看一下。

可重复使用的工作流程

现在,如果您想使用可重用的工作流程,问题就不同了:

与其他工作流文件一样,您可以在 存储库的.github/workflows目录中找到可重用工作流。不支持工作流目录的子目录。

GitHub 文档参考

在这种情况下,根据文档中的其他部分

您可以使用以下语法之一引用可重用工作流程文件:

{owner}/{repo}/.github/workflows/{filename}@{ref}用于公共存储库中可重用的工作流程。

./.github/workflows/{filename}用于同一存储库中的可重用工作流程。

{ref}可以是SHA发布标记分支名称

例子:

  lint:
    name: Call Lint
    uses: ./.github/workflows/check-lint.yaml@{SHA/TAG/BRANCH}
Run Code Online (Sandbox Code Playgroud)

或者

  lint:
    name: Call Lint
    uses: ./.github/workflows/check-lint.yaml
Run Code Online (Sandbox Code Playgroud)

这是使用此可重用工作流程进行工作流程调用的另一个 POC


结论

这就像您试图调用可重用工作流程,就好像它是本地操作一样,这将不起作用,因为可重用工作流程需要位于目录中.github/workflows

请注意,您最终可以在@branch-name工作流调用末尾添加 ,以确保使用要测试的分支中的工作流(如果可重用工作流已存在于默认分支上)。