Aller au contenu principal

Vue d'ensemble des commandes

La CLI tk-ota-push (alias tkushpatch) s'appuie sur TkOtaPushRunner (lib/src/cli/runner.dart) et addCommonOptions (lib/src/cli/publisher.dart). Elle expose 7 sous-commandes couvrant l'authentification, le cycle de vie des Releases et des Patchs, la promotion inter-canaux et le téléchargement des symboles.

Tableau synthétique des sous-commandes​

Sous-commandeSyntaxeRôleDocumentation dédiée
logintk-ota-push login [options]Connecte le poste développeur via le portail Web (protocole PKCE sur 127.0.0.1)Authentification
whoamitk-ota-push whoamiAffiche l'utilisateur connecté, le Tenant, le Subject UUID, les rôles et l'expirationAuthentification
logouttk-ota-push logoutSupprime le fichier de session locale ~/.tk_ota_push/credentials.jsonAuthentification
releasetk-ota-push release [version] [options] [-- <flutter-args>]Compile l'application et verrouille le binaire de référence (binaire d'application / diff_base) + .symbolsRelease
patchtk-ota-push patch [version] [options] [-- <flutter-args>]Compile, vérifie l'intégrité native et publie un patch OTA différentiel (différentiel binaire + compression optimisée)Patch
promotetk-ota-push promote --patch-id <uuid> [options]Promeut un patch APPROVED_AND_SIGNED vers un autre canal sans recompilationPromotion
symbolstk-ota-push symbols --patch-id <uuid> [options]Télécharge le fichier .symbols archivé d'un patch pour dé-obfusquer une stacktraceSymboles

Options globales​

OptionAbréviationTypeDéfautDescription exacte (runner.dart)
--help-hFlag (negatable: false)falseAffiche l'aide générale et la liste des options

Options communes à release et patch (addCommonOptions)​

Ces options sont enregistrées simultanément sur les sous-commandes release et patch :

Option / FlagAbrév.TypeValeurs autoriséesDéfautDescription exacte dans le code
--platform-pOptionandroid, ios, allallPlateforme ciblée.
--arch-aOptionaarch64, arm, allallArchitecture ciblée (aarch64 pour 64-bits, arm pour 32-bits, all pour les deux).
--channel-cOptionChaîne libre (stable, staging, beta…)null (résolu vers shorebird.yaml ou stable)Canal (stable, staging, beta - défaut: lu dans shorebird.yaml ou stable).
--[no-]obfuscate—Flag (negatable: true)true, falsetrueCompile avec --obfuscate --split-debug-info et archive les fichiers .symbols.
--split-debug-info—OptionChemin de dossiernull (build/ota_symbols/<version>)Dossier des fichiers .symbols (défaut : build/ota_symbols/<version>).
--json—Flag (negatable: false)falsefalseAffiche la réponse brute en JSON (utile pour les scripts CI/CD).
--server—OptionURL HTTP/HTTPSnull (shorebird.yaml / env / http://localhost:8080)URL du serveur OTA (défaut : lu dans shorebird.yaml ou $OTA_SERVER_URL ou localhost:8080).
--tenant-id—OptionIdentifiantnull (shorebird.yaml / session / env / default)Identifiant du Tenant (défaut : lu dans shorebird.yaml ou session active).
--app-id—OptionIdentifiantnull (cascade de résolution)app_id (défaut : celui de shorebird.yaml).
--project—OptionChemin de dossier.Dossier du projet Flutter.
--env-eOptionChaîne (dev, staging, prod, uat)nullEnvironnement applicatif (ex: dev, staging, prod, uat).
--flavor—OptionChaîne (dev, staging, prod)nullBuild flavor Flutter / Gradle / Xcode (ex: dev, staging, prod).
--target-tOptionChemin de fichier .dartnullPoint d'entrée Dart spécifique (ex: lib/main_dev.dart).
--dart-define—MultiOptionCLE=VALEUR (répétable)[]Variables d'environnement Dart au format CLE=VALEUR (répétable).
--dart-define-from-file—MultiOptionChemin .json / .env (répétable)[]Fichier de variables Dart .json ou .env (répétable).
--artifact—Optionapk, aab, ipa, iosapkType d'artefact à générer (apk ou aab pour Android, ipa ou ios pour iOS).
--export-method—Optionad-hoc, app-store, enterprise, developmentnullMéthode d'exportation IPA pour iOS (ad-hoc, app-store, etc.).
--export-options-plist—OptionChemin de fichier .plistnullChemin vers un fichier ExportOptions.plist personnalisé pour iOS.
--build-name—OptionVersion x.y.znullNom de version Flutter alternatif (override x.y.z du pubspec.yaml).
--build-number—OptionEntier / chaînenullNuméro de build Flutter alternatif (override +build du pubspec.yaml).
Arguments positionnels et Pass-Through (--)

Sur release et patch, le premier argument positionnel ne commençant pas par - est interprété comme la version explicite (ex: 1.0.0+3) et synchronisé dans pubspec.yaml. Tous les autres arguments restants (notamment après --) sont transmis tels quels à flutter build via passThroughArgs.

Options spécifiques à patch​

En plus des options communes ci-dessus, la commande patch accepte :

Option / FlagAbrév.TypeDéfautDescription exacte (runner.dart)
--countries—Optionnull (fallback shorebird.yaml ou mondial)Codes pays ISO-2 autorisés séparés par des virgules (ex: "CI,SN,CM") ou "all" pour mondial (défaut : mondial).
--rollout—Option'100'Pourcentage de déploiement (0-100).
--staged—Flag (negatable: false)falseNe pas auto-approuver : le patch reste STAGED (4 yeux).
--force-fFlag (negatable: false)falseForce la publication du patch même si pubspec.lock a légèrement différé (ex: dépendances Dart pures modifiées) ou en cas de divergence native.
--message-mOptionnullChangelog / description métier du patch pour le RSSI.

Options spécifiques à login, promote et symbols​

Sous-commande login​

OptionAbrév.TypeObligatoireDéfautDescription exacte (runner.dart)
--web-url—OptionNonnull (shorebird.yaml / $OTA_WEB_CONSOLE_URL / http://localhost:3000)URL du portail Web (défaut lue dans shorebird.yaml ou http://localhost:3000)
--project—OptionNon.Chemin du projet Flutter.

Sous-commande promote​

Option / FlagAbrév.TypeObligatoireDéfautDescription exacte (runner.dart)
--patch-id—OptionOui (mandatory: true)—Identifiant UUID du patch source à promouvoir.
--to-channel—OptionNon'stable'Canal de destination (ex: stable).
--tenant-id—OptionNonnullIdentifiant du Tenant (défaut : lu dans shorebird.yaml ou session active).
--json—Flag (negatable: false)NonfalseAffiche la réponse brute en JSON.
--server—OptionNonnullURL du serveur OTA (défaut : lu dans shorebird.yaml ou localhost:8080).
--project—OptionNon.Chemin du projet Flutter (pour lire shorebird.yaml).

Sous-commande symbols​

OptionAbrév.TypeObligatoireDéfautDescription exacte (runner.dart)
--patch-id—OptionOui (mandatory: true)—Identifiant UUID du patch dont on veut télécharger les .symbols.
--output-oOptionNonnull (patch_<patchId>.symbols)Chemin du fichier .symbols de sortie.
--tenant-id—OptionNonnullIdentifiant du Tenant (défaut : lu dans shorebird.yaml ou session active).
--server—OptionNonnullURL du serveur OTA (défaut : lu dans shorebird.yaml ou localhost:8080).
--project—OptionNon.Chemin du projet Flutter (pour lire shorebird.yaml).

Variables d'environnement reconnues​

VariableRôlePriorité
OTA_API_KEYJeton Bearer d'authentification API / CIOutrepasse la session locale ~/.tk_ota_push/credentials.json
OTA_SERVER_URLURL du serveur OTA Serveur TkushPatchUtilisée si ni --server ni base_url (shorebird.yaml) ne sont fournis
SHOREBIRD_BASE_URLAlias de repli pour l'URL du serveur OTAUtilisée après OTA_SERVER_URL
OTA_TENANT_IDIdentifiant du TenantUtilisée après --tenant-id, shorebird.yaml et session.tenantId
OTA_APP_ID / APP_IDIdentifiant de l'applicationUtilisée avant la détection native Gradle/Xcode si non défini dans shorebird.yaml
OTA_WEB_CONSOLE_URLURL de la console Web Next.jsUtilisée par tk-ota-push login si --web-url et web_console_url sont absents

Codes de sortie (Exit Codes)​

La CLI respecte les conventions POSIX sysexits.h dans TkOtaPushRunner.run :

CodeConstante POSIXCondition de déclenchement exacte
0EX_OKExécution réussie, ou appel avec --help, ou appel sans argument (arguments.isEmpty).
1EXIT_FAILUREErreur d'exécution : CliException (conflit HTTP 409, serveur injoignable, divergence native, échec flutter build), OtaApiException sur promote/symbols, ou échec de login.
64EX_USAGEErreur de syntaxe CLI (FormatException de ArgParser), sous-commande inconnue, app_id introuvable, ou --rollout hors de l'intervalle 0..100.
66EX_NOINPUTLe répertoire cible (--project) ne contient aucun fichier pubspec.yaml.
69EX_UNAVAILABLEToolchain Shorebird introuvable dans ~/.shorebird/bin/cache/flutter.