Skip to content

Match GitHub run-step shell and defaults.run semantics #117

Description

@gjkim42

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:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions