Architecture des workflows CI/CD — Analyse interactive
git push sur la branche flutterflow lance simultanément l'Orchestrateur et deux workers autonomes (Android icons + iOS icon). Les 5 autres workflows ne se lancent qu'à la demande de l'Orchestrateur via workflow_dispatch.
github.actor != 'github-actions[bot]' pour éviter une boucle infinie de triggers.
concurrency: cancel-in-progress: false — un seul run à la fois par branche, les suivants font la queue.
git pull --rebase + 3 tentatives de push pour gérer les conflits lorsque plusieurs workers commitent en parallèle.
beforeId), envoie un workflow_dispatch, puis poll toutes les 5 secondes (max 30 min) jusqu'à conclusion: success. En cas d'échec, il arrête tout.
.assets/android/icons/ → android/app/src/main/res/.assets/ios/AppIcon.appiconset/ → ios/Runner/Assets.xcassets/ITSAppUsesNonExemptEncryption = false dans Info.plist (via Python + plistlib)CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; dans Debug/Release/Profile via regex Pythongithub.run_number (monotone, ex: 1.0.0+42)// Pour chaque workflow de la queue : 1. getWorkflowIdByName(name) // trouve l'ID par nom 2. dispatchWorkflow(workflowId) // POST workflow_dispatch + mémorise beforeId 3. waitForCompletion(id, beforeId, name) // poll toutes les 5s, max 360 × 5s = 30 min // Critères de détection du bon run : runs .filter(r => r.id !== beforeId) // exclut l'ancien run .filter(r => r.event === "workflow_dispatch") .filter(r => r.head_branch === branch) .sort((a, b) => new Date(b.created_at) - new Date(a.created_at))[0] // Résultat : "completed" + "success" → passe au suivant ✅ "completed" + autre → throw Error ❌ (arrêt de la queue) timeout 30 min → throw Error ❌
← Sélectionne un workflow
actions:write — requis pour que l'orchestrateur puisse déclencher d'autres workflows via l'API.Runner.entitlements encodé en base64 (certificat de développement).RunnerRelease.entitlements encodé en base64 (certificat de production).GoogleService-Info.plist encodé en base64 — fichier Firebase exclu du repo.| Workflow | contents: read | contents: write | actions: read | Déclencheur |
|---|---|---|---|---|
| orchestrate-autofix | ✅ | — | ✅ | push dispatch |
| restore_android_icons | — | ✅ | — | push dispatch |
| restore_ios_app_icon | — | ✅ | — | push dispatch |
| ensure-ios-export-compliance | — | ✅ | — | dispatch only |
| restore_entitlment | — | ✅ | — | dispatch only |
| patch_pbxproj | — | ✅ | — | dispatch only |
| restore_firebase_plist | — | ✅ | — | dispatch only |
| increment_version | — | ✅ | — | dispatch only |
subscribe / unsubscribe actionsdocs/ — documentation interactivelib/backend/supabase/database/tables/)lib/custom_code/actions/)