Workflows Expo en CI/CD : builds automatiques, fingerprint et OTA
12 janvier 2026
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(oudev) : validation et QAmain: production
Le principe est identique sur les deux :
- calculer un fingerprint
- décider entre build natif ou OTA
- 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érent → nouveau 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 (
buildNumberiOS /versionCodeAndroid) : 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.
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.