Compartir a través de


Tutorial: Configuración de una caché binaria de vcpkg mediante paquetes de GitHub en un flujo de trabajo de Acciones de GitHub

Nota:

En este tutorial se usan fuentes de NuGet hospedadas en paquetes de GitHub, pero se pueden usar las mismas instrucciones para otros proveedores de fuentes nuGet, por ejemplo: Azure Artifacts, con cambios mínimos.

Paquetes de GitHub ofrece un repositorio práctico para los paquetes binarios de NuGet generados por vcpkg. En este tutorial, se muestra cómo configurar una caché binaria en el flujo de trabajo de Acciones de GitHub que usa paquetes de GitHub como almacenamiento remoto.

En este tutorial, aprenderá a:

Requisitos previos

  • Editor de código
  • Un repositorio de GitHub mediante Acciones de GitHub
  • Un proyecto con vcpkg

1- Proporcionar un token de acceso personal de GitHub

Siga las instrucciones de GitHub para generar un token de acceso personal (PAT) clásico para el repositorio, asegúrese de concederle los packages:write permisos y packages:read .

A continuación, agregue el PAT de GitHub como secreto disponible en los flujos de trabajo de la acción de GitHub del repositorio. En este tutorial se supone que asigna un nombre al secreto como GH_PACKAGES_TOKEN.

El PAT integrado proporcionado por GITHUB_TOKEN solo tiene el packages:read permiso , puede usarlo si planea tener una caché binaria de solo lectura en el flujo de trabajo.

2 - Bootstrap vcpkg

vcpkg adquiere su propia copia del nuget.exe ejecutable que usa durante las operaciones de almacenamiento en caché binarias. En este tutorial se usa vcpkg-acquired nuget.exe.

Agregue un paso para arrancar vcpkg en el flujo de trabajo:

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

Es posible que deba reemplazar la ubicación del script de arranque vcpkg por el correcto para el flujo de trabajo, en este tutorial se supone que vcpkg se encuentra en una vcpkg carpeta de la raíz del repositorio.

3- Configuración de variables de entorno necesarias

Agregue las siguientes variables de entorno al archivo de flujo de trabajo (reemplace por <OWNER> el nombre de usuario o la organización de 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"

Es posible que tenga que reemplazar el valor de VCPKG_EXE por la ubicación del archivo ejecutable vcpkg generado en el paso de vcpkg de arranque.

En este paso va a configurar VCPKG_BINARY_SOURCES para usar la fuente paquetes de GitHub como origen de almacenamiento en caché binario, lea la referencia de almacenamiento en caché binario para obtener más información.

4- Agregar paquetes de GitHub como origen de NuGet

El vcpkg fetch nuget comando genera la ubicación del archivo vcpkg-adquirido nuget.exe, descargando el archivo ejecutable si es necesario.

Agregue el paso siguiente en el archivo de flujo de trabajo de Acciones de GitHub:

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

En Linux, debe mono ejecutar nuget.exe. Los ejecutores de Acciones de GitHub que usan Ubuntu vienen con mono preinstalado. De lo contrario, puede instalar mono mediante el administrador de paquetes del sistema de la distribución.

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

Es posible que tenga que reemplazar GH_PACKAGES_TOKEN por el nombre de secreto correcto que proporcionó al PAT generado en el paso Proporcionar un token de acceso personal de GitHub.

Y listo. vcpkg cargará o restaurará paquetes desde la fuente de NuGet hospedada en paquetes de GitHub dentro del flujo de trabajo de Acciones de GitHub.

Pasos siguientes

Estas son otras tareas que se van a probar a continuación: