Local composite actions always relative to top level repository
Describe the bug
I'm building a set of actions for my organization, and I would like to re-use common sections as composite actions. This appears to be the motivating case around https://github.com/actions/runner/issues/646, and it certainly suits my needs.
However: I have a pattern like:
main repo
- uses: actions/checkout@v2-beta # check out your code
- uses: actions/checkout@v2-beta # check out the actions repo
with:
repository: my-org/github-actions
ref: refs/tags/v1
path: github-actions
- name: Run the private action
uses: ./github-actions/build-em-all
then in my-org/github-actions /build-em-all/action.yml
#...
- uses: ./do-tedious-setup
My dilemma here is that the above won't work - the action is looked up relative the the consumer's workspace; so it should be - uses: ./github-actions/do-tedious-setup - but that's entirely dependent on the checkout in the consumer! The actions library has to expect that it's checked out in the right directory, which itself imposes a restriction on the file structure of consuming projects.
Even if I were to parameterize the checkout location, the uses field (probably rightfully) doesn't get any contexts to work from, so I can't deliver the input.
For the moment, I'm settling on documenting the requirement and hoping it doesn't cause a problem.
Expected behavior
It'd be great if actions were looked up with a Bash style PATH behavior and that a workflow could append items to the lookup list.
Runner Version and Platform
Version of your runner? Github hosted ubuntu-latest
Hey @nyarly , ~~we expose a variable in the github context ${{github.action_path}} that contains the path to where the action is located. You can use that in relation to your subpath to accomplish what you are trying to do if i'm understanding your use case correctly, can you try that?~~
~~There are some more docs located here~~
We don't support these contexts in a uses statement, which appears to be the issue here. We could support these contexts, which would allow you to do something like uses: ${{github.action_path}}/do-tedious-setup which would help this use case, but I don't think we have a dynamic way of doing this outside of your suggested workaround right now. Thanks for reporting this.
@thboop when you find the time, could you please have a look at https://github.com/actions/runner/pull/1684? @nyarly, does https://github.com/actions/runner/pull/1684 covers your use case?
Thanks both
Running into this exact same issue right now.
I want to share common Github Actions in my org. For composite actions that use other tasks with a relative path, this breaks because it will look for the task in the consuming repository and not where the shared action is stored. I would consider this a bug.
Can this be fixed on Github's side @thboop?
Yes, when loading e.g. myaction@main, scripts called by action.yml e.g. src/myscript.py are not found during the job run.
Only scripts that are in the exact same folder side-by-side with action.yml are loaded by the job.
I wonder why this is not documented anywhere.