GitHub Actions Composite Action "no such file" - Use github.action_path
A composite action fails to run a script it ships because run: steps resolve paths from the consumer's workspace, not the action's own directory. The fix is to anchor paths to github.action_path.
What this error means
A composite action calls its own helper script (e.g. ./scripts/setup.sh) and fails with "No such file or directory", because the relative path is resolved from the caller's checkout, not the action.
# inside the composite action.yml
- run: ./scripts/setup.sh
shell: bash
# fails: ./scripts is looked up in the CONSUMER's workspace, not the actionCommon causes
run: paths resolve from the workspace
In a composite action, run: steps execute with the consumer's working directory. A relative path to a file shipped inside the action does not exist there.
Action not checked out alongside its scripts
Bundled scripts live wherever the action was downloaded. Without github.action_path you have no stable way to reference them.
How to fix it
Anchor paths to github.action_path
Reference the action's own directory via the github.action_path context so bundled files resolve regardless of the consumer's workspace.
runs:
using: composite
steps:
- run: "${{ github.action_path }}/scripts/setup.sh"
shell: bashMake scripts executable and portable
- chmod +x the bundled scripts (or invoke them via bash <path>).
- Use github.action_path for every file the action ships.
- Avoid assuming the consumer checked the action out into a known relative path.
How to prevent it
- Reference bundled action files via github.action_path.
- Do not rely on relative paths to the consumer workspace inside an action.
- Ship executable scripts or invoke them through an interpreter.