runner icon indicating copy to clipboard operation
runner copied to clipboard

Local composite actions always relative to top level repository

Open nyarly opened this issue 4 years ago • 3 comments

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

nyarly avatar Sep 16 '21 00:09 nyarly

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 avatar Sep 16 '21 19:09 thboop

@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

ricCap avatar Feb 13 '22 13:02 ricCap

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?

Waterstraal avatar Feb 20 '25 14:02 Waterstraal

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.

frednntelia avatar Apr 28 '25 15:04 frednntelia