Skip to main content

Criar uma ação composta

Neste guia, você aprenderá a criar uma ação composta.

Platform navigation

Note

No momento, não há suporte para executores hospedados no GitHub no GitHub Enterprise Server. Você pode ver mais informações sobre o suporte futuro planejado no GitHub public roadmap.

Introdução

Neste guia, você aprenderá os componentes básicos necessários para criar e usar uma ação composta empacotada. Para manter o foco deste guia nos componentes necessários para empacotar a ação, a funcionalidade do código da ação é mínima. A ação imprime "Hello World" e "Goodbye", ou, se você fornecer um nome personalizado, imprimirá "Hello [who-to-greet]" e "Goodbye". A ação também mapeia um número aleatório para a variável de saída random-number e executa um script chamado goodbye.sh.

Ao concluir este projeto, você entenderá como criar a sua própria ação composta e testá-la em um fluxo de trabalho.

Warning

Ao criar fluxos de trabalho e ações, sempre considere se o código poderá executar entradas não confiáveis de possíveis invasores. Certos contextos devem ser tratados como entradas não confiáveis, uma vez que um invasor pode inserir seu próprio conteúdo malicioso. Para obter mais informações, confira "Fortalecimento de segurança para o GitHub Actions".

Ações compostas e fluxos de trabalho reutilizáveis

As ações compostas permitem coletar uma série de etapas de tarefas de fluxo de trabalho em uma única ação que você pode executar como uma única etapa de trabalho em vários fluxos de trabalho. Os fluxos de trabalho reutilizáveis fornecem outra maneira de evitar a duplicação, permitindo que você execute um fluxo de trabalho completo de dentro de outros fluxos de trabalho. Para obter mais informações, confira "Evitando duplicação".

Pré-requisitos

Antes de começar, crie um repositório em GitHub.

  1. Crie um repositório público novo em GitHub. Você pode escolher qualquer nome de repositório ou usar o exemplo de hello-world-composite-action a seguir. É possível adicionar esses arquivos após push do projeto no GitHub Enterprise Server. Para obter mais informações, confira "Criar um repositório".

  2. Clone o repositório para seu computador. Para obter mais informações, confira "Clonar um repositório".

  3. No seu terminal, mude os diretórios para seu novo repositório.

    Shell
    cd hello-world-composite-action
    
  4. No repositório hello-world-composite-action, crie um arquivo chamado goodbye.sh com o código de exemplo:

    Shell
    echo "echo Goodbye" > goodbye.sh
    
  5. No terminal, torne goodbye.sh executável.

    Shell
    chmod +x goodbye.sh
    
Shell
chmod +x goodbye.sh
Shell
git add --chmod=+x -- goodbye.sh
  1. No terminal, faça check-in do arquivo goodbye.sh.

    Shell
    git add goodbye.sh
    git commit -m "Add goodbye script"
    git push
    
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git commit -m "Add goodbye script"
git push

Criar um arquivo de metadados de ação

  1. No repositório hello-world-composite-action, crie um arquivo chamado action.yml e adicione o código de exemplo a seguir. Para obter mais informações sobre essa sintaxe, confira "Sintaxe de metadados para o GitHub Actions".

    YAML
    name: 'Hello World'
    description: 'Greet someone'
    inputs:
      who-to-greet:  # id of input
        description: 'Who to greet'
        required: true
        default: 'World'
    outputs:
      random-number:
        description: "Random number"
        value: ${{ steps.random-number-generator.outputs.random-number }}
    runs:
      using: "composite"
      steps:
        - name: Set Greeting
          run: echo "Hello $INPUT_WHO_TO_GREET."
          shell: bash
          env:
            INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}
    
        - name: Random Number Generator
          id: random-number-generator
          run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
          shell: bash
    
        - name: Set GitHub Path
          run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
          shell: bash
          env:
            GITHUB_ACTION_PATH: ${{ github.action_path }}
    
        - name: Run goodbye.sh
          run: goodbye.sh
          shell: bash
    
    

    Esse arquivo define a entrada dewho-to-greet, mapeia o número gerado aleatoriamente para a variável de saídarandom-number, adiciona o caminho da ação ao caminho do sistema executor (para localizar o scriptgoodbye.sh durante a execução) e executa o scriptgoodbye.sh.

    Para obter mais informações sobre como gerenciar saídas, confira "Sintaxe de metadados para o GitHub Actions".

    Para obter mais informações sobre como usar o github.action_path, confira "Acessar informações contextuais sobre execuções de fluxo de trabalho".

  2. No terminal, faça check-in do arquivo action.yml.

    Shell
    git add action.yml
    git commit -m "Add action"
    git push
    
  3. No seu terminal, adicione uma tag. Este exemplo usa uma tag chamada v1. Para obter mais informações, confira "Sobre ações personalizadas".

    Shell
    git tag -a -m "Description of this release" v1
    git push --follow-tags
    

Testar sua ação em um fluxo de trabalho

O código de fluxo de trabalho a seguir usa a ação olá, mundo concluída que você criou em "Criar uma ação composta".

Copie o código do fluxo de trabalho em um arquivo .github/workflows/main.yml em outro repositório, substituindo actions e SHA pelo proprietário do repositório e o SHA do commit que deseja usar, respectivamente. Você também pode substituir a entrada who-to-greet pelo seu nome.

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        uses: OWNER/hello-world-composite-action@SHA
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

No repositório, clique na guia Ações e selecione a execução mais recente do fluxo de trabalho. A saída deve incluir: "Hello Mona the Octocat", o resultado do script "Goodbye" e um número aleatório.

Exemplo de ações compostas em GitHub

Encontre vários exemplos de ações compostas em GitHub.