Prueba de los puertos del Registro personalizados mediante vcpkg con Acciones de GitHub
Una vez que haya configurado un registro personalizado de puertos vcpkg, es posible que quiera agregar Continous Integration para validar que todas las dependencias se pueden compilar correctamente.
El equipo de vcpkg prueba el registro vcpkg principal de Microsoft/vcpkg mediante la integración continua (CI) con Azure DevOps. Esto garantiza que agregar nuevos paquetes o actualizar los existentes no interrumpa a los consumidores.
En este artículo, le mostramos cómo configurar un entorno de CI para probar los puertos vcpkg en su propio registro.
En este artículo aprenderá lo siguiente:
- Configuración de una caché binaria y una caché de recursos para los flujos de trabajo de Acciones de GitHub
- Configuración de un flujo de trabajo para probar los puertos del registro
Requisitos previos
- Una cuenta de GitHub
- Su propio registro de Git vcpkg
- Finalización de los tutoriales de almacenamiento en caché y almacenamiento en caché de recursos binarios.
- Conocimientos sobre los flujos de trabajo de Acciones de GitHub
Configuración de una caché binaria y una caché de recursos para los flujos de trabajo de Acciones de GitHub
La creación de una gran colección de puertos es una tarea costosa tanto en términos de tiempo como de potencia informática. Se recomienda encarecidamente que antes de interactuar con ci para los puertos, invierta en configurar una caché binaria y una caché de recursos para los flujos de trabajo de acción de GitHub.
Una caché binaria proporciona la mayor ventaja para los escenarios de CI al garantizar que los paquetes sin modificar no se vuelvan a compilar en cada ejecución de CI. Una caché de recursos refleja los artefactos descargados para los paquetes durante una ejecución y usa los artefactos almacenados en caché en ejecuciones posteriores. También puede ayudar a mitigar los problemas en los que el repositorio ascendente no es confiable: por ejemplo, una dirección URL de descarga interrumpida.
Para obtener instrucciones detalladas sobre cómo configurar estas cachés, lea nuestros artículos de almacenamiento en caché binario y almacenamiento en caché de recursos.
Ejemplo: Habilitación del almacenamiento en caché binario y de recursos en un flujo de trabajo de Acciones de GitHub
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"
En este ejemplo se muestra cómo configurar una caché binaria y una caché de recursos en un flujo de trabajo de Acciones de GitHub. Debe adaptar este fragmento de código para usarlo en el archivo YAML de su propio flujo de trabajo.
Desglosar este fragmento de código:
X_VCPKG_ASSET_SOURCES
es la variable de entorno que se usa para configurar las cachés de recursos en vcpkg. En este ejemplo, se establece en x-azurl,https://my.domain.com/container,{{secrets.SAS}},readwrite
.
El x-azurl
back-end indica a vcpkg que use un contenedor de Azure Storage como proveedor de almacenamiento. x-azurl
Va seguido de tres parámetros separados por comas (,
).
https://my.domain.com/container
es una dirección URL del contenedor de almacenamiento.{{secrets.SAS}}
es una variable secreta de Acciones de GitHub que contiene un token de SAS para autenticarse en el contenedor de almacenamiento.readwrite
establece permisos de lectura y escritura para la caché de recursos. Esto significa que esta caché de recursos se usa para almacenar artefactos, así como para restaurar artefactos a partir de él.
VCPKG_BINARY_SOURCES
es la variable de entorno que se usa para configurar cachés binarias en vcpkg. En este ejemplo, se establece en clear;x-gha,readwrite
. Esto habilita el back-end de caché de acciones de GitHub para la caché binaria. Se requiere un paso adicional en el flujo de trabajo para habilitar este back-end correctamente.
El siguiente paso debe incluirse tal como está en los pasos de flujo de trabajo de acción de GitHub. Este paso exporta dos variables de entorno necesarias para que el x-gha
back-end funcione y debe ejecutarse antes de cualquier tarea que implique 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 || '');
Obtenga más información sobre cómo funcionan todos estos elementos; para ello, lea la documentación sobre las características de caché de recursos y caché binaria.
Configuración de un flujo de trabajo para probar los puertos del registro
Después de configurar una caché binaria y una caché de recursos para el entorno de CI, el siguiente paso es configurar un flujo de trabajo para probar todos los puertos del registro. Puede decidir si este flujo de trabajo se ejecuta según una programación o si se desencadena mediante nuevas confirmaciones o solicitudes de incorporación de cambios.
El registro vcpkg principal usa el vcpkg ci
comando , que se ha adaptado a las necesidades del proyecto vcpkg y no está pensado para permanecer estable o ser utilizado por los consumidores de vcpkg. Por lo tanto, no es adecuado usar para probar sus propios registros de vcpkg. Se recomienda seguir los pasos descritos en este artículo en su lugar.
Usar un archivo de manifiesto para incluir todos los puertos
En lugar de usar el vcpkg ci
comando , se recomienda usar un archivo de manifiesto para crear una compilación que dependa de todos los paquetes del registro.
En el ejemplo siguiente, se crea un archivo de manifiesto para probar todos los puertos de un registro hipotético de vcpkg. Reemplace la lista de dependencias para incluir todos los puertos del registro y colóquelo en la raíz del repositorio.
vcpkg.json
{
"dependencies": [
"beicode",
"beison"
]
}
Sus propios puertos pueden tener dependencias en el registro vcpkg principal u otros registros de terceros, en cuyo caso, debe agregar esos registros en un vcpkg-configuration.json
archivo. Aunque vcpkg puede resolver paquetes del registro principal sin configuración adicional, se recomienda agregarlos explícitamente a la lista de registros con fines de control de versiones.
Esto garantiza que tiene el control del conjunto de versiones de puerto subyacentes. Consulte el vcpkg x-update-baseline
comando para ayudar a administrar la línea base de los registros.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "42bb0d9e8d4cf33485afb9ee2229150f79f61a1f",
"packages": ["*"]
}
]
}
Lea los vcpkg.json
artículos de referencia y vcpkg-configuration.json
para obtener más información. Y la documentación del modo de manifiesto para obtener información sobre cómo funcionan conjuntamente.
Adquisición de vcpkg en el flujo de trabajo de Acciones de GitHub
A continuación, debe adquirir vcpkg para usarlo en el flujo de trabajo. Agregue los pasos siguientes para instalar 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
Una vez completados estos pasos, debe tener un archivo ejecutable vcpkg con el que trabajar.
Ejecución de la instalación de vcpkg para compilar los puertos
El último paso es indicar a vcpkg que compile todos los puertos. Es posible que haya observado que su propio registro no está presente en el vcpkg-configuration.json
creado un par de pasos anteriores. El motivo es que desea probar la versión de los puertos que se encuentran actualmente en el directorio de trabajo, en lugar de las versiones publicadas en el repositorio.
Para ese objetivo, debe agregar los puertos del Registro como puertos de superposición estableciendo la variable de entorno en el VCPKG_OVERLAY_PORTS
directorio del ports
registro.
En el fragmento de código siguiente se muestra cómo configurar los puertos del registro como puertos de superposición y se ejecuta vcpkg install
en modo de manifiesto para instalar todos los puertos personalizados.
- 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"
En este ejemplo se supone que el vcpkg.json
archivo se crea en la raíz del repositorio del registro.
La colocación de todo el archivo YAML del flujo de trabajo debe tener un aspecto similar al siguiente:
.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
Esta es la estructura básica de un flujo de trabajo de CI para probar los puertos del registro. Es posible que necesite algún trabajo adicional para autenticarse en repositorios privados o en la fuente de NuGet.
También puede agregar pasos para automatizar la generación del vcpkg.json
archivo o un paso que compruebe que los puertos recién agregados al registro no se quedan fuera de las pruebas.
Pasos siguientes
Los artículos siguientes pueden resultarle útiles al configurar un entorno de CI.
- Autenticación en registros de Git privados
- Configuración de una caché binaria mediante la caché de GHA
- Configuración de una caché de recursos
- Referencia de caché binaria
- Referencia de caché de recursos
- Puertos de superposición
- Modo de manifiesto
vcpkg.json
vcpkg-configuration.json
- Variables de entorno de configuración de vcpkg