如何在GitHub共享Action中获取调用方仓库的全名(含所有者)
在GitHub共享Action中获取调用方仓库全名的方法
当然可以获取调用该Action的仓库全名(包含所有者),主要有两种实现方式,对应不同的调用场景:
1. 直接调用共享Action(跨仓库引用)
如果是直接通过uses: owner/called@main这种方式调用其他仓库的共享Action,无需额外配置——因为共享Action会在调用方的工作流环境中运行,GitHub内置的GITHUB_REPOSITORY环境变量直接就是调用方的仓库全名(比如你的例子里的owner/caller)。
修改共享Action的action.yml即可实现输出:
runs: using: "composite" steps: - name: 输出调用方仓库全名 shell: bash run: | echo "调用方仓库全名:${GITHUB_REPOSITORY}"
2. 通过复用工作流间接调用共享Action(如你的示例场景)
你的例子中,调用方仓库先拉取了共享仓库的代码,再调用其中的复用工作流。这种场景下,复用工作流默认会继承调用方的环境变量,所以共享Action依然可以直接用GITHUB_REPOSITORY拿到调用方仓库名。
如果遇到环境变量未正常传递的特殊情况,也可以通过显式传递参数的方式实现:
- 第一步:在调用方的
action1.yml中,调用复用工作流时传入当前仓库名- name: 使用复用工作流 uses: ./shared-workflows/.github/workflows/shared with: caller_repo: ${{ github.repository }} - 第二步:在共享仓库的复用工作流
shared.yml中定义输入参数on: workflow_call: inputs: caller_repo: type: string required: true - 第三步:在复用工作流中调用共享Action时传递该参数
steps: - name: 调用共享Action uses: ./path/to/action.yml with: caller_repo: ${{ inputs.caller_repo }} - 第四步:在共享Action的
action.yml中接收参数并输出inputs: caller_repo: type: string required: true runs: using: "composite" steps: - name: 输出调用方仓库全名 shell: bash run: | echo "调用方仓库全名:${{ inputs.caller_repo }}"
核心总结
绝大多数常规场景下,直接使用内置环境变量${GITHUB_REPOSITORY}就能满足需求,因为共享Action的运行上下文是属于调用方仓库的。只有在工作流需要环境隔离等特殊场景时,才需要通过参数传递的方式手动传递仓库名。
内容的提问来源于stack exchange,提问作者Sig
相关产品推荐
相关产品推荐

