Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 – Configurar a autenticação para pacotes do GitHub
Este tutorial usa o interno GITHUB_TOKEN fornecido pelo GitHub Actions. Para habilitar o acesso de leitura e gravação aos Pacotes do GitHub, adicione o seguinte permissions bloco ao fluxo de trabalho:
permissions:
packages: write
Isso concede as GITHUB_TOKEN permissões necessárias packages:writepackages:read.
O uso GITHUB_TOKEN tem várias vantagens:
- Não é necessário criar ou gerenciar segredos adicionais
- Funciona automaticamente para solicitações de pull de bifurcações (com acesso somente leitura)
- Escopo para o repositório específico e a execução do fluxo de trabalho
Observação
Como alternativa, você pode usar um PAT (Token de Acesso Pessoal) clássico se precisar de acesso entre repositórios ou outros cenários avançados. Siga as instruções do GitHub para gerar um PAT (Token de Acesso Pessoal) clássico com packages:write permissões e packages:read , em seguida, adicione-o como um segredo em seu repositório e use ${{ secrets.YOUR_PAT_NAME }} em vez de ${{ secrets.GITHUB_TOKEN }} nos exemplos abaixo.
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 para configurar a origem do NuGet com seu GITHUB_TOKEN:
permissions:
packages: write
jobs:
build:
runs-on: windows-latest
steps:
# ... other steps ...
- 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.GITHUB_TOKEN }}"
.$(${{ env.VCPKG_EXE }} fetch nuget) `
setapikey "${{ secrets.GITHUB_TOKEN }}" `
-Source "${{ env.FEED_URL }}"
No Linux, você precisa mono executar nuget.exeo . Você pode instalar mono usando o gerenciador de pacotes do sistema da distribuição:
apt install mono-complete
Observe que ubuntu-22.04 os executores do GitHub Actions vêm com mono pré-instalado, mas começando com ubuntu-24.04 (que ubuntu-latest atualmente aponta para), mono não vem mais pré-instalado.
permissions:
packages: write
jobs:
build:
runs-on: ubuntu-latest
steps:
# ... other steps ...
- 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.GITHUB_TOKEN }}"
mono `${{ env.VCPKG_EXE }} fetch nuget | tail -n 1` \
setapikey "${{ secrets.GITHUB_TOKEN }}" \
-Source "${{ env.FEED_URL }}"
Observação
O padrão GITHUB_TOKEN fornecido pelo GitHub Actions não tem as permissões necessárias para carregar ou baixar pacotes armazenados em cache.
Para habilitar o armazenamento em cache de pacotes no GitHub Packages, use um Token de Acesso Pessoal (PAT) e verifique se ele inclui os seguintes escopos:
packages:readpackages:write
Armazene o PAT como um segredo do repositório (por exemplo VCPKG_PAT_TOKEN) e faça referência a ele em seu fluxo de trabalho:
-Password: "${{ secrets.VCPKG_PAT_TOKEN }}"
-Source: "${{ env.FEED_URL }}"
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: