Kurz: Nastavení binární mezipaměti vcpkg pomocí GitHub Packages v pracovním postupu GitHub Actions

Poznámka:

Tento kurz používá informační kanály NuGet hostované v GitHub Packages, ale stejné pokyny je možné použít pro jiné poskytovatele informačních kanálů NuGet, například Azure Artifacts s minimálními změnami.

GitHub Packages nabízí pohodlné úložiště pro binární balíčky NuGet vytvořené nástrojem vcpkg. V tomto kurzu vám ukážeme, jak nastavit binární mezipaměť v pracovním postupu GitHub Actions, který jako vzdálené úložiště používá GitHub Packages.

V tomto kurzu se naučíte:

Požadavky

  • Editor kódu
  • Úložiště GitHub pomocí GitHub Actions
  • Projekt využívající vcpkg

1. Konfigurace ověřování pro GitHub Packages

V tomto kurzu se používá vestavěný GITHUB_TOKEN od GitHub Actions. Pokud chcete povolit přístup ke službě GitHub Packages pro čtení i zápis, přidejte do pracovního postupu následující permissions blok:

permissions:
  packages: write

Tím se udělí GITHUB_TOKEN potřebná oprávnění packages:write a packages:read. Použití GITHUB_TOKEN má několik výhod:

  • Není potřeba vytvářet ani spravovat další tajné kódy.
  • Funguje automaticky pro žádosti o přijetí změn z forků (s přístupem jen pro čtení)
  • Omezeno na konkrétní úložiště a spuštění pracovního postupu

Poznámka:

Případně můžete použít klasický token PAT (Personal Access Token), pokud potřebujete přístup mezi úložišti nebo jiné pokročilé scénáře. Postupujte podle pokynů GitHubu a vygenerujte klasický token PAT (Personal Access Token) s oprávněními packages:writepackages:read a pak ho přidejte do úložiště jako tajný kód a použijte ${{ secrets.YOUR_PAT_NAME }} ho ${{ secrets.GITHUB_TOKEN }} místo v následujících příkladech.

2 . Bootstrap vcpkg

Vcpkg získá vlastní kopii spustitelného nuget.exe souboru, který používá při operacích binární mezipaměti. Tento kurz používá vcpkg-acquired nuget.exe.

Přidejte do pracovního postupu krok pro bootstrap vcpkg:

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

Možná budete muset nahradit umístění skriptu vcpkg bootstrap správným skriptem pro váš pracovní postup. V tomto kurzu se předpokládá, že vcpkg se nachází ve vcpkg složce v kořenovém adresáři úložiště.

3. Nastavení požadovaných proměnných prostředí

Do souboru pracovního postupu přidejte následující proměnné prostředí (nahraďte <OWNER> uživatelským jménem nebo názvem organizace GitHubu):

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"

Možná budete muset nahradit hodnotu VCPKG_EXE umístěním spustitelného souboru vcpkg generovaného v kroku bootstrap vcpkg .

V tomto kroku konfigurujete VCPKG_BINARY_SOURCES použití informačního kanálu GitHub Packages jako binárního zdroje ukládání do mezipaměti, přečtěte si referenční informace o binární mezipaměti.

4. Přidání balíčků GitHubu jako zdroje NuGet

Příkaz vcpkg fetch nuget vypíše umístění souboru vcpkg-acquired nuget.exe, v případě potřeby stáhne spustitelný soubor.

Přidáním následujícího kroku do souboru pracovního postupu nakonfigurujte zdroj NuGet pomocí příkazu 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 }}"

V Linuxu je potřeba mono spustit nuget.exe. Můžete nainstalovat mono pomocí správce systémových balíčků vaší distribuce:

apt install mono-complete

Mějte na paměti, že ubuntu-22.04 spouštěče GitHub Actions jsou předinstalovány, ale od mono (na který ubuntu-24.04 aktuálně odkazují), již ubuntu-latest nejsou předinstalovány.

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

Poznámka:

Výchozí nastavení GITHUB_TOKEN , které poskytuje GitHub Actions, nemá požadovaná oprávnění k nahrávání nebo stahování balíčků uložených v mezipaměti.
Pokud chcete povolit ukládání balíčků do mezipaměti do služby GitHub Packages, použijte místo toho token PAT (Personal Access Token) a ujistěte se, že obsahuje následující obory:

  • packages:read
  • packages:write

Uložte pat jako tajný klíč úložiště (například VCPKG_PAT_TOKEN) a odkazujte na něj v pracovním postupu:

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

A to je vše! Vcpkg teď nahraje nebo obnoví balíčky z vašeho informačního kanálu NuGet hostovaného na GitHub Packages v rámci pracovního postupu GitHub Actions.

Další kroky

Tady jsou další úkoly, které můžete vyzkoušet: