Partager via


Tutoriel : Configurer un cache binaire vcpkg à l’aide de Packages GitHub dans un workflow GitHub Actions

Remarque

Ce tutoriel utilise des flux NuGet hébergés dans GitHub Packages, mais les mêmes instructions peuvent être utilisées pour d’autres fournisseurs de flux NuGet, par exemple : Azure Artifacts, avec des modifications minimales.

GitHub Packages offre un référentiel pratique pour vos packages binaires NuGet produits par vcpkg. Dans ce tutoriel, nous vous montrons comment configurer un cache binaire dans votre workflow GitHub Actions qui utilise GitHub Packages comme stockage distant.

Ce didacticiel vous montre comment effectuer les opérations suivantes :

Prérequis

  • Éditeur de code
  • Dépôt GitHub à l’aide de GitHub Actions
  • Un projet utilisant vcpkg

1 - Configurer l’authentification pour les packages GitHub

Ce tutoriel utilise le composant intégré GITHUB_TOKEN fourni par GitHub Actions. Pour activer l’accès en lecture et en écriture à GitHub Packages, ajoutez le bloc suivant permissions à votre flux de travail :

permissions:
  packages: write

Cela accorde au GITHUB_TOKEN les autorisations nécessaires packages:write et packages:read. L’utilisation GITHUB_TOKEN présente plusieurs avantages :

  • Il n’est pas nécessaire de créer ou de gérer des secrets supplémentaires
  • Fonctionne automatiquement pour les pull requests provenant de forks (avec un accès en lecture seule)
  • Étendue aux référentiels spécifiques et aux exécutions de flux de travail spécifiques

Remarque

Vous pouvez également utiliser un jeton d’accès personnel classique (PAT) si vous avez besoin d’un accès entre référentiels ou d’autres scénarios avancés. Suivez les instructions de GitHub pour générer un jeton d’accès personnel (PAT) classique avec packages:write et packages:read des autorisations, puis ajoutez-le en tant que secret dans votre référentiel et utilisez ${{ secrets.YOUR_PAT_NAME }} plutôt ${{ secrets.GITHUB_TOKEN }} que dans les exemples ci-dessous.

2 - Bootstrap vcpkg

vcpkg acquiert sa propre copie de l’exécutable nuget.exe qu’il utilise pendant les opérations de mise en cache binaire. Ce tutoriel utilise le vcpkg-acquire nuget.exe.

Ajoutez une étape pour démarrer vcpkg dans votre workflow :

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

Vous devrez peut-être remplacer l’emplacement du script de démarrage vcpkg par celui approprié pour votre flux de travail. Ce didacticiel suppose que vcpkg se trouve dans un vcpkg dossier à la racine du référentiel.

3 - Configurer les variables d’environnement requises

Ajoutez les variables d’environnement suivantes à votre fichier de flux de travail (remplacez <OWNER> par le nom d’utilisateur ou le nom de votre organisation 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"

Vous devrez peut-être remplacer la valeur par VCPKG_EXE l’emplacement de l’exécutable vcpkg généré à l’étape de démarrage vcpkg .

Dans cette étape, vous configurez VCPKG_BINARY_SOURCES pour utiliser votre flux GitHub Packages en tant que source de mise en cache binaire, lisez la référence de mise en cache binaire pour en savoir plus.

4 - Ajouter des packages GitHub en tant que source NuGet

La vcpkg fetch nuget commande génère l’emplacement du vcpkg-acquis nuget.exe, en téléchargeant l’exécutable si nécessaire.

Ajoutez l’étape suivante à votre fichier de flux de travail pour configurer la source NuGet avec votre 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 }}"

Sur Linux, vous devez mono exécuter nuget.exe. Vous pouvez installer mono à l’aide du gestionnaire de package système de votre distribution :

apt install mono-complete

Notez que les exécuteurs GitHub Actions viennent avec des composants préinstallés, mais à partir de ubuntu-22.04 (vers lequel mono pointe actuellement), ubuntu-24.04 ne sont plus fournis préinstallés.

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

Remarque

La valeur par défaut GITHUB_TOKEN fournie par GitHub Actions ne dispose pas des autorisations requises pour charger ou télécharger des packages mis en cache.
Pour activer la mise en cache des packages GitHub, utilisez plutôt un jeton d’accès personnel (PAT) et vérifiez qu’il inclut les étendues suivantes :

  • packages:read
  • packages:write

Stockez le jeton d'accès personnel comme un secret de dépôt (par exemple, VCPKG_PAT_TOKEN) et référencez-le dans votre flux de travail :

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

C’est tout ! vcpkg chargera ou restaure désormais des packages à partir de votre flux NuGet hébergé sur des packages GitHub à l’intérieur de votre workflow GitHub Actions.

Étapes suivantes

Voici d’autres tâches à essayer ensuite :