Publicar e instalar um pacote no GitHub Actions

É possível configurar um fluxo de trabalho no GitHub Actions para publicar ou instalar automaticamente um pacote do GitHub Package Registry.

GitHub Package Registry está disponível com GitHub Free, GitHub Pro, GitHub Free para organizações, GitHub Team, GitHub Enterprise Cloud, GitHub Enterprise Server e GitHub AE.

Sobre GitHub Package Registry com GitHub Actions

O GitHub Actions ajuda você a automatizar seus fluxos de trabalho de desenvolvimento de software no mesmo lugar que você armazena o código e colabora em pull requests e problemas. Você pode escrever tarefas individuais, chamadas de ações e combiná-las para criar um fluxo de trabalho personalizado. Com o GitHub Actions, você pode criar recursos completos de integração contínua (CI, Continuous Integration) e implantação contínua (CD, Continuous Deployment) diretamente no seu repositório. Para obter mais informações, consulte "Sobre GitHub Actions".

Você pode estender os recursos de CI e CD do seu repositório publicando ou instalando pacotes como parte do seu fluxo de trabalho.

Efetuar a autenticação nos registros do pacote em GitHub

To authenticate to package registries on GitHub Enterprise Server, we recommend using the GITHUB_TOKEN that GitHub Enterprise Server automatically creates for your repository when you enable GitHub Actions instead of a personal access token for authentication. You should set the permissions for this access token in the workflow file to grant read access for the contents scope and write access for the packages scope. Para bifurcações, o GITHUB_TOKEN recebe acesso de leitura para o repositório principal. Para obter mais informações, consulte "Autenticação com o GITHUB_TOKEN".

Você pode fazer referência ao GITHUB_TOKEN no seu arquivo de fluxo de trabalho usando o contexto {{secrets.GITHUB_TOKEN}}. Para obter mais informações, consulte "Permissões para o GITHUB_TOKEN".

Sobre permissões e acesso de pacote para pacotes pertencentes ao repositório

Note: Repository-owned packages include RubyGems, npm, Apache Maven, NuGet, Os pacotes do Gradle e Docker que usam o pacote namespace docker.pkg.github.com.

Quando você habilita o GitHub Actions, o GitHub instala um aplicativo GitHub no repositório. O segredo GITHUB_TOKEN é um token de acesso de instalação do aplicativo GitHub. Você pode usar o token de acesso de instalação para efetuar a autenticação em nome do aplicativo GitHub instalado no seu repositório. As permissões do token são restritas ao repositório do fluxo de trabalho. Para obter mais informações, consulte "Permissões para o GITHUB_TOKEN".

GitHub Package Registry permite que você faça push e pull de pacotes por meio do GITHUB_TOKEN disponível para um fluxo de trabalho de GitHub Actions.

Publicar um pacote usando uma ação

Você pode usar GitHub Actions para publicar automaticamente pacotes como parte do fluxo de integração contínua (CI). Esta abordagem da implantação contínua (CD) permite que você automatize a criação de novas versões do pacote, se o código atender aos seus padrões de qualidade. Por exemplo, você pode criar um fluxo de trabalho que executa testes CI toda vez que um desenvolvedor faz push do código para um branch específico. Se os testes passarem, o fluxo de trabalho poderá publicar uma nova versão do pacote em GitHub Package Registry.

As etapas de configuração variam de acordo com o cliente do pacote. Para obter informações gerais sobre a configuração de um fluxo de trabalho para GitHub Actions, consulte "Configurar um fluxo de trabalho."

The following example demonstrates how you can use GitHub Actions to build and test your app, and then automatically create a Docker image and publish it to GitHub Package Registry.

Crie um novo arquivo de fluxo de trabalho no repositório (como .github/workflows/deploy-image.yml) e adicione o YAML a seguir:

YAML
name: Create and publish a Docker image

# This workflow uses actions that are not certified by GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# documentação.

on:
  push:
    branches: ['release']

jobs:
  run-npm-build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: npm install and build webpack
        run: |
          npm install
          npm run build
      - uses: actions/upload-artifact@main
        with:
          name: webpack artifacts
          path: public/

  run-npm-test:
    runs-on: ubuntu-latest
    needs: run-npm-build
    strategy:
      matrix:
        os: [ubuntu-latest]
        node-version: [12.x, 14.x]
    steps: 
      - uses: actions/checkout@v2
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node-version }}
      - uses: actions/download-artifact@main
        with:
          name: webpack artifacts
          path: public
      - name: npm install, and test
        run: |
          npm install
          npm test
        env:
          CI: true

  build-and-push-image:
    runs-on: ubuntu-latest
    needs: run-npm-test 
    permissions: 
      contents: read
      packages: write 
    steps:
      - name: Checkout
        uses: actions/checkout@v2
      - name: Log in to GitHub Docker Registry
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          registry: docker.pkg.github.com
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push Docker image
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          push: true
          tags: |
            docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}

As configurações relevantes são explicadas na seguinte tabela. Para obter detalhes completos sobre cada elemento em um fluxo de trabalho, consulte "sintaxe de fluxo de trabalho para GitHub Actions".

on:
  push:
    branches: ['release']
Configura o fluxo de trabalho Criar e publicar uma imagem Docker para ser executado toda vez que uma alteração é enviada para o branch denominado versão.
run-npm-build:
  runs-on: ubuntu-latest
  steps:
    - uses: actions/checkout@v2
    - name: npm install and build webpack
      run: |
        npm install
        npm run build
    - uses: actions/upload-artifact@main
      with:
        name: webpack artifacts
        path: public/
Este trabalho instala o NPM e o usa para criar o aplicativo.
run-npm-test:
  runs-on: ubuntu-latest
  needs: run-npm-build
  strategy:
    matrix:
      os: [ubuntu-latest]
      node-version: [12.x, 14.x]
  steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
    - uses: actions/download-artifact@main
      with:
        name: webpack artifacts
        path: public
    - name: npm install, and test
      run: |
        npm install
        npm test
      env:
        CI: true
Este trabalho usa teste do npm para testar o código. O comando needs: run-npm-build torna esse trabalho dependente do trabalho run-npm-build.
build-and-push-image:
  runs-on: ubuntu-latest
  needs: run-npm-test
Este trabalho publica o pacote. O comando needs: run-npm-test torna essa tarefa dependente do trabalho run-npm-test.
permissions: 
  contents: read
  packages: write 
Define as permissões concedidas ao GITHUB_TOKEN para as ações deste trabalho.
- name: Log in to GitHub Docker Registry
  uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
  with:
    registry: docker.pkg.github.com
    username: ${{ github.actor }}
    password: ${{ secrets.GITHUB_TOKEN }}
Cria uma nova etapa denominada Iniciar sessão no registro do GitHub Docker, que faz login no registro usando a conta e a senha que publicará os pacotes. Uma vez publicados, os pacotes pertencem à conta definida aqui.
- name: Build and push Docker image
Cria uma nova etapa denominada Criar e fazer push da imagem do Docker. Esta etapa é executada como parte do trabalho build-and-push-image.
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
Usa a ação build-push-action do Docker para criar a imagem com base no arquivo Docker do seu repositório. Se a criação for bem-sucedida, ela faz p push da imagem para GitHub Package Registry.
with:
Envia os parâmetros necessários para a ação build-push-action. Estas são definidas nas linhas subsequentes.
push: true
Faz push desta imagem para o registro se for construída com sucesso.
tags: |
docker.pkg.github.com/${{ github.repository }}/octo-image:${{ github.sha }}
Marca a imagem com o SHA do commit que acionou o fluxo de trabalho.

Este novo fluxo de trabalho será executado automaticamente toda vez que você fizer uma alteração em uma versão nomeada do branch no repositório. Você pode visualizar o progresso na aba Ações.

Alguns minutos após a conclusão do fluxo de trabalho, o novo pacote ficará visível no seu repositório. Para encontrar seus pacotes disponíveis, consulte "Visualizar os pacotes de um repositório".

Instalar um pacote usando uma ação

Você pode instalar pacotes como parte de seu fluxo de CI usando o GitHub Actions. Por exemplo, você poderia configurar um fluxo de trabalho para que sempre que um desenvolvedor fizesse push do código para um pull request, o fluxo de trabalho resolveria as dependências, fazendo o download e instalando pacotes hospedados pelo GitHub Package Registry. Em seguida, o fluxo de trabalho pode executar testes de CI que exigem as dependências.

Installing packages hosted by GitHub Package Registry through GitHub Actions requires minimal configuration or additional authentication when you use the GITHUB_TOKEN.

As etapas de configuração variam de acordo com o cliente do pacote. Para obter informações gerais sobre a configuração de um fluxo de trabalho para GitHub Actions, consulte "Configurar um fluxo de trabalho."

Esse documento ajudou você?

Política de Privacidade

Ajude-nos a tornar esses documentos ótimos!

Todos os documentos do GitHub são de código aberto. Você percebeu que algo que está errado ou não está claro? Envie um pull request.

Faça uma contribuição

Ou, aprenda como contribuir.