Compartilhar via


Tutorial: Configurar um cache binário vcpkg usando GitHub Packages em um fluxo de trabalho do GitHub Actions

Observação

Este tutorial usa feeds NuGet hospedados em GitHub Packages, mas as mesmas instruções podem ser usadas para outros provedores de feed NuGet, por exemplo: Azure Artifacts, com alterações mínimas.

GitHub Packages oferece um repositório conveniente para seus pacotes binários NuGet produzidos pelo vcpkg. Neste tutorial, mostramos como configurar um cache binário no fluxo de trabalho do GitHub Actions que usa o GitHub Packages como armazenamento remoto.

Neste tutorial, você aprenderá como:

Pré-requisitos

  • Um editor de código
  • Um repositório do GitHub usando o GitHub Actions
  • Um projeto usando vcpkg

1 – Fornecer um token de acesso pessoal do GitHub

Siga as instruções do GitHub para gerar um PAT (Token de Acesso Pessoal) clássico para seu repositório, certifique-se de conceder a ele as packages:write permissões e packages:read .

Em seguida, adicione seu GitHub PAT como um segredo disponível nos fluxos de trabalho do GitHub Action do seu repositório. Neste tutorial, assumimos que você nomeie seu segredo como GH_PACKAGES_TOKEN.

O PAT integrado fornecido por GITHUB_TOKEN tem apenas a packages:read permissão, você pode usá-lo se planeja ter um cache binário somente leitura em seu fluxo de trabalho.

2 - Bootstrap vcpkg

O vcpkg adquire sua própria cópia do executável que ele usa durante as nuget.exe operações de cache binário. Este tutorial usa o arquivo .nuget.exe

Adicione uma etapa para inicializar vcpkg em seu fluxo de trabalho:

- name: Bootstrap vcpkg
  shell: pwsh
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
  shell: bash
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

Pode ser necessário substituir o local do script de bootstrap vcpkg pelo correto para o seu fluxo de trabalho, este tutorial pressupõe que o vcpkg esteja localizado em uma vcpkg pasta na raiz do repositório.

3 - Configure as variáveis de ambiente necessárias

Adicione as seguintes variáveis de ambiente ao seu arquivo de fluxo de trabalho (substitua <OWNER> pelo nome de usuário do GitHub ou pelo nome da organização):

env: 
  USERNAME: <OWNER>
  VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
  FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
  VCPKG_BINARY_SOURCES: "clear;nuget,https://nuget.pkg.github.com/<OWNER>/index.json,readwrite"

Pode ser necessário substituir o valor de VCPKG_EXE pelo local do executável vcpkg gerado na etapa bootstrap vcpkg .

Nesta etapa, você está configurando VCPKG_BINARY_SOURCES para usar seu feed do GitHub Packages como uma fonte de cache binário, leia a referência de cache binário para saber mais.

4 – Adicionar GitHub Packages como uma fonte NuGet

O vcpkg fetch nuget comando gera a localização do vcpkg-acquired nuget.exe, baixando o executável, se necessário.

Adicione a seguinte etapa ao arquivo de fluxo de trabalho do GitHub Actions:

- name: Add NuGet sources
  shell: pwsh
  run: |
    .$(${{ env.VCPKG_EXE }} fetch nuget) `
      sources add `
      -Source "${{ env.FEED_URL }}" `
      -StorePasswordInClearText `
      -Name GitHubPackages `
      -UserName "${{ env.USERNAME }}" `
      -Password "${{ secrets.GH_PACKAGES_TOKEN }}"
    .$(${{ env.VCPKG_EXE }} fetch nuget) `
      setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" `
      -Source "${{ env.FEED_URL }}"

No Linux, você precisa mono executar nuget.exeo . Os executores do GitHub Actions que usam o Ubuntu vêm pré-instalados mono . Caso contrário, você pode instalar mono usando o gerenciador de pacotes do sistema da sua distribuição.

- name: Add NuGet sources
  shell: bash
  env: 
    VCPKG_EXE: ${{ github.workspace }}/vcpkg/vcpkg
    USERNAME: <OWNER>
    FEED_URL: https://nuget.pkg.github.com/<OWNER>/index.json
  run: |
    mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
      sources add \
      -Source "${{ env.FEED_URL }}" \
      -StorePasswordInClearText \
      -Name GitHubPackages \
      -UserName "${{ env.USERNAME }}" \
      -Password "${{ secrets.GH_PACKAGES_TOKEN }}"
    mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
      setapikey "${{ secrets.GH_PACKAGES_TOKEN }}" \
      -Source "${{ env.FEED_URL }}"

Talvez seja necessário substituir GH_PACKAGES_TOKEN pelo nome de segredo correto que você deu ao PAT gerado na etapa fornecer um token de acesso pessoal do GitHub.

Pronto! O vcpkg agora carregará ou restaurará pacotes do feed do NuGet hospedado no GitHub Packages dentro do fluxo de trabalho do GitHub Actions.

Próximas etapas

Aqui estão outras tarefas para tentar a seguir: