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 forma predeterminada, siempre que inserte cambios en el repositorio, GitHub Codespaces usa GitHub Actions para actualizar automáticamente las compilaciones previas.
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 su región, verá la etiqueta " Prebuild ready" en la lista de opciones de tipo de máquina al crear un espacio de código. Si todavía se está creando una precompilación, verá la etiqueta " Precompilación en curso". Para más información, consulta Creación de un codespace para un repositorio.

Cuando creas un codespace a partir de una plantilla en la página "Tus codespaces", GitHub puede usar automáticamente una precompilación para acelerar la creación. Para más información sobre el uso de plantillas, consulta Creación de un codespace a partir de una plantilla.
Nota:
Cada precompilación que se crea consume espacio de almacenamiento, lo que supondrá un cargo facturable o, en el caso de los repositorios de tu cuenta personal GitHub, utilizará parte de tu almacenamiento mensual incluido. Para más información, consulta 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 GitHub Actions flujo de trabajo para crear cada una de las precompilaciones necesarias; 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 y lleva a cabo operaciones de configuración hasta incluir los comandos onCreateCommand y updateContentCommand del archivo devcontainer.json. Durante la creación de una preconstrucción no se ejecutan comandos postCreateCommand. Para obtener más información sobre estos comandos, consulte la devcontainer.json referencia en la VS Code documentación. Después, se toma y almacena una instantánea del contenedor generado.
Como ocurre con otros flujos de trabajo de GitHub Actions, ejecutar un flujo de trabajo de configuración de precompilación consumirá parte de los minutos de GitHub Actions incluidos con su cuenta, si dispone de ellos, o se le cobrarán los 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 facturación de GitHub Codespaces.
Al crear un espacio de código a partir de una compilación previa, GitHub descarga la instantánea de contenedor existente del almacenamiento e 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 forma predeterminada, cada push a una rama que tiene una configuración de prebuild genera una ejecución de flujo de trabajo de GitHub gestionada por GitHub Actions para actualizar el prebuild. 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 configurada para actualizarse con cada push, si hay pushes muy frecuentes en tu repositorio, las actualizaciones de precompilación se producirán al menos con la misma frecuencia 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 la ejecución de un flujo de trabajo para el primer push, a fin de actualizar el prebuild.
-
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.