Ce repo utilise GitHub Actions pour compiler et builder l'app Flutter automatiquement.
Déclenché:
- ✅ Chaque
pushsurmain - ✅ Chaque
pull_requestversmain
Actions exécutées:
- 🔧 Setup Flutter 3.38.9
- 📦 Restaure les dépendances (
flutter pub get) - 🔍 Analyse Dart (
flutter analyze) - 📋 Produit le rapport
flutter pub outdated - 🧪 Lance les tests Flutter et le contrôle de format
- 🔎 Injecte la release et le DSN Sentry dans les builds production
- 📱 Build Web Release
- 🤖 Build APK signé avec une clé stable fournie par GitHub Secrets
- 🔐 Produit les sommes SHA-256
- 💾 Publie les artefacts et la GitHub Release versionnée
Durée: ~5-7 minutes
Après chaque run, les artefacts sont disponibles dans Actions → [Run] → Artifacts:
build/web/
├── index.html
├── main.dart.js
├── main.dart.js.map
└── assets/
├── fonts/
├── packages/
└── ...
Utilisation:
# Servir localement:
python -m http.server --directory build/web/
# Déployer sur Netlify/Vercel:
netlify deploy --prod --dir build/web/La même archive de workflow contient :
tablemaster-prod.apk
tablemaster-web-prod.zip
SHA256SUMS
CHANGELOG.md
flutter-dependencies-report.txt
Utilisation:
- 📱 Installer sur Android:
adb install app-release.apk - 📤 Télécharger sur Firebase App Distribution
- 🏪 Beta testing avant Google Play
La release GitHub contient également les résultats JSON/log des tests afin de relier l'APK au run CI qui l'a validé.
- Aller à Actions sur GitHub
- Cliquer sur le workflow Flutter Build CI
- Cliquer sur le run
- Voir les logs complets de chaque step
Vérifier:
- ✅ Workflow activé: Actions → ... → Enable workflows
- ✅ Branches
mainetdevelopexistent - ✅ Fichier
.github/workflows/flutter.ymlexiste
Relancer localement:
flutter clean
flutter pub get
flutter build apk --releaseVérifier les dépendances:
flutter pub outdated
flutter pub upgradeVoir les erreurs détaillées:
flutter build apk --release -v- Le build APK peut prendre 200+ secondes
- GitHub Actions timeout par défaut: 360 minutes (6h) - pas de problème
- Si vraiment trop lent, augmenter
timeout-minutesdans le workflow
- name: Deploy to Firebase
uses: wzieba/Firebase-Distribution-Github-Action@v1
if: success()
with:
serviceCredentialsFile: ./credentials.json
file: build/app/outputs/flutter-apk/app-release.apk
groups: testers
releaseNotes: "Build ${{ github.run_number }}"Ajouter credentials.json dans Settings → Secrets → Actions
- name: Deploy to Google Play
uses: r0adkll/upload-google-play@v1
if: success()
with:
serviceAccountJsonPlainText: ${{ secrets.GOOGLE_PLAY_KEY }}
packageName: com.tablemaster.app
releaseFiles: build/app/outputs/bundle/release/app-release.aab
track: beta # ou 'production' après tests- name: Deploy Web to Netlify
uses: nwtgck/actions-netlify@v2.1
if: success()
with:
publish-dir: build/web/
production-branch: main
env:
NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}| Target | Size | Temps |
|---|---|---|
| Web | ~50 MB (total avec assets) | 63s |
| APK | 58 MB | 205s |
| AAB | ~45 MB | 200s |
| Linux | ~100 MB | 150s |
✅ Web (HTML5/JavaScript) ✅ Android (APK distribué directement)
Pour iOS/Windows/macOS, créer des workflows séparés sur macOS/Windows runners.
Pour le déploiement automatique, ajouter à Settings → Secrets and variables → Actions:
SENTRY_DSN_FLUTTER # DSN du projet Sentry Flutter
ANDROID_KEYSTORE_BASE64 # Keystore stable encodé en base64
ANDROID_KEY_ALIAS # Alias de la clé
ANDROID_STORE_PASSWORD # Mot de passe du keystore
ANDROID_KEY_PASSWORD # Mot de passe de la clé
Le DSN Sentry n'est pas stocké dans config/prod.json : le workflow .github/workflows/flutter.yml le passe à flutter build web et flutter build apk avec --dart-define=SENTRY_DSN=....
- GitHub Actions Docs
- Flutter CI/CD Guide
- subosito/flutter-action
- Firebase App Distribution
- Google Play Upload Action
Mis à jour: 7 mai 2026