-
Notifications
You must be signed in to change notification settings - Fork 7
Description
For example ansible-community/github-docs-build/actions/ansible-docs-build-init@main
This works but is problematic for several reasons:
- the git ref is hardcoded, so no matter which version (ref) of the workflow you are using, the action will always be loaded from
main
- this also makes modifications via PR even more challenging than they already are because of the
pull_request_target
event, because during development and testing the refs all need to be changed to the PR branch, and then changed once again before merging - a fork would always be referencing the source repo's version rather than itself, unless permanently changed
Actions can be referenced from the local filesystem, for example the above would change to ./actions/ansible-docs-build-init
. The possible challenge to this, is that typically, you must do a checkout on the runner first to ensure the files actually exist. In most repositories, this is pretty straightforward because you're already doing a checkout anyway.
With these shared workflows, a checkout is running in context of the calling repo, not the workflow's repo. I am not sure if there's a way that we can infer from within the workflow, which commit of the shared workflow itself has been referenced. If we can do that, we can also do a checkout of the repo and get the actions that way.
What would be really ideal, is to re-use the checkout that already occurred to get the workflow in the first place. Much like actions, shared workflows are automatically retrieved with a git clone/checkout by the runner system, so the files are somewhere. Composite actions have a variable they can access that gives the filesystem location of the action (so that files in the action can be referenced). If a similar variable exists for shared workflows that would be the ideal way to handle this. I have not seen any documentation that suggests that variable exists though.
In the reusing workflows page there is an example that references a local action:
jobs:
reusable_workflow_job:
runs-on: ubuntu-latest
environment: production
steps:
- uses: ./.github/actions/my-action@v1
with:
username: ${{ inputs.username }}
token: ${{ secrets.envPAT }}
The interesting thing about this example is that is clearly does not have a checkout step, implying that local action references will "just work" but I have not tried this yet. The example is not meant to demonstrate local action referencing though, so it's entirely possible that this is a non-working example.