Pular para o conteúdo principal

Desenvolvendo Actions (JS, Docker e Ações Compostas)

Introdução

Criar suas próprias actions permite padronizar fluxos e compartilhar lógica entre repositórios. Nesta aula, apresentamos os três tipos principais — JavaScript, Docker e Composite — e como definir metadados, inputs e outputs para publicação segura.

Definição

Actions JavaScript executam código Node.js diretamente no executor, com inicialização rápida. Actions Docker empacotam um contêiner com dependências fixas, úteis quando o ambiente precisa ser controlado. Ações compostas combinam etapas uses: e run: em YAML, sem imagem própria, ideais para orquestrar comandos e ações existentes.

Links oficiais:

Explicação Técnica

Toda action possui um arquivo de metadata (action.yml ou action.yaml) que declara name, description, inputs, outputs e runs. Em JavaScript, runs: using: node20 aponta para o arquivo principal (por exemplo, dist/index.js). Em Docker, runs: using: docker referencia a imagem (local Dockerfile ou registry). Em action composta, runs: using: composite lista etapas com shell e run, podendo usar outras actions.

Inputs são acessados via ${{ inputs.<nome> }} em composite e por APIs/utilitários no caso de JS/Docker. Outputs são emitidos escrevendo pares chave=valor em GITHUB_OUTPUT. Versione sua action com tags (v1, v1.2.0) e prefira pinning por SHA em consumidores críticos. Forneça README com exemplos e tabela de inputs/outputs.

Boas práticas: inclua testes, lint e release automation; evite requerer privilégios elevados; minimize superfícies de ataque (dependências e permissões). Documente limites e erros comuns com mensagens claras.

Exemplo

Exemplo de action composta mínima (action.yml) e seu uso em um workflow, mostrando input e output simples.

# action.yml (no repositório da action)
name: "Echo Name"
description: "Exibe uma saudação simples"
inputs:
name:
description: "Nome a exibir"
required: false
default: "Mundo"
outputs:
message:
description: "Mensagem gerada"
runs:
using: "composite"
steps:
- id: make-msg
shell: bash
run: |
MSG="Olá, ${{ inputs.name }}!"
echo "message=${MSG}" >> "$GITHUB_OUTPUT"

Uso da action no workflow:

name: Aula 26 — Demo Action
on: { workflow_dispatch: }

jobs:
demo:
runs-on: ubuntu-latest
steps:
- name: Usar action
uses: my-org/echo-name@v1
with:
name: "Estudante"
- name: Mostrar output
run: |
echo "Mensagem: ${{ steps.make-msg.outputs.message }}"

No exemplo, a action composta gera um output message via GITHUB_OUTPUT e o workflow consumidor imprime a mensagem. Em uma action JS, a lógica seria implementada em Node e referenciada no action.yml. Em Docker, a lógica viria na imagem definida.

Conclusão

Escolha o tipo de action conforme a necessidade de ambiente e velocidade. Descreva metadados, inputs e outputs com clareza, publique versões estáveis e incentive pinning quando segurança é prioridade. Com isso, suas actions tornam-se reutilizáveis, previsíveis e fáceis de manter.