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 — Udostępnianie osobistego tokenu dostępu w usłudze GitHub

Postępuj zgodnie z instrukcjami usługi GitHub, aby wygenerować klasyczny osobisty token dostępu (PAT) dla repozytorium, upewnij się, że nadaj packages:write mu uprawnienia i packages:read .

Następnie dodaj swój identyfikator PAT usługi GitHub jako wpis tajny dostępny w przepływach pracy akcji usługi GitHub repozytorium. W tym samouczku przyjęto założenie, że nazwa wpisu tajnego to GH_PACKAGES_TOKEN.

Wbudowany dostęp warunkowy udostępniany tylko przez GITHUB_TOKEN program ma packages:read uprawnienia, można go użyć, jeśli planujesz mieć w przepływie pracy pamięć podręczną binarną tylko do odczytu.

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 w pliku przepływu pracy funkcji 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 }}"

W systemie Linux należy mono wykonać polecenie nuget.exe. Moduły uruchamiacze funkcji GitHub Actions korzystające z mono systemu Ubuntu są wstępnie zainstalowane. W przeciwnym razie można zainstalować mono za pomocą menedżera pakietów systemowych dystrybucji.

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

Może być konieczne zastąpienie GH_PACKAGES_TOKEN poprawną nazwą wpisu tajnego nadaną tokenowi dostępu wygenerowanemu w kroku udostępniania osobistego tokenu dostępu w usłudze GitHub.

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: