Skip to main content

Acerca de las precompilaciones de GitHub Codespaces

Las precompilaciones de GitHub Codespaces ayudan a acelerar la creación de codespaces para repositorios grandes o complejos.

¿Quién puede utilizar esta característica?

You create and configure prebuilds in your repository's settings. La configuración de nivel de repositorio de GitHub Codespaces está disponible para todos los repositorios que pertenecen a cuentas personales.

En el caso de los repositorios pertenecientes a organizaciones, la configuración de nivel de repositorio de GitHub Codespaces está disponible para las organizaciones en los planes GitHub Team y GitHub Enterprise. Para acceder a la configuración, la organización o su empresa primaria deben haber agregado un método de pago y haber establecido un límite de gasto para GitHub Codespaces. Para obtener más información, vea «Selección de quién posee y paga los codespaces de una organización» y «Planes de GitHub».

Información general

Una precompilación ensambla los componentes principales de un codespace para una combinación determinada de repositorio, rama y archivo de configuración devcontainer.json. Proporciona una manera rápida de crear un codespace. En el caso de repositorios complejos o grandes en particular, puedes crear un codespace más rápidamente mediante una precompilación.

Si la creación de un codespace para un repositorio actualmente tarda más de 2 minutos, es probable que el uso de precompilaciones te beneficie. Esto se debe a que, con una precompilación, cualquier código fuente, extensiones del editor, dependencias del proyecto, comandos y configuraciones ya se han descargado, instalado y aplicado antes de crear un codespace.

De manera predeterminada, siempre que insertes cambios en el repositorio, GitHub Codespaces usa GitHub Actions para actualizar automáticamente las precompilaciones.

Cuando las precompilaciones estén disponibles para una rama determinada de un repositorio, un archivo de configuración de contenedor de desarrollo determinado y para la región, verás la etiqueta " Listo para precompilación" en la lista de opciones de tipos de máquinas al crear un codespace. Si todavía se está creando una precompilación, verás la etiqueta " Precompilación en curso". Para más información, consulta Creación de un codespace para un repositorio.

Captura de pantalla de una lista de tipos de máquina disponibles: 2, 4, 8, 16 y 32 núcleos, todo con la etiqueta "Precompilación preparada".

Al crear un codespace a partir de una plantilla en la página "Tus codespaces", GitHub puedes usar automáticamente una precompilación para acelerar el tiempo de creación. Para más información sobre el uso de plantillas, consulta Creación de un codespace a partir de una plantilla.

Note

Cada precompilación creada consume espacio de almacenamiento que generará un cargo facturable o, en los repositorios que pertenezcan a tu cuenta personal de GitHub, se usará parte del almacenamiento incluido mensualmente. Para más información, consulta Acerca de la facturación de GitHub Codespaces.

Proceso de precompilación

Para crear una precompilación, establezca una configuración de precompilación. Al guardar la configuración, se ejecuta un flujo de trabajo de GitHub Actions para crear cada una de las precompilaciones necesarias; con un flujo de trabajo por precompilación. Los flujos de trabajo también se ejecutan cada vez que es necesario actualizar las precompilaciones de la configuración. Esto puede ocurrir a intervalos programados, en inserciones en un repositorio habilitado para precompilación o al cambiar la configuración del contenedor de desarrollo. Para más información, consulta Configuración de precompilaciones.

Cuando se ejecuta un flujo de trabajo de configuración de precompilación, GitHub crea un codespace temporal, realizando operaciones de configuración hasta e incluyendo los comandos onCreateCommand y updateContentCommand en el archivo devcontainer.json. No se ejecutan comandos postCreateCommand durante la creación de un precompilación. Para obtener más información sobre estos comandos, consulte la devcontainer.json referencia en la documentación de VS Code. Después, se toma y almacena una instantánea del contenedor generado.

Al igual que con otros flujos de trabajo de GitHub Actions, la ejecución de flujo de trabajo de configuración de precompilación consumirá algunos de los minutos de GitHub Actions incluidos en la cuenta, si tienes alguno, o incurrirá en cargos por minutos de GitHub Actions. El almacenamiento de precompilaciones de codespace se factura de la misma manera que el almacenamiento de codespaces activos o detenidos. Para más información, consulta Acerca de la facturación de GitHub Codespaces.

Al crear un codespace a partir de una precompilación, GitHub descarga la instantánea de contenedor existente del almacenamiento y la implementa en una máquina virtual nueva, completando los comandos restantes especificados en la configuración del contenedor de desarrollo. Dado que ya se han realizado muchas operaciones, como clonar el repositorio, la creación de un codespace a partir de una precompilación puede ser considerablemente más rápida que la creación de uno sin una precompilación. Esto se aplica cuando el repositorio es grande o los comandos onCreateCommand tardan mucho tiempo en ejecutarse.

Acerca de la inserción de cambios en ramas habilitadas para precompilación

De manera predeterminada, cada inserción en una rama que tiene una configuración de precompilación da como resultado una ejecución de flujo de trabajo de GitHub Actions administrada por GitHub para actualizar la precompilación. El flujo de trabajo de precompilación tiene un límite de simultaneidad de una ejecución de flujo de trabajo a la vez para una configuración de precompilación determinada, a menos que se realicen cambios que afecten a la configuración del contenedor de desarrollo para el repositorio asociado. Para más información, consulta Introducción a los contenedores dev. Si una ejecución ya está en curso, la ejecución del flujo de trabajo que se ha puesto en cola más recientemente se ejecutará después, una vez que se complete la ejecución actual.

Con la precompilación establecida para actualizarse en cada inserción, si hay inserciones muy frecuentes en el repositorio, las actualizaciones de precompilación se producirá al menos con la misma frecuencia con la que se tarda en ejecutar el flujo de trabajo de precompilación. Es decir, si la ejecución del flujo de trabajo suele tardar una hora en completarse, se crearán precompilaciones para el repositorio aproximadamente cada hora, si la ejecución se ejecuta correctamente, o con más frecuencia si se han realizado inserciones que cambian la configuración del contenedor de desarrollo en la rama.

Por ejemplo, imagine que se realizan cinco inserciones consecutivas en una rama que tiene una configuración de precompilación. En esta situación:

  • Se inicia una ejecución de flujo de trabajo para la primera inserción, a fin de actualizar la precompilación.

  • Si las cuatro inserciones restantes no afectan a la configuración del contenedor de desarrollo, sus ejecuciones de flujo de trabajo se ponen en cola en un estado "pendiente".

    Si alguna de las cuatro inserciones restantes cambia la configuración del contenedor de desarrollo, el servicio no la omitirá y ejecutará inmediatamente el flujo de trabajo de creación de la precompilación, y la actualizará en consecuencia si se realiza correctamente.

  • Una vez que se complete la primera ejecución, las ejecuciones de flujo de trabajo para las inserciones 2, 3 y 4 se cancelarán, y el último flujo de trabajo en cola (para la inserción 5) se ejecutará y actualizará la precompilación.