Context
A reusable workflow in public repos may be called by appending a reference which can be a SHA, a release tag, or a branch name, as for example:
{owner}/{repo}/.github/workflows/{filename}@{ref}
Githubs documentation states:
When a reusable workflow is triggered by a caller workflow, the github context is always associated with the caller workflow.
The problem
Since the github context is always associated with the caller workflow, the reusable workflow cannot access the reference, for example the tag v1.0.0
. However, knowing the reference is important when the reusable workflow needs to checkout the repository in order to make use of composite actions.
Example
Assume that the caller workflow is being executed from within the main
branch and calls the ref v1.0.0.
of a reusable workflow:
name: Caller workflow
on:
workflow_dispatch:
jobs:
caller:
uses: owner/public-repo/.github/workflows/[email protected]
Here is the reusable workflow that uses a composite action:
name: reusable workflows
on:
workflow_call:
jobs:
first-job:
runs-on: ubuntu-latest
steps:
- uses: actions/[email protected]
with:
repository: owner/public-repo
ref: ${{ github.ref_name }}
- name: composite action
uses: ./actions/my-composite-action
In the above code snippet, ${{ github.ref_name }}
is main
instead of v1.0.0
because github context is always associated with the caller workflow. Therefore, the composite actions code is based on main
and not on v1.0.0
. However, the caller wanted v1.0.0
.
Hence my question: how is the reusable workflow able to access the reference given by the caller?