Composite actions, before reusable workflows existed

Five workflows repeating the same eight setup steps is five places to update, and reusable workflows do not exist yet — a composite action is what does.

# .github/actions/setup/action.yml
name: Setup PHP and dependencies
runs:
  using: composite
  steps:
    - uses: shivammathur/setup-php@v2
      with: { php-version: '7.4', coverage: none }
    - run: composer install --no-interaction
      shell: bash

# and the caller
- uses: ./.github/actions/setup

shell: bash is required on every run step in a composite action and omitting it is an unhelpful error. The limitation that matters in 2020 is that a composite action cannot contain uses: steps in the first release — that arrives later in the year — so an early version has to inline what it wraps. Reusable workflows land in 2021 and are the better tool for a whole job; composite actions remain the right one for a sequence of steps.