GitHub Actions e .NET

Nesta visão geral, você conhecerá a função que o GitHub Actions desempenha no desenvolvimento de aplicativos .NET. O GitHub Actions permite que os seus repositórios de código-fonte automatizem a CI (integração contínua) e a CD (entrega contínua). Além disso, o GitHub Actions expõe cenários mais avançados, fornecendo ganchos para automação com revisões de código, gerenciamento de branches e triagem de problemas. Com o código-fonte do .NET no GitHub, você pode aproveitar o GitHub Actions de várias maneiras.

GitHub Actions

O GitHub Actions representa comandos autônomos, como:

  • actions/checkout – Essa ação faz check-out do repositório em $GITHUB_WORKSPACE, para que o fluxo de trabalho possa acessá-lo.
  • actions/setup-dotnet – Essa ação configura um ambiente da CLI do .NET para uso em ações.
  • dotnet/versionsweeper – Essa ação faz uma varredura nos repositórios do .NET para versões de destino fora do suporte do .NET.

Embora esses comandos sejam isolados para uma só ação, eles são eficientes por meio da composição do fluxo de trabalho. Na composição do fluxo de trabalho, você define os eventos que disparam o fluxo de trabalho. Depois que um fluxo de trabalho está em execução, há vários trabalhos que ele é instruído a executar. Cada trabalho define qualquer número de etapas. As etapas delegam isso para o GitHub Actions ou, como alternativa, chamam scripts de linha de comando.

Para obter mais informações, confira Introdução ao GitHub Actions. Pense em um arquivo de fluxo de trabalho como uma composição que representa as várias etapas para criar, testar e/ou publicar um aplicativo. Muitos comandos da CLI do .NET estão disponíveis, e a maioria deles pode ser usada no contexto de uma Ação do GitHub.

GitHub Actions personalizadas

Embora haja muitas GitHub Actions disponíveis no Marketplace, talvez você queira criar uma própria. Você pode criar GitHub Actions que executam aplicativos .NET. Para obter mais informações, confira Tutorial: Criar uma Ação do GitHub com o .NET

Arquivo de fluxo de trabalho

As GitHub Actions são utilizadas por meio de um arquivo de fluxo de trabalho. O arquivo de fluxo de trabalho precisa estar localizado no diretório .github/workflows do repositório e precisa ser YAML (*.yml ou *.yaml). Os arquivos de fluxo de trabalho definem a composição do fluxo de trabalho. Um fluxo de trabalho é um processo automatizado configurável constituído de um ou mais trabalhos. Para obter mais informações, consulte Sintaxe do fluxo de trabalho para o GitHub Actions.

Exemplo de arquivos de fluxo de trabalho

Há muitos exemplos de arquivos de fluxo de trabalho do .NET fornecidos como tutoriais e guias de início rápido. Estes são vários bons exemplos de nomes de arquivos de fluxo de trabalho:

Nome do arquivo de fluxo de trabalho

Descrição

Compila o código-fonte. Se o código-fonte não for compilado, isso falhará.

Exercita os testes de unidade no repositório. Para executar testes, o código-fonte primeiro precisa ser compilado. Isso é realmente um fluxo de trabalho de build e teste (ele substitui o fluxo de trabalho build-validation.yml). A falha nos testes de unidade causará uma falha no fluxo de trabalho.

Empacota e publica o código-fonte em um destino.

Analisa o código quanto a vulnerabilidades de segurança e erros de codificação. Todas as vulnerabilidades descobertas podem causar uma falha.

Segredos criptografados

Para usar segredos criptografados nos seus arquivos de fluxo de trabalho, referencie os segredos usando a sintaxe de expressão de fluxo de trabalho do objeto de contexto secrets.

${{ secrets.MY_SECRET_VALUE }} # The MY_SECRET_VALUE must exist in the repository as a secret

Os valores secretos nunca são impressos nos logs. Em vez disso, os nomes deles são impressos com um asterisco que representa os valores. Por exemplo, conforme cada etapa é executada em um trabalho, todos os valores que ele usa são uma saída para o log de ações. Os valores secretos são renderizados de maneira semelhante ao seguinte:

MY_SECRET_VALUE: ***

Importante

O contexto secrets fornece o token de autenticação do GitHub com escopo no repositório, no branch e na ação. Ele é fornecido pelo GitHub sem nenhuma intervenção do usuário:

${{ secrets.GITHUB_TOKEN }}

Para obter mais informações, confira Como usar segredos criptografados em um fluxo de trabalho.

Eventos

Os fluxos de trabalho são disparados por muitos tipos diferentes de eventos. Além dos eventos de webhook, que são os mais comuns, também há eventos agendados e eventos manuais.

Exemplo de evento de webhook

O seguinte exemplo mostra como especificar um gatilho de evento de webhook para um fluxo de trabalho:

name: code coverage

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main, staging

jobs:
  coverage:

    runs-on: ubuntu-latest

    # steps omitted for brevity

No fluxo de trabalho anterior, os eventos push e pull_request vão disparar o fluxo de trabalho a ser executado.

Exemplo de evento agendado

O seguinte exemplo mostra como especificar um gatilho de evento agendado (trabalho cron) para um fluxo de trabalho:

name: scan
on:
  schedule:
  - cron: '0 0 1 * *'
  # additional events omitted for brevity

jobs:
  build:
    runs-on: ubuntu-latest

    # steps omitted for brevity

No fluxo de trabalho anterior, o evento schedule especifica o cron de '0 0 1 * *', que vai disparar a execução do fluxo de trabalho no primeiro dia de cada mês. A execução de fluxos de trabalho de acordo com um agendamento é ótimo para os fluxos de trabalho que levam muito tempo para serem executados ou para executar ações que exigem menos atenção.

Exemplo de evento manual

O seguinte exemplo mostra como especificar um gatilho de evento manual para um fluxo de trabalho:

name: build
on:
  workflow_dispatch:
    inputs:
      reason:
        description: 'The reason for running the workflow'
        required: true
        default: 'Manual run'
  # additional events omitted for brevity

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 'Print manual run reason'
        if: ${{ github.event_name == 'workflow_dispatch' }}
        run: |
          echo 'Reason: ${{ github.event.inputs.reason }}'

    # additional steps omitted for brevity

No fluxo de trabalho anterior, o evento workflow_dispatch exige uma reason como entrada. O GitHub vê isso, e a interface do usuário muda dinamicamente para solicitar ao usuário o motivo da execução manual do fluxo de trabalho. As steps imprimirão o motivo fornecido pelo usuário.

Para obter mais informações, confira Eventos que disparam fluxos de trabalho.

CLI do .NET

A CLI (interface de linha de comando) do .NET é uma ferramenta multiplataforma para desenvolvimento, criação, execução e publicação de aplicativos .NET. A CLI do .NET é usada para a run como parte das steps individuais em um arquivo de fluxo de trabalho. Os comandos comuns incluem:

Para obter mais informações, confira Visão geral da CLI do .NET

Confira também

Para ver uma análise mais detalhada do GitHub Actions com o .NET, considere os seguintes recursos: