Testowanie niestandardowych portów rejestru przy użyciu narzędzia vcpkg za pomocą funkcji GitHub Actions
Po skonfigurowaniu niestandardowego rejestru portów vcpkg możesz dodać ciągłą integrację, aby sprawdzić, czy wszystkie zależności można pomyślnie skompilować.
Główny rejestr vcpkg w firmie Microsoft/vcpkg jest testowany przez zespół vcpkg przy użyciu ciągłej integracji (CI) z usługą Azure DevOps. Dzięki temu dodanie nowych pakietów lub zaktualizowanie istniejących nie spowoduje przerwania użytkowników.
W tym artykule pokazano, jak skonfigurować środowisko ciągłej integracji w celu przetestowania portów vcpkg we własnym rejestrze.
Z tego artykułu dowiesz się, jak wykonywać następujące elementy:
- Konfigurowanie binarnej pamięci podręcznej i pamięci podręcznej zasobów dla przepływów pracy funkcji GitHub Actions
- Konfigurowanie przepływu pracy w celu przetestowania portów rejestru
Wymagania wstępne
- Konto usługi GitHub
- Własny rejestr git vcpkg
- Ukończenie samouczków buforowania binarnego i buforowania zasobów.
- Wiedza na temat przepływów pracy funkcji GitHub Actions
Konfigurowanie binarnej pamięci podręcznej i pamięci podręcznej zasobów dla przepływów pracy funkcji GitHub Actions
Tworzenie dużej kolekcji portów jest kosztownym zadaniem zarówno w zakresie czasu, jak i mocy obliczeniowej. Zdecydowanie zalecamy, aby przed angażowaniem ciągłej integracji dla portów zainwestować w konfigurowanie binarnej pamięci podręcznej i pamięci podręcznej zasobów dla przepływów pracy akcji usługi GitHub.
Pamięć podręczna binarna zapewnia największą korzyść w scenariuszach ciągłej integracji, zapewniając, że niezmodyfikowane pakiety nie są komkompilowane w każdym uruchomieniu ciągłej integracji. Pamięć podręczna zasobów dubluje artefakty pobierane dla pakietów podczas przebiegu i używa buforowanych artefaktów w kolejnych uruchomieniach. Może również pomóc w rozwiązywaniu problemów, w których repozytorium nadrzędne jest zawodne: na przykład uszkodzony adres URL pobierania.
Aby uzyskać szczegółowe instrukcje dotyczące konfigurowania tych pamięci podręcznych, przeczytaj artykuły dotyczące buforowania binarnego i buforowania zasobów.
Przykład: włączanie buforowania elementów zawartości i plików binarnych w przepływie pracy funkcji GitHub Actions
steps:
- name: Enable GitHub Actions Cache backend
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: some vcpkg task
run: "${{ github.workspace }}/vcpkg/vcpkg install"
env:
X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,{{ secrets.SAS }},readwrite"
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
W tym przykładzie pokazano, jak skonfigurować binarną pamięć podręczną i pamięć podręczną zasobów w przepływie pracy funkcji GitHub Actions. Ten fragment kodu należy dostosować do użycia w pliku YAML własnego przepływu pracy.
Podzielenie tego fragmentu kodu:
X_VCPKG_ASSET_SOURCES
to zmienna środowiskowa używana do konfigurowania pamięci podręcznych zasobów w narzędziu vcpkg. W tym przykładzie ustawiono wartość x-azurl,https://my.domain.com/container,{{secrets.SAS}},readwrite
.
Zaplecze x-azurl
instruuje program vcpkg, aby używał kontenera usługi Azure Storage jako dostawcy magazynu. Następuje x-azurl
po nim trzy parametry rozdzielone przecinkami (,
).
https://my.domain.com/container
to adres URL kontenera magazynu.{{secrets.SAS}}
to zmienna wpisów tajnych funkcji GitHub Actions zawierająca token SAS do uwierzytelniania w kontenerze magazynu.readwrite
ustawia uprawnienia do odczytu i zapisu dla pamięci podręcznej zasobów. Oznacza to, że ta pamięć podręczna zasobów jest używana do przechowywania artefaktów oraz przywracania artefaktów z niej.
VCPKG_BINARY_SOURCES
to zmienna środowiskowa używana do konfigurowania binarnych pamięci podręcznych w narzędziu vcpkg. W tym przykładzie ustawiono wartość clear;x-gha,readwrite
. Umożliwia to zaplecze pamięci podręcznej funkcji GitHub Actions dla pamięci podręcznej binarnej. Dodatkowy krok jest wymagany w przepływie pracy w celu pomyślnego włączenia tego zaplecza.
Poniższy krok powinien zostać uwzględniony zgodnie z instrukcjami przepływu pracy akcji usługi GitHub. Ten krok eksportuje dwie zmienne środowiskowe wymagane przez x-gha
zaplecze do pracy i powinny być uruchamiane przed każdym zadaniem, które obejmuje program vcpkg.
- name: Enable GitHub Actions Cache backend
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
Dowiedz się więcej o tym, jak działają wszystkie te elementy, czytając dokumentację dotyczącą funkcji pamięci podręcznej zasobów i binarnej pamięci podręcznej .
Konfigurowanie przepływu pracy w celu przetestowania portów rejestru
Po skonfigurowaniu binarnej pamięci podręcznej i pamięci podręcznej zasobów dla środowiska ciągłej integracji następnym krokiem jest skonfigurowanie przepływu pracy w celu przetestowania wszystkich portów rejestru. Możesz zdecydować, czy ten przepływ pracy jest uruchamiany zgodnie z harmonogramem, czy też jest wyzwalany przez nowe zatwierdzenia lub żądania ściągnięcia.
Główny rejestr vcpkg używa vcpkg ci
polecenia , które zostało dostosowane do potrzeb projektu vcpkg i nie ma na celu pozostania stabilne lub używane przez konsumentów vcpkg. W związku z tym nie nadaje się do testowania własnych rejestrów vcpkg. Zalecamy wykonanie kroków opisanych w tym artykule.
Dołączanie wszystkich portów za pomocą pliku manifestu
Zamiast używać polecenia, zalecamy użycie pliku manifestu vcpkg ci
do utworzenia kompilacji, która zależy od wszystkich pakietów w rejestrze.
Poniższy przykład tworzy plik manifestu w celu przetestowania wszystkich portów w hipotetycznym rejestrze vcpkg. Zastąp listę zależności, aby uwzględnić wszystkie porty w rejestrze i umieścić je w katalogu głównym repozytorium.
vcpkg.json
{
"dependencies": [
"beicode",
"beison"
]
}
Twoje własne porty mogą mieć zależności od głównego rejestru vcpkg lub innych rejestrów innych firm, w tym przypadku należy dodać te rejestry w vcpkg-configuration.json
pliku. Mimo że program vcpkg może rozpoznawać pakiety z głównego rejestru bez dodatkowej konfiguracji, zdecydowanie zalecamy jawne dodanie go do listy rejestrów na potrzeby kontroli wersji.
Dzięki temu masz kontrolę nad zestawem bazowych wersji portów. Zapoznaj się z poleceniemvcpkg x-update-baseline
, aby ułatwić zarządzanie punktem odniesienia rejestrów.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
"packages": ["*"]
}
]
}
vcpkg.json
Przeczytaj artykuły i vcpkg-configuration.json
referencyjne, aby dowiedzieć się więcej. Zapoznaj się z dokumentacją trybu manifestu, aby dowiedzieć się, jak działają one razem.
Uzyskiwanie narzędzia vcpkg w przepływie pracy funkcji GitHub Actions
Następnie należy uzyskać narzędzie vcpkg, aby używać go w przepływie pracy. Dodaj następujące kroki, aby zainstalować narzędzie vcpkg.
steps:
- uses: actions/checkout@v4
with:
repository: "https://github.com/Microsoft/vcpkg"
path: "vcpkg"
- name: Bootstrap vcpkg
run: "${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh"
shell: bash
Po wykonaniu tych kroków należy pracować z plikiem wykonywalnym vcpkg.
Uruchamianie instalacji programu vcpkg w celu skompilowania portów
Ostatnim krokiem jest poinformowanie programu vcpkg o utworzeniu wszystkich portów. Być może zauważysz, że twój własny rejestr jest nieobecny w vcpkg-configuration.json
utworzonym kilku krokach powyżej. Przyczyną jest to, że chcesz przetestować wersję portów aktualnie w katalogu roboczym, w przeciwieństwie do wersji opublikowanych w repozytorium.
W tym celu należy dodać porty rejestru jako porty nakładki, ustawiając zmienną VCPKG_OVERLAY_PORTS
środowiskową w katalogu rejestru ports
.
Poniższy fragment kodu przedstawia sposób konfigurowania portów rejestru jako portów nakładki i uruchamiania vcpkg install
w trybie manifestu w celu zainstalowania wszystkich portów niestandardowych.
- name: some vcpkg task
run: "${{ github.workspace }}/vcpkg/vcpkg install"
env:
X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://my.domain.com/container,{{ secrets.SAS }},readwrite"
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_OVERLAY_PORTS: "${{ github.workspace }}/ports"
W tym przykładzie przyjęto założenie, że vcpkg.json
plik jest tworzony w katalogu głównym repozytorium rejestru.
Umieszczenie pliku YAML przepływu pracy powinno wyglądać podobnie do następującego:
.github/workflows/test-ports.yml
name: Test vcpkg ports
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Acquire vcpkg
uses: actions/checkout@v4
with:
repository: "Microsoft/vcpkg"
path: vcpkg
- name: Bootstrap vcpkg
run: "${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh"
shell: bash
- name: Enable GitHub Actions Cache backend
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Build ports
run: ${{ github.workspace }}/vcpkg/vcpkg install
env:
X_VCPKG_ASSET_SOURCES: "clear;x-azurl,https://your.domain.com/container,${{ secrets.SAS }},readwrite"
VCPKG_BINARY_SOURCES: "clear;x-gha,readwrite"
VCPKG_OVERLAY_PORTS: "${{ github.workspace }}/ports"
shell: bash
Jest to podstawowa struktura przepływu pracy ciągłej integracji do testowania portów rejestru. Może być wymagana dodatkowa praca w celu uwierzytelnienia w repozytoriach prywatnych lub w kanale informacyjnym NuGet.
Możesz również dodać kroki automatyzacji generowania vcpkg.json
pliku lub kroku sprawdzającego, czy porty nowo dodane do rejestru nie są pominięte w testach.
Następne kroki
Poniższe artykuły mogą być przydatne podczas konfigurowania środowiska ciągłej integracji.
- Uwierzytelnianie w prywatnych rejestrach usługi Git
- Konfigurowanie pamięci podręcznej binarnej przy użyciu pamięci podręcznej GHA
- Konfigurowanie pamięci podręcznej zasobów
- Dokumentacja binarnej pamięci podręcznej
- Dokumentacja pamięci podręcznej zasobów
- Porty nakładki
- Tryb manifestu
vcpkg.json
vcpkg-configuration.json
- Zmienne środowiskowe konfiguracji programu vcpkg