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.exeda 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.

L'attività è terminata. 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: