Votre projet Swift mérite un ciel automatisé : construisons un CI/CD de zéro
\n\nVous avez écrit un super package ou une application Swift. Le code déchire, les tests passent en local, vous vous sentez comme une rockstar. Mais dès que vous faites un push — l'enfer commence : « Est-ce que ça compile sur Linux ? », « Est-ce que les tests passent sur macOS ? », « Et si j'ai oublié de lancer SwiftLint ? ».
\n\nÇa vous parle ? Si oui, vous avez besoin d'un pipeline CI/CD pour Swift. C'est comme un pilote automatique pour votre code : il compile, teste, vérifie le style et même déploie tout seul. Dans cet article, nous allons configurer un pipeline CI/CD Swift de zéro avec GitHub Actions. Vous obtiendrez un code fonctionnel prêt à l'emploi, que vous pouvez copier et utiliser dès aujourd'hui.
\n\nIndice : après la configuration, vous recevrez des coches vertes à chaque commit, au lieu de stresser devant la console.\n\n
Pourquoi le CI/CD pour Swift n'est pas un luxe, mais une nécessité
\n\nSwift vit dans deux mondes : macOS (Xcode, CocoaPods, Carthage) et Linux (Vapor, SwiftNIO, projets serveur). Sans CI/CD, vous risquez :
\n\n- \n
- De rater une erreur de compilation sur une autre plateforme \n
- D'oublier de lancer le linter (et ensuite le code ressemble à un champ de bataille) \n
- De perdre des heures en déploiement manuel \n
- De perdre du temps à chercher des régressions \n
Un pipeline CI/CD Swift bien configuré résout tous ces problèmes. Il fonctionne 24h/24 et 7j/7, ne boit pas de café et ne dit pas « chez moi ça marche ». C'est parti !
\n\nÉtape 1 : Choisir l'outil — GitHub Actions
\n\nNous allons utiliser GitHub Actions — c'est le CI/CD intégré à GitHub, et il est parfait pour Swift. Raisons :
\n\n- \n
- Gratuit pour les dépôts publics (2000 minutes par mois)
- Runners macOS — pour compiler avec Xcode
- Runners Linux — pour les projets Swift serveur
- Actions prêtes à l'emploi pour SwiftLint, les tests, le déploiement
Si vous utilisez GitLab, Bitbucket ou Jenkins — les principes sont les mêmes, mais la syntaxe YAML différera.
\n\nÉtape 2 : Structure de base d'un pipeline CI/CD pour Swift
\n\nTout pipeline se compose de trois étapes :
\n\n- \n
- Build — compilation du projet (SPM ou Xcode)
- Test — exécution des tests unitaires
- Lint — vérification du style de code (optionnel, mais fortement recommandé)
En option, vous pouvez ajouter le déploiement (par exemple, sur un serveur ou dans TestFlight).
\n\nCréer le fichier .github/workflows/swift-ci.yml
\n\nÀ la racine de votre dépôt, créez un dossier .github/workflows/ et à l'intérieur le fichier swift-ci.yml. Voici un pipeline minimal fonctionnel :
name: Pipeline CI/CD Swift\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: Récupérer le code\n uses: actions/checkout@v3\n\n - name: Configurer Swift\n uses: swift-actions/setup-swift@v1\n with:\n swift-version: "5.9"\n\n - name: Compiler\n run: swift build\n\n - name: Exécuter les tests\n run: swift test\n\nCe pipeline CI/CD pour Swift s'exécute à chaque push ou pull request sur main/develop. Il compile le projet et exécute les tests sur Ubuntu. Simple ? Oui. Mais ajoutons un peu de magie.
\n\nÉtape 3 : Ajouter macOS et Xcode à la matrice de compilation
\n\nLes développeurs Swift travaillent souvent sur macOS, et la partie serveur sur Linux. Pour être sûr que le projet compile partout, utilisons une matrice de stratégies (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: Configurer Swift\n uses: swift-actions/setup-swift@v1\n