Esercitazione: Configurare una cache binaria vcpkg usando GitHub Packages in un flusso di lavoro di GitHub Actions
Nota
Questa esercitazione usa feed NuGet ospitati in GitHub Packages, ma le stesse istruzioni possono essere usate per altri provider di feed NuGet, ad esempio Azure Artifacts, con modifiche minime.
GitHub Packages offre un repository pratico per i pacchetti binari NuGet prodotti da vcpkg. In questa esercitazione viene illustrato come configurare una cache binaria nel flusso di lavoro di GitHub Actions che usa GitHub Packages come risorsa di archiviazione remota.
Questa esercitazione illustra come:
Prerequisiti
- Editor di codice
- Un repository GitHub con GitHub Actions
- Un progetto che usa vcpkg
1 - Specificare un token di accesso personale GitHub
Seguire le istruzioni di GitHub per generare un token di accesso personale (PAT) classico per il repository, assicurarsi di assegnargli le packages:write
autorizzazioni e packages:read
.
Aggiungere quindi il pat di GitHub come segreto disponibile nei flussi di lavoro di GitHub Action del repository. In questa esercitazione si presuppone che il nome del segreto sia GH_PACKAGES_TOKEN
.
Il pat predefinito fornito da GITHUB_TOKEN
dispone solo dell'autorizzazione packages:read
, è possibile usarlo se si prevede di avere una cache binaria di sola lettura nel flusso di lavoro.
2 - Bootstrap vcpkg
vcpkg acquisisce la propria copia del nuget.exe
file eseguibile usato durante le operazioni di memorizzazione nella cache binaria. Questa esercitazione usa l'oggetto acquisito nuget.exe
da vcpkg.
Aggiungere un passaggio per bootstrap vcpkg nel flusso di lavoro:
- name: Bootstrap vcpkg
shell: pwsh
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
shell: bash
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh
Potrebbe essere necessario sostituire il percorso dello script bootstrap vcpkg con quello corretto per il flusso di lavoro. Questa esercitazione presuppone che vcpkg si trovi in una vcpkg
cartella nella radice del repository.
3 - Configurare le variabili di ambiente necessarie
Aggiungere le variabili di ambiente seguenti al file del flusso di lavoro (sostituire <OWNER>
con il nome utente o il nome dell'organizzazione di 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"
Potrebbe essere necessario sostituire il valore di VCPKG_EXE
con il percorso dell'eseguibile vcpkg generato nel passaggio bootstrap vcpkg .
In questo passaggio si sta configurando VCPKG_BINARY_SOURCES
l'uso del feed di GitHub Packages come origine di memorizzazione nella cache binaria, leggere il riferimento alla memorizzazione nella cache binaria per altre informazioni.
4 - Aggiungere pacchetti GitHub come origine NuGet
Il vcpkg fetch nuget
comando restituisce il percorso del vcpkg-acquired nuget.exe
, scaricando il file eseguibile, se necessario.
Aggiungere il passaggio seguente nel file del flusso di lavoro di 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 }}"
In Linux è necessario mono
eseguire nuget.exe
. Gli strumenti di esecuzione di GitHub Actions che usano Ubuntu sono mono
preinstallati. In caso contrario, è possibile eseguire l'installazione mono
usando la gestione pacchetti di sistema della distribuzione.
- 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 }}"
Potrebbe essere necessario sostituire GH_PACKAGES_TOKEN
con il nome del segreto corretto assegnato al pat generato nel passaggio fornire un token di accesso personale GitHub.
Ecco fatto. vcpkg caricherà o ripristinerà i pacchetti dal feed NuGet ospitato in GitHub Packages all'interno del flusso di lavoro di GitHub Actions.
Passaggi successivi
Ecco altre attività da provare: