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.exe
o . 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: