Pipeline CI/CD pour Swift : configuration de zéro sur macOS et Linux

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Votre projet Swift mérite un ciel automatisé : construisons un CI/CD de zéro

\n\n

Vous 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\n
Indice : 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\n

Swift 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
\n\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\n

Nous 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
\n\n

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\n

Tout pipeline se compose de trois étapes :

\n\n
    \n
  1. Build — compilation du projet (SPM ou Xcode)
  2. Test — exécution des tests unitaires
  3. Lint — vérification du style de code (optionnel, mais fortement recommandé)
\n\n

En option, vous pouvez ajouter le déploiement (par exemple, sur un serveur ou dans TestFlight).

\n\n

Cré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 :

\n\n
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\n

Ce 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\n

Les 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\n
jobs:\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                

Blogs

Book Recommendations