Observação: no momento, não há suporte para os 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.
Aviso: ao criar fluxos de trabalho e ações, você sempre deve considerar se o seu código pode 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.
-
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". -
Clone o repositório para seu computador. Para obter mais informações, confira "Clonar um repositório".
-
No seu terminal, mude os diretórios para seu novo repositório.
Shell cd hello-world-composite-action
cd hello-world-composite-action
-
No repositório
hello-world-composite-action
, crie um arquivo chamadogoodbye.sh
com o código de exemplo:Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh
-
No terminal, torne
goodbye.sh
executável.Shell chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
-
No terminal, faça check-in do arquivo
goodbye.sh
.Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
Criar um arquivo de metadados de ação
-
No repositório
hello-world-composite-action
, crie um arquivo chamadoaction.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
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 de
who-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 "Accessing contextual information about workflow runs". -
No terminal, faça check-in do arquivo
action.yml
.Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push
-
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
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.
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 }}
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.