[DTP-Worker 20260803_033642] Sprint 5 P1 · feat · CI/CD Mobile : workflow Gitea Actions mobile-build.yml (build EAS iOS App Store #32 + Android Play Store)

Livrable FONCTIONNEL non fait, explicitement demandé par DIRECTIVE_MOBILE_STORES
_20260803.md P1 (« Créer .gitea/workflows/mobile-build.yml ») — classé non-bloqueur
in-périmètre worker. Triggers push main + tags v* + workflow_dispatch ; jobs
preflight (toujours vert) + build-ios + build-android → eas build --profile
production --non-interactive (profils lus de mobile/app_config/out/eas_build.json).

Activation différée (#6/#8) : builds gardés par `if secrets.EAS_TOKEN != '' &&
vars.MOBILE_NATIVE_REPO != ''` → SKIP tant que Michel n'a pas fourni token+repo
natif → CI jamais rouge avant activation ; aucun credential fabriqué (a_confirmer).
Code Expo natif = autre dépôt Gitea, cloné au run (jamais recopié). Gitea only (#2).

Consommateur régénéré : pointeur README mobile (4261→4917 o) mesuré par critère DOC
de l'audit 4Big → audit_4big_gen.py build régénéré (verdict inchangé 22/22 ≥95).
check_ci_integrity n'inspecte que ci.yml → 2e workflow invisible au gate.
Zéro nouveau module · zéro gate ajouté (#5). run_ci.sh 30 PASS · 0 FAIL.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Claude Code DTP Worker
2026-08-03 03:46:18 +00:00
parent d0b354f81e
commit af84b21f89
4 changed files with 194 additions and 1 deletions
+50
View File
@@ -1,5 +1,55 @@
# Activity Log · 2026-08-03 · Claude Code DTP Worker
## Session 033642 · Sprint 5 P1 · Livrable FONCTIONNEL : workflow CI/CD Mobile `.gitea/workflows/mobile-build.yml` (build EAS iOS + Android)
**Contexte + choix de tâche.** `./run_ci.sh` au démarrage : **30 PASS · 0 FAIL · 0 SKIP**,
arbre propre. Michel : « commits fonctionnels, pas juste docs ». La roadmap est couverte
par des modules gatés+verts, mais `DIRECTIVE_MOBILE_STORES_20260803.md` (Sprint 5, actif)
liste explicitement en **P1 · CI/CD Mobile** la création de `.gitea/workflows/mobile-build.yml`
— classée **non-bloqueur** (« configurer sans token, activation quand Michel fournit »),
donc **in-périmètre worker** (fichier config versionné, aucune exécution VPS/stores #8).
Vérifié absent : `.gitea/workflows/` ne contenait que `ci.yml`. **Vraie tâche fonctionnelle
non faite** → exécutée.
**Livrable créé : `.gitea/workflows/mobile-build.yml`.**
- **Triggers** (conformes directive P1) : push `main` + tags `v*` (paths `mobile/**` +
le workflow) + `workflow_dispatch` (inputs `platform` all/ios/android, `profile`).
- **Jobs** : `preflight` (TOUJOURS vert · prouve la présence de la config EAS versionnée
`mobile/app_config/out/eas_build.json` + rapporte l'état des secrets, sans jamais les
logger) ; `build-ios` (App Store #32) + `build-android` (Play Store) → `eas build
--platform … --profile production --non-interactive` (directive P4).
- **Source de vérité** : les profils de build viennent de l'artefact versionné
`eas_build.json` (development/preview/production) — pas réinventés.
- **Code natif hors repo** : le code Expo vit dans un **autre dépôt Gitea**
(`/opt/oto/mobile/native/` · Expo 51→cible 54) ; cloné au run depuis la variable
`vars.MOBILE_NATIVE_REPO`**jamais recopié ici**.
**Sûreté (activation différée · #6 zéro invention · #8).** Les jobs de build sont gardés
par `if: secrets.EAS_TOKEN != '' && vars.MOBILE_NATIVE_REPO != ''`**SKIP** tant que
Michel n'a pas fourni token+repo (« Vrais bloqueurs » de la directive : EAS_TOKEN 2 min sur
expo.dev). Conséquence : ce workflow **ne rend JAMAIS le CI rouge** avant activation, et
`preflight` reste vert et informatif. Aucun credential fabriqué : token, repo natif,
appleId/ascAppId/serviceAccount restent des secrets/vars `a_confirmer` — cohérent avec les
champs `null · a_confirmer` du livrable mobile. Plateforme **Gitea Actions uniquement** (#2).
**Non-régression des gates (vérifié).** `check_ci_integrity.sh` n'inspecte QUE `ci.yml`
(chemin en dur `CI=".gitea/workflows/ci.yml"`) → le 2e workflow lui est invisible, aucun
job à ajouter à `gate.needs`. `guard_constraints.sh` vert (aucune URL/usage interdit ;
`actions/checkout@v4` déjà toléré via `ci.yml`). YAML valide (pyyaml).
**Consommateur régénéré (classe [[artifact-reproducibility-gate]]).** Ajout d'un pointeur
concis (paragraphe « CI/CD Mobile » + 1 ligne au tableau périmètre) dans
`mobile/app_config/README.md` → sa taille passe 4261→4917 octets, mesurée par le critère
**DOC** de l'audit 4Big. `check-artifacts` a viré ROUGE (dérive attendue) →
`audit_4big_gen.py build -o out` régénéré : **seule** la ligne `evidence "README.md (…octets)"`
change ; verdict inchangé **PASS · 22/22 modules ≥ 95**. Lien Markdown vérifié résolvant
(`../../../.gitea/workflows/mobile-build.yml`).
**Vérifications finales.** `./run_ci.sh`**30 PASS · 0 FAIL · 0 SKIP**. **Zéro nouveau
module · zéro gate ajouté (#5)** · aucune commande VPS (#8).
Aucun `git clean` exécuté <!-- ci-allow : mention de l'interdit absolu, jamais exécuté -->.
## Session 020634 · Dérive ground-truth résiduelle : roadmap L18 (colonne « Existe déjà ») affirmait encore « Expo 54 » — corrigée → Expo 51 réel (#6)
**Contexte.** `./run_ci.sh` au démarrage : **30 PASS · 0 FAIL · 0 SKIP**, arbre propre.