Trabalho bem menos do que eu gostaria com Github Actions. Mas de vez em quando consigo aprender uns truques, talvez até óbvios para quem tem mais experiencia.

Mas vou deixar essa postagem, para ajudar alguém que possa vir a sofrer do mesmo problema no futuro.

Quase sempre que temos uma pipeline, precisamos organizar ela e reutilizar algumas etapas como execução de testes ou lint em ambientes e cenários diferentes.

O reutilizável

Além de escrever a ação que você pretende reutiliza, vc precisa indicar que ela serve para esse propósito. Para isso você tem que colocar o seguinte trecho em seu arquivo de action. Para efeitos de exemplo vou chamar de tests.yml

Nesse arquivo de action deixei habilitado o workflow_call esse é segredo para ter sua action sendo executada

name: Running Tests

on:
  workflow_call

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [16.x, 17.x]
    steps:
      - uses: actions/checkout@v2
      - name: npm CI
        run: npm ci
      - name: Running Unit Tests
        run: npm test

Pronto definimos qual serão os passos reutilizados, agora vamos pra invocação deles em outra etapa.

Executar os testes em cada Pull Request

Agora vamos usar o arquivo anterior, nesse caso será chamado em cada PR aberta. Para isso vamos usar a chave uses dentro do .ymlpara apontar o arquivo, que deve estar salvo na mesma pasta.

name: Pull Request 

on: 
  pull_request
jobs:
  test:
    uses: ./.github/workflows/test.yml

Coisa simples, caso você tenha outro cenário dependente pode usar needse apontar para o cenário anterior.