Skip to main content

Esta versão do GitHub Enterprise será descontinuada em 2022-09-28. Nenhum lançamento de patch será feito, mesmo para questões críticas de segurança. Para obter melhor desempenho, melhorar a segurança e novos recursos, upgrade to the latest version of GitHub Enterprise. Para ajuda com a atualização, contact GitHub Enterprise support.

Usando scripts para testar seu código em um executor

Como usar funcionalidades essenciais de GitHub Actions para integração contínua (IC).

Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.

Visão geral do exemplo

Este artigo usa um exemplo de fluxo de trabalho para demonstrar algumas das principais funcionalidades da CI de GitHub Actions. Quando esse fluxo de trabalho é acionado, ele executa automaticamente um script que verifica se o site Docs de GitHub tem algum link quebrado.

O diagrama a seguir mostra uma visão de alto nível das etapas do fluxo de trabalho e como elas são executadas dentro do trabalho:

Diagrama de visão geral das etapas do fluxo de trabalho

Características utilizadas neste exemplo

O exemplo de fluxo de trabalho demonstra os seguintes recursps de GitHub Actions:

FuncionalidadeImplementação
Acionando um fluxo de trabalho para funcionar automaticamente:push
Acionando um fluxo de trabalho para funcionar automaticamente:pull_request
Executando manualmente um fluxo de trabalho a partir da interface do usuário:workflow_dispatch
Definindo permissões para o token:permissões
Controlando quantas execuções de fluxo de trabalho ou trabalhos podem ser executados ao mesmo tempo:concorrência
Executando o trabalho em diferentes corredores, dependendo do repositório:runs-on
Clonando o repositório para o executor:actions/checkout
Instalando o no executor:actions/setup-node
Usando a ação de terceiros:trilom/file-changes-action

Exemplo de fluxo de trabalho

O fluxo de trabalho a seguir foi criado pela equipe de Engenharia de GitHub Para revisar a versão mais recente deste arquivo no repositório github/docs, consulte link-check-all.yml.

Observação: Cada linha deste fluxo de trabalho é explicada na próxima seção em "Compreendendo o exemplo".

YAML
name: 'Link Checker: All English'

# **What it does**: Renders the content of every page and check all internal links.
# **Why we have it**: To make sure all links connect correctly.
# **Who does it impact**: Docs content.

on:
  workflow_dispatch:
  push:
    branches:
      - main
  pull_request:

permissions:
  contents: read
  # Needed for the 'trilom/file-changes-action' action
  pull-requests: read

# This allows a subsequently queued workflow run to interrupt previous runs
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

