Context
GitHub Actions distinguishes an unspecified shell from an explicit bash shell, supports additional built-in and custom shell forms, and applies defaults.run at workflow and job scope with documented precedence.
Open Actions rejects every step shell except bash, rejects workflow and job defaults, and executes both omitted and explicit Bash steps as bash -e -o pipefail -c. This changes failure behavior for existing workflows and prevents valid shell and working-directory defaults from parsing.
Goal
Execute run steps and composite run steps with GitHub-compatible shell selection, command templates, scripts, and default precedence.
Acceptance criteria
- Parse workflow-level and job-level
defaults.run.shell and defaults.run.working-directory with documented validation and expression restrictions.
- Apply workflow, job, and step precedence exactly.
- Distinguish the documented unspecified-shell command from explicit
bash.
- Support the documented built-in shells on compatible runner platforms and custom shell templates containing the script placeholder.
- Write each run step to an appropriate temporary script and invoke it using the documented command template, exit behavior, profile flags, and file extension.
- Resolve working directories relative to the workspace and retain traversal protection.
- Apply compatible semantics to run steps inside composite actions, including action-relative execution where documented.
- Produce a clear diagnostic when the selected shell is unavailable on the assigned runner.
- Add conformance tests for omitted, explicit, defaulted, overridden, custom, and failing shells and for working-directory precedence.
- Document runner image requirements for supported shell executables.
References:
Context
GitHub Actions distinguishes an unspecified shell from an explicit
bashshell, supports additional built-in and custom shell forms, and appliesdefaults.runat workflow and job scope with documented precedence.Open Actions rejects every step shell except
bash, rejects workflow and jobdefaults, and executes both omitted and explicit Bash steps asbash -e -o pipefail -c. This changes failure behavior for existing workflows and prevents valid shell and working-directory defaults from parsing.Goal
Execute run steps and composite run steps with GitHub-compatible shell selection, command templates, scripts, and default precedence.
Acceptance criteria
defaults.run.shellanddefaults.run.working-directorywith documented validation and expression restrictions.bash.References: