具有本地操作的可重用工作流程

Vin*_*Sai 16 github github-actions

具有本地操作的可重用工作流程不起作用。可重用工作流程正在尝试在主存储库中找到本地操作

创建示例存储库来重现问题

  1. 具有可重用工作流程和本地操作的存储库 - https://github.com/vinodsai-a/github-reusable-workflow-sample
  2. 使用上述可重用工作流程的示例存储库 - https://github.com/vinodsai-a/github-example-repo

这是 PR 链接 -> https://github.com/vinodsai-a/github-example-repo/pull/1

错误-> https://github.com/vinodsai-a/github-example-repo/pull/1/checks

在此输入图像描述

han*_*kay 11

更新:您可以在 github.com 和 GHE Server v3.9+ 上使用以下解决方法,无需输入“workflows-ref”,而是使用github.workflow_ref( doc ) 或 env-var GITHUB_WORKFLOW_REF( doc )。谢谢@Philip Couling

\n

有一个解决方法,但它的缺点是需要为可重用工作流程指定两次引用,如下所示:

\n
jobs:\n  build-push:\n    uses: <org>/<central-workflow-repo>/.github/workflows/build-push.yml@v1.2 # always change with.workflows-ref, too\n    with:\n      workflows-ref: v1.2\n    secrets:\n      # can\'t use GITHUB_TOKEN as its different repo\n      GH_ACCESSTOKEN: ${{ secrets.GH_ACCESSTOKEN }}\n
Run Code Online (Sandbox Code Playgroud)\n

可重用工作流程的存储库具有以下结构:

\n
<org>/<central-workflow-repo>/ (github repo)\n\xe2\x94\x9c\xe2\x94\x80 .github/\n\xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 workflows/\n\xe2\x94\x82  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 build-push.yml\n\xe2\x94\x9c\xe2\x94\x80 actions/\n\xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 your-action/\n\xe2\x94\x82  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 action.yml\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 查看被调用工作流的存储库workflows
  2. \n
\n
<org>/<central-workflow-repo>/ (github repo)\n\xe2\x94\x9c\xe2\x94\x80 .github/\n\xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 workflows/\n\xe2\x94\x82  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 build-push.yml\n\xe2\x94\x9c\xe2\x94\x80 actions/\n\xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 your-action/\n\xe2\x94\x82  \xe2\x94\x82  \xe2\x94\x9c\xe2\x94\x80 action.yml\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. (可选)如果您希望检出调用存储库,请执行此操作,但要检出子目录
  2. \n
\n
on:\n  workflow_call:\n    inputs:\n      workflows-ref:\n        description: "ref of the centralized workflows repo that was specified in \'jobs.<name>.uses\'"\n        required: true\n        type: string\n...\n    steps:\n      - name: Checkout workflows repo # required so we can reference the actions locally\n        uses: actions/checkout@v2\n        with:\n          ref: ${{ inputs.workflows-ref }}\n          path: workflows\n          repository: <org>/<central-workflow-repo>\n          token: ${{ secrets.GH_ACCESSTOKEN }}\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 开始参考您的本地操作:
  2. \n
\n
      - name: Checkout repository\n        uses: actions/checkout@v2\n        with:\n          path: app\n
Run Code Online (Sandbox Code Playgroud)\n


Gui*_*urd 8

这里的问题是,如果不使用actions/checkout操作来访问存储库中的文件,则无法调用存储库上的本地操作。

on: [workflow_call]

jobs:
  local-action-testing:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2.3.4 # Necessary to access local action
      - uses: ./actions/local-action
Run Code Online (Sandbox Code Playgroud)

如果您想看一下,我这里有一些概念证明:

  • 我使用了 checkout@v3 并收到错误我将代码更改为此路径 ./.github/actions/ (2认同)