Dela via


Handledning: Konfigurera en vcpkg binär cache med GitHub Packages i ett GitHub Actions-arbetsflöde

Anmärkning

I den här handledningen används NuGet-flöden i GitHub Packages, men samma instruktioner kan användas för andra NuGet-flödesleverantörer, till exempel Azure Artifacts, med minimala ändringar.

GitHub Packages erbjuder en praktisk lagringsplats för dina NuGet-binära paket som produceras av vcpkg. I den här självstudien visar vi hur du konfigurerar en binär cache i ditt GitHub Actions-arbetsflöde som använder GitHub Packages som fjärrlagring.

I den här självstudien får du lära dig att:

Förutsättningar

  • En kodredigerare
  • En GitHub-lagringsplats med GitHub Actions
  • Ett projekt med vcpkg

1 – Konfigurera autentisering för GitHub-paket

I den här självstudien används den inbyggda informationen från GITHUB_TOKEN GitHub Actions. Om du vill aktivera både läs- och skrivåtkomst till GitHub Packages lägger du till följande permissions block i arbetsflödet:

permissions:
  packages: write

Detta ger nödvändiga GITHUB_TOKENpackages:write och packages:read behörigheter. Användning GITHUB_TOKEN har flera fördelar:

  • Du behöver inte skapa eller hantera ytterligare hemligheter
  • Fungerar automatiskt för pull-begäranden från förgreningar (med skrivskyddad åtkomst)
  • Begränsad till den specifika lagringsplatsen och arbetsflödeskörningen

Anmärkning

Du kan också använda en klassisk personlig åtkomsttoken (PAT) om du behöver åtkomst mellan lagringsplatser eller andra avancerade scenarier. Följ GitHubs instruktioner för att generera en klassisk personlig åtkomsttoken (PAT) med packages:write och packages:read behörigheter, lägg sedan till den som en hemlighet på lagringsplatsen och använd ${{ secrets.YOUR_PAT_NAME }} den i stället för ${{ secrets.GITHUB_TOKEN }} i exemplen nedan.

2 - Bootstrap vcpkg

vcpkg anskaffar en egen kopia av den nuget.exe körbara filen som den använder under binära cachelagringsåtgärder. I den här självstudien används nuget.exe, som har hämtats genom vcpkg.

Lägg till ett steg för att starta upp vcpkg i ditt arbetsflöde.

- name: Bootstrap vcpkg
  shell: pwsh
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat
- name: Bootstrap vcpkg
  shell: bash
  run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh

Du kan behöva ändra platsen för vcpkg-bootstrap-skriptet till den rätta för ditt arbetsflöde. Den här självstudien förutsätter att vcpkg finns i en vcpkg mapp i roten på förvaret.

3 – Konfigurera nödvändiga miljövariabler

Lägg till följande miljövariabler i arbetsflödesfilen (ersätt <OWNER> med ditt GitHub-användarnamn eller organisationsnamn):

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"

Du kan behöva ersätta värdet VCPKG_EXE med platsen för den körbara vcpkg-filen som genererades i steget bootstrap vcpkg.

I det här steget konfigurerar VCPKG_BINARY_SOURCES du att använda din GitHub Packages-feed som en binär cachelagringskälla. Läs referensen för binär cachelagring om du vill veta mer.

4 – Lägg till GitHub-paket som En NuGet-källa

Kommandot vcpkg fetch nuget matar ut platsen för den vcpkg-förvärvade nuget.exe, och laddar ner den körbara filen om det behövs.

Lägg till följande steg i arbetsflödesfilen för att konfigurera NuGet-källan med :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 }}"

På Linux behöver du mono för att köra nuget.exe. Du kan installera mono med distributionens systempakethanterare:

apt install mono-complete

Observera att ubuntu-22.04 GitHub Actions-löpare levereras med mono förinstallerade, men börjar med ubuntu-24.04 (som ubuntu-latest för närvarande pekar på) mono inte längre är förinstallerade.

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 }}"

Anmärkning

Standardvärdet GITHUB_TOKEN som tillhandahålls av GitHub Actions har inte de behörigheter som krävs för att ladda upp eller ladda ned cachelagrade paket.
Om du vill aktivera paketcachelagring till GitHub Packages använder du en personlig åtkomsttoken (PAT) i stället och ser till att den innehåller följande omfång:

  • packages:read
  • packages:write

Lagra PAT som en lagringsplatshemlighet (till exempel VCPKG_PAT_TOKEN) och referera till den i ditt arbetsflöde:

-Password: "${{ secrets.VCPKG_PAT_TOKEN }}"
-Source: "${{ env.FEED_URL }}"

Och det är allt! vcpkg laddar nu upp eller återställer paket från ditt NuGet-flöde som finns på GitHub Packages i ditt GitHub Actions-arbetsflöde.

Nästa steg

Här är andra uppgifter att prova härnäst: