本地引用GitHub Actions可复用工作流时文件找不到的问题求助
解决GitHub Action引用同仓库可复用工作流找不到文件的问题
问题场景
文件结构如下:
.github/workflows/common/affected.yml .github/workflows/main_pr.yml
在main_pr.yml中尝试调用同仓库的affected.yml作为可复用工作流,但执行时报错:
Can't find 'action.yml', 'action.yaml' or 'Dockerfile' under '/home/runner/work/mono-repo-demo/mono-repo-demo/.github/workflows/common/affected.yml'. Did you forget to run actions/checkout before running your local action?
错误原因
- 工作流引用路径错误:配置里写的
uses: ./.github/workflows/affected.yml与实际文件路径不符,实际affected.yml在common子目录下。 - 调用工作流的Job中额外添加了Steps:使用
uses调用可复用工作流时,该Job的逻辑由被调用的工作流完全接管,不能在当前Job下添加自定义Steps(比如actions/checkout),否则GitHub会误将其识别为本地Action而非可复用工作流。
修复方案
1. 修正工作流引用路径
将main_pr.yml中callAffectedApps Job的uses路径改为正确的文件路径:
uses: ./.github/workflows/common/affected.yml
2. 移除调用Job中的多余Steps
删除callAffectedApps Job下的steps块,将actions/checkout步骤移到被调用的affected.yml工作流中。
修正后的main_pr.yml示例
name: CI on: pull_request: types: - opened - closed - synchronize branches: - main jobs: callAffectedApps: uses: ./.github/workflows/common/affected.yml outputs: affected: ${{ steps.affectedApps.outputs.AFFECTED_APPS }} is_even_buid: runs-on: ubuntu-latest needs: callAffectedApps if: contains(needs.callAffectedApps.outputs.affected, 'is-event') steps: - name: Checkout code uses: actions/checkout@v2 - run: | ls
适配的affected.yml示例
确保被调用的工作流包含必要的workflow_call配置和checkout步骤:
# .github/workflows/common/affected.yml name: Affected Apps Check on: workflow_call: outputs: AFFECTED_APPS: description: "List of affected applications" value: ${{ steps.affectedApps.outputs.AFFECTED_APPS }} jobs: checkAffected: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # 若需对比分支差异,需全量克隆仓库 - name: Detect affected apps id: affectedApps run: | # 此处添加检测受影响应用的逻辑 echo "AFFECTED_APPS=is-event" >> $GITHUB_OUTPUT
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

