Udostępnij przez


Samouczek: konfigurowanie pamięci podręcznej binarnej vcpkg przy użyciu pakietów GitHub w przepływie pracy funkcji GitHub Actions

Uwaga

W tym samouczku są używane kanały informacyjne NuGet hostowane w pakietach GitHub, ale te same instrukcje mogą być używane dla innych dostawców źródeł danych NuGet, na przykład: Azure Artifacts, z minimalnymi zmianami.

Pakiety GitHub oferują wygodne repozytorium pakietów binarnych NuGet utworzonych przez program vcpkg. W tym samouczku pokazano, jak skonfigurować pamięć podręczną binarną w przepływie pracy funkcji GitHub Actions, który używa pakietów GitHub jako magazynu zdalnego.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

Wymagania wstępne

  • Edytor kodu
  • Repozytorium GitHub korzystające z funkcji GitHub Actions
  • Projekt korzystający z narzędzia vcpkg

1 — Konfigurowanie uwierzytelniania dla pakietów GitHub

W tym samouczku jest używana funkcja GITHUB_TOKEN wbudowana w GitHub Actions. Aby włączyć zarówno dostęp do odczytu, jak i zapisu w pakietach GitHub, dodaj następujący permissions blok do przepływu pracy:

permissions:
  packages: write

GITHUB_TOKEN Daje to niezbędne packages:write i packages:read uprawnienia. Użycie GITHUB_TOKEN ma kilka zalet:

  • Nie trzeba tworzyć ani zarządzać dodatkowymi sekretami
  • Działa automatycznie w przypadku żądań przyciągnięcia z forka (z dostępem tylko do odczytu)
  • Zakres działania określonego repozytorium i przepływu pracy

Uwaga

Alternatywnie możesz użyć klasycznego osobistego tokenu dostępu (PAT), jeśli potrzebujesz dostępu między repozytorium lub innych zaawansowanych scenariuszy. Postępuj zgodnie z instrukcjami usługi GitHub, aby wygenerować klasyczny osobisty token dostępu (PAT) z uprawnieniami packages:write , packages:read a następnie dodać go jako wpis tajny w repozytorium i użyć ${{ secrets.YOUR_PAT_NAME }} zamiast ${{ secrets.GITHUB_TOKEN }} w poniższych przykładach.

2 — Bootstrap vcpkg

Narzędzie vcpkg uzyskuje własną kopię nuget.exe pliku wykonywalnego, którego używa podczas operacji buforowania binarnego. W tym samouczku jest używany element vcpkg-acquired nuget.exe.

Dodaj krok do bootstrap vcpkg w przepływie pracy:

- 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że być konieczne zastąpienie lokalizacji skryptu bootstrap narzędzia vcpkg poprawnym dla przepływu pracy. W tym samouczku przyjęto założenie, że narzędzie vcpkg znajduje się w vcpkg folderze głównym repozytorium.

3 — Konfigurowanie wymaganych zmiennych środowiskowych

Dodaj następujące zmienne środowiskowe do pliku przepływu pracy (zastąp <OWNER> ciąg nazwą użytkownika lub nazwą organizacji usługi 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"

Może być konieczne zastąpienie wartości VCPKG_EXE wartością lokalizacji pliku wykonywalnego vcpkg wygenerowanego w kroku bootstrap vcpkg .

W tym kroku konfigurujesz VCPKG_BINARY_SOURCES użycie źródła pakietów GitHub jako źródła buforowania binarnego, przeczytaj dokumentację buforowania binarnego, aby dowiedzieć się więcej.

4 — Dodawanie pakietów GitHub jako źródła NuGet

Polecenie vcpkg fetch nuget zwraca lokalizację pobranego nuget.exepliku vcpkg, pobierając plik wykonywalny w razie potrzeby.

Dodaj następujący krok do pliku przepływu pracy, aby skonfigurować źródło NuGet za pomocą polecenia 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 }}"

W systemie Linux należy mono wykonać polecenie nuget.exe. Możesz zainstalować mono za pomocą menedżera pakietów systemowych swojej dystrybucji.

apt install mono-complete

Należy pamiętać, że ubuntu-22.04 agenty GitHub Actions są dostarczane z wstępnie mono zainstalowanymi elementami, ale począwszy od ubuntu-24.04 (na co ubuntu-latest obecnie wskazuje), mono nie są już preinstalowane.

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

Uwaga

Wartość domyślna GITHUB_TOKEN udostępniana przez funkcję GitHub Actions nie ma wymaganych uprawnień do przekazywania lub pobierania buforowanych pakietów.
Aby włączyć buforowanie pakietów w pakietach GitHub, użyj osobistego tokenu dostępu (PAT) i upewnij się, że zawiera on następujące zakresy:

  • packages:read
  • packages:write

Zapisz klucz dostępu jako wpis tajny repozytorium (na przykład VCPKG_PAT_TOKEN) i odwołuj się do niego w przepływie pracy:

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

I to wszystko. Narzędzie vcpkg będzie teraz przekazywać lub przywracać pakiety z kanału informacyjnego NuGet hostowanego w pakietach GitHub w przepływie pracy funkcji GitHub Actions.

Następne kroki

Poniżej przedstawiono inne zadania do wypróbowania: