Aller au contenu principal

Gestion des Releases et des Patchs

Le cycle de vie binaire dans TkushPatch repose sur deux entités complémentaires :

  1. La Release de base (Release) : Le binaire compilé (binaire d'application sur Android ou App.framework sur iOS) distribué sur le Google Play Store ou l'Apple App Store. Une fois enregistrée, une Release est immuable et verrouillée par son empreinte baseSha256Hash.
  2. Le Patch OTA (Patch) : Le différentiel binaire compressé (différentiel binaire compressé, fichier .vmcode) calculé par le serveur entre la Release de base du Jour 1 et le nouveau binaire Dart compilé, signé en signature numérique (SHA256withRSA).

1. Registre Maître (/releases) vs Vue Application (/apps/[appId]/releases)​

La console propose deux niveaux de lecture :

  • Registre Maître (/releases, src/app/releases/page.tsx) : Vue transverse multi-applications permettant aux équipes Release, Sécurité et SRE de superviser toutes les releases et tous les patchs du tenant, d'enregistrer une nouvelle Release de base (POST /api/admin/v1/releases) ou de soumettre un nouveau Patch (POST /api/admin/v1/patches).
  • Vue Application (/apps/[appId]/releases, src/app/apps/[appId]/releases/page.tsx) : Vue dédiée à une seule application avec consolidation multi-ABI.

Consolidation Multi-ABI​

Lorsqu'une commande tk-ota-push release android est exécutée sur un App Bundle (.aab), la CLI enregistre automatiquement les binaires de référence pour chaque architecture (aarch64, arm, x86_64). La page /apps/[appId]/releases regroupe ces entrées sous une seule ligne logique (releaseVersion, platform) en affichant les badges d'architectures couvertes (aarch64, armv7, x86_64), le statut Store et le nombre total de patchs rattachés.


2. Vue détaillée d'une Release (/apps/[appId]/releases/[version])​

En cliquant sur une version dans /apps/[appId]/releases, l'opérateur accède au dossier complet de cette version (src/app/apps/[appId]/releases/[version]/layout.tsx), structuré en 6 sous-onglets :

Sous-ongletRouteContenu et actions
1. Overview/apps/[appId]/releases/[version]Chronologie des patchs (#1, #2...), statut (STAGED, APPROVED_AND_SIGNED, ROLLED_BACK), canal, rollout %, pays et actions rapides
2. Insights/apps/[appId]/insightsTélémétrie filtrée sur cette version : installations réussies, échecs et taux de stabilité
3. Size/apps/[appId]/releases/[version]/sizeAnalyse comparative de taille : binaire de base vs taille des patchs .vmcode et gain de bande passante (%)
4. Artifacts/apps/[appId]/releases/[version]/artifactsListe des artefacts physiques par ABI (aarch64, arm, x86_64), hachages SHA-256 (base, pubspec.lock, assets, nativeCodeHash) et téléchargement des .symbols
5. Notes/apps/[appId]/releases/[version]/notesÉditeur de notes de version (Release Notes / Changelog) persistées par version (localStorage tks_release_notes_<appId>_<version>)
6. Settings/apps/[appId]/releases/[version]/settingsChangement du statut Store (LIVE_ON_STORE, IN_STORE_REVIEW, DEPRECATED) via PATCH /api/admin/v1/releases/{id}/status

3. Actions opérateur sur une Release et ses Patchs​

Toutes les actions critiques sont protégées par le composant RoleGuard et journalisées dans la piste d'audit :

États opérationnels d'un patch dans la Console Web
  • STAGED : Correctif soumis en attente de revue. Non distribué aux utilisateurs.
  • APPROVED_AND_SIGNED : Correctif approuvé par un second intervenant et scellé par signature numérique.
  • ROLLED_BACK : Correctif révoqué suite à une anomalie. Les appareils reviennent sur la version socle.

Tableau des actions disponibles​

ActionEndpoint BackendRôles autorisés (roles.ts)Effet technique
Enregistrer une ReleasePOST /api/admin/v1/releasesROLE_ADMIN, ROLE_RELEASE_DEVELOPERVérifie le quota Anti-Bomb (maxReleaseSizeMb), calcule le SHA-256, stocke le binaire de base et les .symbols
Soumettre un PatchPOST /api/admin/v1/patchesROLE_ADMIN, ROLE_RELEASE_DEVELOPERGénère le diff différentiel binaire compressé, vérifie le quota maxPatchSizeMb, place le patch en STAGED (ou APPROVED_AND_SIGNED si auto-signé hors 4-Yeux)
Approuver et SignerPOST /api/admin/v1/patches/{id}/approveROLE_ADMIN, ROLE_SECURITY_OFFICERVérifie la règle des 4-Yeux, signe les 64 caractères ASCII du targetSha256Hash en signature numérique et passe à APPROVED_AND_SIGNED
Modifier le Rollout %PATCH /api/admin/v1/patches/{id}/rolloutROLE_ADMIN, ROLE_SRE_ADMINAjuste le pourcentage Canary (0% à 100%) et invalide le cache L1/L2
Promouvoir de canalPOST /api/admin/v1/patches/{id}/promoteROLE_ADMIN, ROLE_SECURITY_OFFICERClone le patch APPROVED_AND_SIGNED vers un canal cible (staging, stable) sans recompilation
Kill-Switch / RollbackPOST /api/admin/v1/patches/{id}/rollbackROLE_ADMIN, ROLE_SRE_ADMINPasse le statut à ROLLED_BACK, force rolloutPercentage = 0 et ajoute le numéro à rolled_back_patch_numbers
Changer statut ReleasePATCH /api/admin/v1/releases/{id}/statusROLE_ADMIN, ROLE_RELEASE_DEVELOPER, ROLE_SRE_ADMINBascule entre LIVE_ON_STORE, IN_STORE_REVIEW (bloque les patchs sur stable) et DEPRECATED (éligible à la purge Day-2)
Télécharger .symbolsGET /api/admin/v1/releases/{id}/symbols ou /patches/{id}/symbolsROLE_ADMIN, ROLE_RELEASE_DEVELOPER, ROLE_SRE_ADMINTélécharge le fichier DWARF .symbols associé à l'architecture et trace l'action dans l'audit