Simon Boisset
Retour au blog

Workflows Expo en CI/CD : builds automatiques, fingerprint et OTA

12 janvier 2026

Workflows Expo en CI/CD : builds automatiques, fingerprint et OTA

Workflows Expo en CI/CD : builds automatiques, fingerprint et OTA

Dans un projet Expo/React Native, la question n’est pas « comment builder ? » mais plutôt « quand est-ce que je dois vraiment builder ? ». Les builds natifs prennent du temps (et coûtent en CI), alors que les updates OTA sont quasi instantanées… mais ne s’appliquent pas à tous les changements.

L’objectif de ce workflow CI/CD : automatiser la chaîne complète (builds natifs, OTA, soumissions), tout en évitant les builds inutiles, grâce au fingerprint Expo et à un versioning explicite.


Le setup : 2 branches, 2 environnements

Je structure le flux autour de deux branches :

  • staging (ou dev) : validation et QA
  • main : production

Le principe est identique sur les deux :

  1. calculer un fingerprint
  2. décider entre build natif ou OTA
  3. publier automatiquement

La différence : en production, on ajoute la soumission store quand un build natif a eu lieu.


Fingerprint : décider automatiquement entre build et OTA

Le fingerprint est un hash calculé à partir de ce qui impacte réellement le binaire natif :

  • dépendances et modules natifs
  • config Expo et plugins
  • certains fichiers de config
  • la version marketing (si tu l’injectes dans la config)

Règle simple

  • Fingerprint identique à un build existant → update OTA suffisante
  • Fingerprint différentnouveau build natif nécessaire

Résultat : tu rebuild seulement quand un changement native l’impose.


Versioning : version marketing explicite, builds auto-incrémentés

Je sépare volontairement :

  • version marketing (lisible, intentionnelle) : gérée par nous
  • numéros de build (buildNumber iOS / versionCode Android) : laissés à Expo/EAS (auto-incrément)

La version marketing est stockée dans package.json :

{
  "name": "my-app",
  "version": "1.4.0"
}

app.config.ts : importer package.json pour définir la version marketing

import type { ConfigContext, ExpoConfig } from "expo/config";
import pkg from "./package.json";

export default ({ config }: ConfigContext): ExpoConfig => ({
  ...config,
  version: pkg.version,
});

Conclusion & accompagnement

Mettre en place ce type de workflow CI/CD avec Expo permet de réduire fortement les coûts de build, d’accélérer les cycles de livraison et de sécuriser les mises en production grâce à des règles claires et automatisées.

Chaque projet ayant ses spécificités (organisation d’équipe, contraintes produit, stores, legacy), ce type de pipeline mérite souvent d’être adapté finement.

👉 Vous souhaitez mettre en place ou optimiser un workflow Expo CI/CD (fingerprint, OTA, versioning, soumissions automatiques) sur votre projet ?

Je vous accompagne sur l’architecture, la configuration EAS, la CI et les bonnes pratiques Expo/React Native.

➡️ Prenez rendez-vous avec moi pour en discuter et construire un pipeline adapté à votre application.

Simon Boisset

Je suis Simon Boisset, développeur mobile/full-stack. J'aide les équipes à livrer des apps React Native/Expo, remettre à plat des stacks legacy et sécuriser les releases.

Prendre rendez-vous