Skip to content

GitHub Actions: Composite Run Steps

You can now create reusable actions using shell scripts and even mix multiple shell languages in the same action. You probably have a lot of shell script to automate many tasks, now you can easily turn them into an action and reuse them for different workflows. Sometimes it’s easier to just write a shell script than JavaScript or Docker. Now you don’t have to worry about wrapping your scripts in Docker containers.

Here’s an example of how you can use composite run steps actions:

Composite Run Step Example


    runs-on: windows-latest
    - uses: actions/checkout@v2
    - uses: octocat/say-hello@v1
        name: OctoCat


    description: 'Your name'
    default: 'No name provided'
  using: "composite"
    - run: echo Hello ${{ }}.
      shell: bash
    - run: echo "Nice to meet you!"
      shell: pwsh

Learn more about composite run steps and visit the GitHub Actions community forum for questions.

You can now share self-hosted runners across some or all of your GitHub organizations by associating them with an Enterprise Account. This simplifies sharing runners and makes it easy for a single team to manage all the runners in your Enterprise Account. Learn more about enterprise runners.

Additionally, you can now separate your runners into groups. Each group has distinct access settings, putting you in control of which organizations and repositories have access to specific self-hosted runners. This is useful to create a dedicated group of runners for production deployments and limit them to only the repositories that need to deploy to production. You can create runner groups for runners assigned to an Enterprise Account, or an organization. Learn more about runner groups.

Add custom labels to the runners in your groups so it's easy for workflows to use the correct runners, such as AI/ML workflows that need runners with GPUs.

For questions, visit the GitHub Actions community forum.

To see what's next for GitHub Actions, visit our public roadmap.

See more

We have released a new version of the GitHub Actions runner.


  • Composite Actions Support for Multiple Run Steps (#549, #557, #564, #568, #569, #578, #591, #599, #605, #609, #610, #615, #624)
  • Prepare to switch GITHUB_ACTION to use ContextName instead of refname (#593)
  • Fold logs for intermediate docker commands (#608)
  • Add ability to register a runner to the non-default self-hosted runner group (#613)


  • Double quotes around variable so CD works if path contains spaces (#602)
  • Bump lodash in /src/Misc/expressionFunc/hashFiles (#603)
  • Fix poor performance of process spawned from svc daemon (#614)


  • Move shared ExecutionContext properties under .Global (#594)

Learn more about GitHub Actions self-hosted runners

For questions please visit the GitHub Actions community forum

See more