# Releases Tuist utiliza un sistema de publicación continua que publica automáticamente nuevas versiones cada vez que se incorporan cambios significativos a la rama principal. Este enfoque garantiza que las mejoras lleguen rápidamente a los usuarios sin intervención manual de los mantenedores. ## Visión general Lanzamos continuamente tres componentes principales: - **Tuist CLI** - La herramienta de línea de comandos - **Tuist Server** - Los servicios backend - **Tuist App** - Las aplicaciones macOS e iOS (la aplicación iOS sólo se despliega continuamente en TestFlight, más información [aquí](#app-store-release) Cada componente tiene su propio proceso de publicación que se ejecuta automáticamente cada vez que se envía a la rama principal. ## Cómo funciona ### 1. Comprometer convenios Utilizamos [Conventional Commits](https://www.conventionalcommits.org/) para estructurar nuestros mensajes de confirmación. Esto permite a nuestras herramientas comprender la naturaleza de los cambios, determinar los saltos de versión y generar los registros de cambios adecuados. Formato: `tipo(ámbito): descripción` #### Tipos de compromiso y su impacto | Tipo | Descripción | Versión Impacto | Ejemplo | | -------------- | ------------------------------- | --------------------------------- | ---------------------------------------------------------- | | `feat` | Nueva función o capacidad | Pequeño cambio de versión (x.Y.z) | `feat(cli): añadir compatibilidad con Swift 6` | | `fije` | Corrección de errores | Parche versión bump (x.y.Z) | `fix(app): resolver el bloqueo al abrir proyectos` | | `docs` | Cambios en la documentación | Ningún comunicado | `docs: guía de instalación de actualizaciones` | | `estilo` | Cambios en el estilo del código | Ningún comunicado | `estilo: formatear código con swiftformat` | | `refactorizar` | Refactorización del código | Ningún comunicado | `refactor(server): simplificar la lógica de autenticación` | | `perf` | Mejoras de rendimiento | Aumento de la versión del parche | `perf(cli): optimizar la resolución de dependencias` | | `prueba` | Pruebas adiciones/cambios | Ningún comunicado | `test: añadir pruebas unitarias para la caché` | | `tarea` | Tareas de mantenimiento | Ningún comunicado | `tarea: actualizar dependencias` | | `ci` | Cambios CI/CD | Ningún comunicado | `ci: añadir flujo de trabajo para liberaciones` | #### Cambios de última hora Los cambios de ruptura provocan un salto de versión mayor (X.0.0) y deben indicarse en el cuerpo de la confirmación: ``` feat(cli): change default cache location BREAKING CHANGE: The cache is now stored in ~/.tuist/cache instead of .tuist-cache. Users will need to clear their old cache directory. ``` ### 2. Detección de cambios Cada componente utiliza [git cliff](https://git-cliff.org/) para: - Analizar los commits desde la última versión - Filtrar commits por ámbito (cli, app, servidor) - Determinar si hay cambios liberables - Generación automática de registros de cambios ### 3. Liberación de tuberías Cuando se detectan cambios liberables: 1. **Cálculo de la versión**: El pipeline determina el siguiente número de versión 2. **Changelog generation**: git cliff crea un changelog a partir de los mensajes de commit 3. **Proceso de construcción**: El componente se construye y se prueba 4. **Creación de versiones**: Se crea una versión GitHub con artefactos 5. **Distribución**: Las actualizaciones se envían a los gestores de paquetes (por ejemplo, Homebrew para CLI) ### 4. Filtrado de alcance Cada componente sólo se libera cuando tiene cambios relevantes: - **CLI**: Commits con alcance `(cli)` o sin alcance - **App**: Commits con `(app)` scope - **Servidor**: Commits con `(servidor)` ámbito ## Redactar buenos mensajes de confirmación Dado que los mensajes de confirmación influyen directamente en las notas de publicación, es importante escribir mensajes claros y descriptivos: ### Hazlo: - Utiliza el presente: "añade una función", no "añade una función". - Sea conciso pero descriptivo - Incluir el ámbito de aplicación cuando los cambios sean específicos de un componente - Cuestiones de referencia cuando proceda: `fix(cli): resolver el problema de la caché de compilación (#1234)` ### No lo hagas: - Utilizar mensajes vagos como "corregir error" o "actualizar código". - Mezclar varios cambios no relacionados en una sola confirmación - Olvidar incluir la información sobre los cambios de última hora ### Cambios de última hora Para cambios de última hora, incluya `BREAKING CHANGE:` en el cuerpo de la confirmación: ``` feat(cli): change cache directory structure BREAKING CHANGE: Cache files are now stored in a new directory structure. Users need to clear their cache after updating. ``` ## Flujos de trabajo de liberación Los flujos de trabajo de liberación se definen en: - `.github/workflows/cli-release.yml` - Versiones CLI - `.github/workflows/app-release.yml` - Lanzamientos de aplicaciones - `.github/workflows/server-release.yml` - Versiones del servidor Cada flujo de trabajo: - Se ejecuta en empuja a la principal - Puede activarse manualmente - Utiliza git cliff para la detección de cambios - Gestiona todo el proceso de liberación ## Seguimiento de las liberaciones Puede supervisar las liberaciones a través de: - [Página de versiones de GitHub](https://github.com/tuist/tuist/releases) - Pestaña Acciones de GitHub para las ejecuciones del flujo de trabajo - Archivos Changelog en cada directorio de componentes ## Beneficios Este enfoque de liberación continua proporciona: - **Entrega rápida**: Los cambios llegan a los usuarios inmediatamente después de la fusión - **Reducción de los cuellos de botella**: No hay que esperar a las publicaciones manuales - **Comunicación clara**: Registros de cambios automatizados a partir de mensajes de confirmación - **Proceso coherente**: El mismo flujo de liberación para todos los componentes - **Garantía de calidad**: Sólo se publican los cambios probados ## Solución de problemas Si falla una liberación: 1. Comprueba los registros de acciones de GitHub para el flujo de trabajo fallido 2. Asegúrese de que sus mensajes de confirmación siguen el formato convencional 3. Verificar que todas las pruebas se superan 4. Compruebe que el componente se compila correctamente Para correcciones urgentes que requieren una liberación inmediata: 1. Asegúrese de que su compromiso tiene un alcance claro 2. Tras la fusión, supervise el flujo de trabajo de liberación 3. Si es necesario, activa un desbloqueo manual ## Lanzamiento en App Store Mientras que la CLI y el servidor siguen el proceso de publicación continua descrito anteriormente, la aplicación **iOS** es una excepción debido al proceso de revisión de la App Store de Apple: - **Lanzamientos manuales**: Los lanzamientos de aplicaciones iOS requieren un envío manual a la App Store. - **Retrasos en la revisión**: Cada versión debe pasar por el proceso de revisión de Apple, que puede tardar entre 1 y 7 días. - **Cambios agrupados**: Los cambios múltiples suelen agruparse en cada versión de iOS - **TestFlight**: Las versiones beta pueden distribuirse a través de TestFlight antes de su lanzamiento en el App Store. - **Notas de la versión**: Debe estar escrito específicamente para las directrices de la App Store La aplicación para iOS sigue las mismas convenciones de confirmación y utiliza git cliff para generar el registro de cambios, pero la publicación real para los usuarios se realiza de forma menos frecuente y manual.