jobs:
  check-links:
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 16.13.x
          cache: npm

      - name: Install
        run: npm ci

      # Creates file "$/files.json", among others
      - name: Gather files changed
        uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b
        with:
          fileOutput: 'json'

      # For verification
      - name: Show files changed
        run: cat $HOME/files.json

      - name: Link check (warnings, changed files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --max 100 \
            --check-anchors \
            --check-images \
            --verbose \
            --list $HOME/files.json

      - name: Link check (critical, all files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --exit \
            --verbose \
            --check-images \
            --level critical

Entendendo o exemplo

A tabela a seguir explica como cada um desses recursos são usados ao criar um fluxo de trabalho de GitHub Actions.

Código Explicação
YAML
name: 'Link Checker: All English'

O nome do fluxo de trabalho como ele aparecerá na aba "Ações" do repositório de GitHub.

YAML
on:

A palavra-chave 'on' permite definir os eventos que acionam quando o fluxo de trabalho é executado. Você pode definir vários eventos aqui. Para obter mais informações, consulte "Acionando um fluxo de trabalho."

YAML
  workflow_dispatch:

Adicione o evento "workflow_dispatch" se você quiser poder executar manualmente este fluxo de trabalho a partir da interface do usuário. Para obter mais informações, consulte workflow_dispatch.

YAML
  push:
    branches:
      - main

Adicione o evento "push", para que o fluxo de trabalho seja executado automaticamente toda vez que um commit for enviado por push para uma branch denominado "main". Para obter mais informações, consulte 'push'.

YAML
  pull_request:

Adicione o evento "pull_request", para que o fluxo de trabalho seja executado automaticamente toda vez que um pull request for criado ou atualizado. Para obter mais informações, consulte 'pull_request'.

YAML
permissions:
  contents: read
  pull-requests: read

Modifica as permissões padrão concedidas a "GITHUB_TOKEN". Isso vai variar dependendo das necessidades do seu fluxo de trabalho. Para obter mais informações, consulte "Atribuindo permissões a trabalhos."

YAML
concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'

Cria um grupo de concorrência para eventos específicos e usa o operador "||" para definir valores de recuo. Para obter mais informações, consulte "Usando concorrência."

YAML
  cancel-in-progress: true

Cancela qualquer trabalho ou fluxo de trabalho em execução no mesmo grupo de concorrência.

YAML
jobs:

Agrupa todos os trabalhos executados no arquivo do fluxo de trabalho.

YAML
  check-links:

Define uma trabalho com o ID "check-links" que é armazenado dentro da chave "jobs".

YAML
    runs-on: ${{ fromJSON('["ubuntu-latest", "self-hosted"]')[github.repository == 'github/docs-internal'] }}

Configura o trabalho a ser executado em um executor hospedado em GitHub ou em um executor auto-hospedado, dependendo do repositório que executa o fluxo de trabalho. Neste exemplo, o trabalho será executado em um runner auto-hospedado se o repositório for denominado "docs-internal" e estiver dentro da organização "github". Se o repositório não corresponder a este caminho, então ele será executado em um executor "ubuntu-latest" hospedado por GitHub. Para obter mais informações sobre essas opções consulte "Escolhendo o executor para um trabalho".

YAML
    steps:

Agrupa todos as etapas que serão executados como parte do trabalho check-links. Cada trabalho em um fluxo de trabalho tem sua própria seção "etapas".

YAML
      - name: Checkout
        uses: actions/checkout@v2

A palavra-chave "uses" diz para o trabalho recuperar a ação denominada "actions/checkout". Esta é uma ação que verifica seu repositório e o faz o download do runner, permitindo que você execute ações contra seu código (como, por exemplo, ferramentas de teste). Você deve usar a ação de checkout sempre que o fluxo de trabalho for executado no código do repositório ou você estiver usando uma ação definida no repositório.

YAML
      - name: Setup node
        uses: actions/setup-node@v2
        with:
          node-version: 16.13.x
          cache: npm

Esta etapa usa a ação actions/setup-node para instalar a versão especificada do pacote do Node.js de software no executor, que lhe dá acesso ao comando npm.

YAML
      - name: Install
        run: npm ci

A palavra-chave executar diz ao trabalho para executar um comando no executor. Neste caso, o npm ci é usado para instalar pacotes de software do npm para o projeto.

YAML
      - name: Gather files changed
        uses: trilom/file-changes-action@a6ca26c14274c33b15e6499323aac178af06ad4b
        with:
          fileOutput: 'json'

Usa a ação trilom/file-changes-action para coletar todos os arquivos alterados. Este exemplo está fixado a uma versão específica da ação usando o SHA a6ca26c14274c33b15e6499323aac178af06ad4b.

YAML
      - name: Show files changed
        run: cat $HOME/files.json

Lista o conteúdo de files.json. Isso será visível no log da execução do fluxo de trabalho e pode ser útil para depuração.

YAML
      - name: Link check (warnings, changed files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --max 100 \
            --check-anchors \
            --check-images \
            --verbose \
            --list $HOME/files.json

Esta etapa usa o comando 'executar' para executar um script armazenado no repositório em 'script/rendered-content-link-checker.mjs' e passa todos os parâmetros necessários para executar.

YAML
      - name: Link check (critical, all files)
        run: |
          ./script/rendered-content-link-checker.mjs \
            --language en \
            --exit \
            --verbose \
            --check-images \
            --level critical

Esta etapa também usa o comando run para executar um script que é armazenado no repositório em script/rendered-content-link-checker.mjs e passa um conjunto diferente de parâmetros.

Próximas etapas