Livrer
Ce parcours sert à livrer une nouvelle version, du projet entier ou d'un seul module, puis à la publier sur le canal public. Vous y venez quand une version est prête et que vous voulez que l'agent déroule la livraison à votre place.
Ce que vous demandez à l'agent
« Prépare la livraison du module site en patch et montre-moi le plan. »
« Quel serait le tag si on livrait le projet entier en mineur ? »
« Configure la livraison du module site : build avec pnpm build, artefacts dans dist/*.zip. »
effortless_release_delivery_setstack=sitebuild_command=pnpm buildartifacts=dist/*.zip
« Active le tag et la mise à jour de la documentation dans la configuration de release. »
« Déclare acme/site-dev comme dépôt interne et acme/site comme dépôt public pour le module site. »
effortless_release_channels_setstack=siteinternal=acme/site-devpublic=acme/site
« Livre le module site : incrémente la version, commit et push, tag, build et artefacts. »
effortless_release_applysteps=bump_version,git_flow,tag_release,deliverystack=site
(l'agent vous demande votre accord avant)
« Publie en public la version site-v1.4.1 déjà livrée en interne. »
(l'agent vous demande votre accord avant)
« Montre-moi l'historique des livraisons. »
effortless_deliveriesCe que fait l'agent
Planifier une livraison
effortless_release_plancalcule le plan sans rien écrire : version courante et version cible, tag, dépôt, branche, fichiers de version.bumpvautpatch(défaut),minoroumajor.stackvise un module ; sansstack, le plan porte sur le projet entier.- Le tag dépend de la cible :
vX.Y.Zpour le projet entier ou pour un module qui a son propre dépôt,<module>-vX.Y.Zpour un module qui vit dans le dépôt du projet.
Configurer la livraison
effortless_release_config_showlit la configuration de release effective.effortless_release_config_setrègle trois options :git_flow(étape de commit et de push),tag(création du tag) etupdate_docs(mise à jour de la documentation). Il en faut au moins une.effortless_release_delivery_setenregistre, pour un module (oudefault), la commande de build (build_command) et les artefacts à envoyer (artifacts, en globs séparés par des virgules). Sansartifacts, ceux déjà enregistrés sont conservés. Un module non déclaré est refusé.
Exécuter la livraison
Cette étape agit pour de vrai : écriture des fichiers de version, commit, push, tag, release GitHub, build. L'agent ne l'exécute qu'après votre accord explicite.
effortless_release_applyreçoitsteps(parmibump_version,git_flow,tag_release,update_docs,delivery),bumpet, pour un module,stack.- Les étapes se jouent toujours dans cet ordre. Une étape en échec arrête la chaîne : les suivantes sont rapportées « non jouée ». Une étape que le moteur ne peut pas faire (par exemple sans
gh) est rapportée « à faire à la main », avec ce qu'il reste à faire. - Incrémenter la version vérifie tous les fichiers de version avant d'en écrire un seul. Commit et push ne fusionne sur la branche principale que par avance rapide. Tag et release GitHub refuse de poser un tag sur des fichiers non commités : le tag désignerait le commit d'avant, sans la nouvelle version.
- L'agent relit le résultat étape par étape et vous le résume.
Déclarer les canaux interne et public
effortless_release_channels_setrègle les deux dépôts de release d'une cible (stack, oudefaultpour le projet entier) :internal(vide = le dépôt d'origine) etpublic(vide = pas de canal public). Un paramètre absent reste inchangé. Un dépôt s'écritowner/nom.
Publier en public
La publication publique promeut une version déjà livrée en interne, telle quelle : même tag, mêmes artefacts, aucun nouveau bump. Elle est irréversible. L'agent ne la lance qu'après votre accord explicite.
effortless_release_promotereçoittag(le tag déjà livré en interne),stackpour un module, etconfirm, qui doit redonner exactement le même tag.- Le moteur télécharge la release interne, la republie sur le dépôt public et inscrit la publication au journal.
Relire l'historique
effortless_deliveriesrend le journal des livraisons, la plus récente d'abord : date, canal, module, tag, version, dépôt, issue. Il rend aussi les canaux de chaque cible. Il ne demande pas de réseau.
Ce que vous obtenez
- Les fichiers de version à la nouvelle valeur, un commit, un tag annoté et, si le dépôt est sur GitHub et que
ghest disponible, une release avec ses artefacts. - Chaque livraison, réussie ou arrêtée, et chaque publication, s'inscrit dans
.effortless/deliveries.json, versionné avec le projet. - Dans l'app, l'écran Livraison montre le même plan, la même configuration, les canaux et l'Historique des livraisons.
Quand l'agent est refusé
| Situation | Ce que dit le refus | Ce qu'il faut faire |
|---|---|---|
| Le projet est en mode semi-auto | release_apply rend un message « outil d'exécution désactivé » (marqué gated) ; release_promote est refusé avec release:gated | Passer le projet en mode full, puis redemander la livraison. |
| Le module n'existe pas | release:unknownModule (plan, exécution, canaux) ; deploiement:stackUnknown pour la configuration de livraison | Passer l'identifiant d'un module déclaré, ou default / aucun stack pour le projet entier. |
| Aucune étape sélectionnée | deploiement:noStepSelected | Choisir au moins une étape valide dans steps (les identifiants inconnus sont ignorés). |
| Une étape échoue pendant l'exécution | deploiement:applyStopped, avec le détail de l'étape en échec | Corriger la cause nommée dans le détail, puis relancer. Les étapes déjà faites ne sont pas annulées. |
| Tag demandé alors que des fichiers ne sont pas commités | Étape tag_release en échec : « Tag … non posé » | Rejouer avec l'étape git_flow, ou commiter d'abord. |
release_config_set sans aucune option | deploiement:configNoField | Passer au moins git_flow, tag ou update_docs. |
| Livraison sans module précisé | deploiement:stackRequired | Passer stack ; effortless_stack_list nomme celles déclarées. |
| Dépôt mal écrit | release:repoInvalid | Écrire le dépôt owner/nom, ou une valeur vide pour retirer le canal. |
| Aucun dépôt public déclaré | release:noPublicChannel | Le déclarer avec effortless_release_channels_set. |
confirm différent du tag | release:confirmMismatch | Redonner exactement le tag, après votre accord explicite. |
| La version n'a pas été livrée en interne | release:notInternal | Livrer d'abord la version en interne (étape « Tag et release GitHub »). |
| La version est déjà publique | release:alreadyPublic | Rien à faire. Pour une nouvelle version, la livrer d'abord en interne. |
gh absent ou en échec pendant une publication | release:ghMissing ou release:ghFailed | Installer gh et vous y connecter, puis rejouer. |