Compartilhar via


Tutorial: Configurar um cache binário vcpkg usando pacotes do GitHub em um fluxo de trabalho de ações do GitHub

Observação

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

O GitHub Packages oferece um repositório conveniente para seus pacotes binários NuGet produzidos pelo vcpkg. Neste tutorial, mostraremos como configurar um cache binário no fluxo de trabalho de Ações do GitHub que usa Pacotes do GitHub como armazenamento remoto.

Neste tutorial, você aprenderá como:

Pré-requisitos

  • Um editor de código
  • Um repositório do GitHub usando ações do GitHub
  • Um projeto usando vcpkg

1 - Forneça um token de acesso pessoal do GitHub

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

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

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

2 – Bootstrap vcpkg

vcpkg adquire sua própria cópia do nuget.exe executável que ele usa durante operações de cache binário. Este tutorial usa o vcpkg adquirido 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

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

3 - Configurar variáveis de ambiente necessárias

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

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"

Youo pode precisar substituir o valor de VCPKG_EXE pelo local do executável vcpkg gerado na etapa bootstrap vcpkg .

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

4 - Adicionar pacotes do GitHub como fonte NuGet

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

Adicione a seguinte etapa no 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 usando o Ubuntu vêm com mono pré-instalado. 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 secreto 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 seu feed NuGet hospedado em Pacotes do GitHub dentro do seu fluxo de trabalho do GitHub Acions.

Próximas etapas

Aqui estão outras tarefas para tentar em seguida: