GitHub可重用工作流兼容workflow_call与手动触发的Secrets配置
问题解答
1. 是否可以同时使用workflow_dispatch和workflow_call?
可以,GitHub Actions完全支持在同一个工作流中同时配置这两种触发事件,二者互不冲突。
2. 手动触发时访问Secrets的问题分析与解决
你遇到的Error: Input required and not supplied: token错误,核心原因是两种触发场景下secrets.PAT_GITHUB的来源不同:
- 当通过
workflow_call调用时,secrets.PAT_GITHUB是由调用方工作流传递的参数,符合你定义的workflow_call.secrets要求; - 当手动触发(
workflow_dispatch)时,没有调用方传递这个参数,此时secrets.PAT_GITHUB指向的是当前工作流所在仓库的同名Secret——如果该仓库没有配置这个Secret,就会出现参数缺失的错误。
你提到的另一个主工作流能正常访问Secrets,是因为它直接运行在自身仓库中,仓库的Secrets可以直接被引用,不需要依赖外部传入。
解决方案
修改工作流代码,通过github.event_name区分触发来源,为不同场景提供对应的token值:
name: unit-tests on: workflow_dispatch: workflow_call: secrets: PAT_GITHUB: required: true jobs: update-checker: runs-on: ubuntu-latest steps: - name: "Check out this repo and submodules." uses: actions/checkout@v3 with: submodules: true # workflow_call触发时使用传入的secret,手动触发时优先用仓库自身的PAT_GITHUB, fallback到默认GITHUB_TOKEN token: ${{ github.event_name == 'workflow_call' && secrets.PAT_GITHUB || secrets.PAT_GITHUB || github.token }} timeout-minutes: 3
另外,确保当前工作流所在仓库已配置PAT_GITHUB这个Secret(如果需要在手动触发时使用它),或者直接使用默认的github.token(适用于子模块与主仓库同属一个组织/账号的场景)。
内容的提问来源于stack exchange,提问作者Patrick Kenny
相关产品推荐
相关产品推荐

