Tu proyecto Swift merece un cielo automatizado: construyendo CI/CD desde cero
\n\nEscribiste un paquete o aplicación Swift increíble. El código vuela, las pruebas pasan localmente, te sientes una estrella de rock. Pero al hacer push, comienza el infierno: «¿Se compilará en Linux?», «¿Las pruebas pasarán en macOS?», «¿Y si olvidé ejecutar SwiftLint?».
\n\n¿Te suena familiar? Si es así, necesitas un pipeline CI/CD para Swift. Es como un piloto automático para tu código: compila, prueba, verifica el estilo e incluso despliega. En este artículo configuraremos un pipeline CI/CD Swift desde cero usando GitHub Actions. Obtendrás código funcional listo para copiar y usar hoy mismo.
\n\nSpoiler: después de la configuración, recibirás marcas verdes en cada commit, en lugar de encanecer frente a la consola.\n\n
Por qué CI/CD para Swift no es un lujo, sino una necesidad
\n\nSwift vive en dos mundos: macOS (Xcode, CocoaPods, Carthage) y Linux (Vapor, SwiftNIO, proyectos de servidor). Sin CI/CD corres el riesgo de:
\n\n- \n
- Pasar por alto un error de compilación en otra plataforma \n
- Olvidar ejecutar el linter (y luego el código parece un campo de batalla) \n
- Perder horas en despliegues manuales \n
- Perder tiempo buscando regresiones \n
Un pipeline CI/CD Swift bien configurado resuelve todos estos problemas. Funciona 24/7, no toma café y no dice «en mi máquina funciona». ¡Allá vamos!
\n\nPaso 1: Elegir la herramienta — GitHub Actions
\n\nUsaremos GitHub Actions — el CI/CD integrado de GitHub, ideal para Swift. Razones:
\n\n- \n
- Gratuito para repositorios públicos (2000 minutos al mes) \n
- Runners macOS — permite compilar con Xcode \n
- Runners Linux — para proyectos Swift de servidor \n
- Actions predefinidas para SwiftLint, pruebas, despliegue \n
Si usas GitLab, Bitbucket o Jenkins, los principios son los mismos, pero la sintaxis YAML será diferente.
\n\nPaso 2: Estructura básica del pipeline CI/CD para Swift
\n\nCualquier pipeline consta de tres etapas:
\n\n- \n
- Build — compilación del proyecto (SPM o Xcode) \n
- Test — ejecución de pruebas unitarias \n
- Lint — verificación del estilo del código (opcional, pero muy recomendable) \n
Adicionalmente, se puede agregar despliegue (por ejemplo, a un servidor o TestFlight).
\n\nCrear el archivo .github/workflows/swift-ci.yml
\n\nEn la raíz de tu repositorio, crea la carpeta .github/workflows/ y dentro el archivo swift-ci.yml. Este es el pipeline mínimo funcional:
name: Swift CI/CD Pipeline\n\non:\n push:\n branches: [ main, develop ]\n pull_request:\n branches: [ main ]\n\njobs:\n build-and-test:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout code\n uses: actions/checkout@v3\n\n - name: Setup Swift\n uses: swift-actions/setup-swift@v1\n with:\n swift-version: "5.9"\n\n - name: Build\n run: swift build\n\n - name: Run tests\n run: swift test\n\nEste pipeline CI/CD para Swift se ejecuta en cada push o pull request a main/develop. Compila el proyecto y ejecuta las pruebas en Ubuntu. ¿Sencillo? Sí. Pero agreguemos algo de magia.
\n\nPaso 3: Agregar macOS y Xcode a la matriz de compilación
\n\nLos desarrolladores Swift suelen trabajar en macOS, y la parte del servidor en Linux. Para asegurarte de que el proyecto se compile en todas partes, usamos una matriz de estrategias (matrix strategy):
\n\njobs:\n build-and-test:\n strategy:\n matrix:\n os: [ubuntu-latest, macos-latest]\n swift-version: ["5.8", "5.9"]\n\n runs-on: ${{ matrix.os }}\n\n steps:\n - uses: actions/checkout@v3\n\n - name: Setup Swift\n uses: swift-actions/setup-swift@v1\n