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: Configuración de la autenticación para paquetes de GitHub

En este tutorial se usa el elemento GITHUB_TOKEN integrado proporcionado por Acciones de GitHub. Para habilitar el acceso de lectura y escritura a paquetes de GitHub, agregue el siguiente permissions bloque al flujo de trabajo:

permissions:
  packages: write

Esto concede los GITHUB_TOKEN permisos y packages:write necesariospackages:read. El uso GITHUB_TOKEN de tiene varias ventajas:

  • No es necesario crear ni administrar secretos adicionales
  • Funciona automáticamente para las solicitudes de incorporación de cambios de bifurcaciones (con acceso de solo lectura)
  • Ámbito de la ejecución específica del repositorio y del flujo de trabajo

Nota:

Como alternativa, puede usar un token de acceso personal (PAT) clásico si necesita acceso entre repositorios u otros escenarios avanzados. Siga las instrucciones de GitHub para generar un token de acceso personal (PAT) clásico con packages:write permisos y packages:read , a continuación, agréguelo como secreto en el repositorio y úselo ${{ secrets.YOUR_PAT_NAME }} en lugar de ${{ secrets.GITHUB_TOKEN }} en los ejemplos siguientes.

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 siguiente paso al archivo de flujo de trabajo para configurar el origen de NuGet con 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 }}"

En Linux, debe mono ejecutar nuget.exe. Puede instalar mono mediante el administrador de paquetes del sistema de la distribución:

apt install mono-complete

Tenga en cuenta que ubuntu-22.04 los ejecutores de Acciones de GitHub vienen con mono preinstalados, pero a partir ubuntu-24.04 de (que ubuntu-latest actualmente apunta a), mono ya no viene preinstalado.

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

Nota:

El valor predeterminado GITHUB_TOKEN proporcionado por Acciones de GitHub no tiene los permisos necesarios para cargar o descargar paquetes almacenados en caché.
Para habilitar el almacenamiento en caché de paquetes en Paquetes de GitHub, use un token de acceso personal (PAT) en su lugar y asegúrese de que incluye los siguientes ámbitos:

  • packages:read
  • packages:write

Almacene el PAT como un secreto de repositorio (por ejemplo, VCPKG_PAT_TOKEN) y haga referencia a él en el flujo de trabajo:

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

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: