Cartouche | |
---|---|
ZEP | 8 |
Titre | Utilisation au maximum de git pour gérer les tutos et articles |
Révision | 5 |
Date de création | 17/07/2014 |
Dernière révision | 04/01/2015 |
Type | ~Feature |
Statut | Rédaction |
Cette ZEP-8 a pour but de donner les spécifications pour améliorer fortement le système d'édition de tuto zds.
Cette ZEP a pour base et complète le modèle développé durant la zep-12.
Plutôt que de présenter une petite feature pour ce système, elle propose une révision complète de notre manière d'aborder le système de tuto/article en mettant git au centre plutôt que de le voir comme un simple outil pour faire le versioning.
Git est un système de contrôle de version distribué, c'est à dire que chaque personne possède une copie en local du dépôt, peut y faire ses branches etc. puis, une copie sur un ou plusieurs dépôts distant existe et permet à chacun de se synchroniser au besoin.
Git a gagné ses lettres de noblesse grâce à github qui se veut être un "réseau social du code". Cette ZEP s'inspire de certaines fonctionnalités de github pour les proposer à ZDS et à son module de rédaction.
Git comme outil de collaboration
Git permet de versionner le contenu. Il permet donc, grâce à un système de calcul de différentiel et de branche, de facilité la collaboration en prenant en compte à chaque étape de la rédaction du contenu l'aspect collaboratif de ladite rédaction.
Cette première Etape, appelée ZEP 8.1 donnera lieu à une PR en soit. En effet, développer la ZEP complète puis merger, a montré durant la zep-12 que c'était casse gueule et source de nombreux bugs (templates incohérents, bugfix mal mergés, demandes mal maîtrisées et surtout le code produit met 1 an à arriver en prod alors que des bugfix et features intéressantes sont codées depuis longtemps).
Cette PR ZEP 8.1 packagera :
- une nouvelle version du manifest.json qui versionne ce que la zep-12 n'a pas versionné alors que c'est souhaitable qu'on le versionne comme le logo.
- le bugfix de #3251, #3134 (il faut améliorer les différents chargements), 2532 (tant qu'à faire, dans la zep qui parle de git)
- Faire valider le manifest.json par un schéma json
- En ce qui concerne #3251, bien que le débat soit encore possible, il est selon moi nécessaire d'avoir une interface en trois blocs :
PS: notons que le theirs/mine est déjà codé dans un templatetag
Gestion des conflits
La gestion des conflits consiste à résoudre les zones de texte qui ont été modifiés simultanément par deux commit/PR.
Actuellement, ce cas se présente lorsqu'un tutoriel est coécrit et que les auteurs modifient le même extrait/intro/conclusion en même temps. La stratégie actuelle est le mine full
. La PR 1237 propose de faire du theirs full
.
Il serait intéressant donc d'intégrer la commande git mergetool qui vous permet de faire quelque chose de vraiment sympa. Je ne connais pas les détails techniques en python, mais je pense qu'il est tout à fait possible de rediriger une entrée/sortie du shell vers le web. Je ne connais pas la difficulté du truc par contre.
Autre possibilité : chercher un mergetool déjà possible en interface web.
Si aucun mergetool n'est intégrable dans un délai raisonnable, il faudra coder un mergetool par nous même en quelque sorte.
On pourrait s'appuyer sur le POC déjà présent pour faire des diff. Les fonctionnalités ne seront peut être pas complètes mais ça peut marcher.
Liste des objets versionnés
- structure du tutoriel
- titre + intro + conclusion de chaque conteneur
- l'ordre des composants
- le logo du tutoriel
- (en fonction d'autres ZEP) : les tags/catégories
- contenu du tutoriel
- le texte des extraits
- l'adresse de l'icône du tutoriel
- les méta données
- la source du tutoriel
Donner la possibilité de faire une PR
Actuellement, malgré l'utilisation de git, nous n'utilisons ce dernier que pour tracer les versions du tutoriel .
Le premier jalon qui permettrait une vraie utilisation de git serait de permettre de faire une pull request.
Une pull request, c'est le fait que quelqu'un -étranger ou non à l'édition du tuto puisse proposer une modification à ce dernier, puis l'auteur verrait cette proposition et irait la fusionner dans son tuto.
Une possibilité basique d'utilisation serait celle-ci :
- sur ZDS l'auteur publie son tuto
- sur ZDS un visiteur authentifié voit une phrase mal tournée
- sur ZDS le visiteur authentifié a la possibilité "d'éditer le tuto" pour y apporter sa correction
- sur ZDS le visiteur authentifié appuie sur "proposer la correction"
- sur ZDS l'auteur voit une proposition de correction, s'il l'accepte, la correction est fusionnée à son travail courant, s'il ne l'accepte pas, la branche de correction est fermée.
Ici, on ne quitte pas ZDS, c'est donc une fonctionnalité corporate qui s'inscrit dans le désire de voir la communauté participer à la vie du site.
Etapes fonctionnelles :
- première étape : faire une PR sur un extrait, une intro ou une conclusion. Pour faciliter les choses, il faudra être connecté pour cela. Un bouton apparaîtra lors d'une action spéciale (survol, click sur une roue dentée? les dev front/UX vous pouvez apporter votre expertise) et qui permettra la proposition. Une fois la proposition faite, un MP est envoyé aux auteurs, et lrosqu'ils visiteront leur version brouillon, dans la barre des actions des extraits, en plus éditer, déplacer, supprimer, ils auront droit à une page "voir l(a|es) PR" qu'ils pourront accepter ou refuser une par une. Première étape : on n'a donc que "accepter" et "refuser". La PR doit donc pouvoir être mergée automatiquement. Si elle ne peut pas l'être, le membre qui l'a faite se verra proposer une alerte du style :
Il semblerait que l'auteur ait déjà corrigé des erreurs dans cette section. De ce fait, votre correction ne peut être proposée automatiquement. Afin de faire profiter l'auteur de votre travail, désirez-vous lui envoyer vos propositions par message privé? OUI/NON
En deuxième étape, une résolution manuelle pourra être proposée mais surtout le front évoluera et on pourra au click droit sur un paragraphe avoir l'option "proposer une correction". et lorsque le champ de proposition de correction apparaîtra, il se positionnera directement sur le bon endroit !
Gestion des branches
Qui dit PR dit branches.
Actuellement - et les bug de modification de la prod le prouvent- nous n'avons qu'une branche ce qui crée pas mal de problèmes.
- Tag "publication+date" pour les tutoriels en prod.
- branche "boruillon"(draft) pour la rédaction habituelle
- Proposition numéro 1 : chaque auteur possède une branche et à chaque fois qu'il est satisfait de sa rédaction, il propose un merge où il pourra - si besoin est- résoudre les conflits avec un merge de ses coauteurs (voir la partie gestion de conflit)
- Proposition numéro 2 : Chaque correction par un utilisateur lambda enregistré entraîne la création d'une nouvelle branche avec PR dans dev
Lier des dépôts distants
Principe général
Git est un système distribué, il devrait donc être "simple" de lier un dépôt distant comme nous pouvons le faire avec la commande git remote add
. A partir de là, le cas d'utilisation revient au cas d'utilisation présenté dans "Créer une PR" sauf que l'utilisateur authentifié et l'auteur ne font qu'un
Cette fonctionnalité permet d'éditer le contenu hors ligne sans pour autant rendre public le dépôt git de zds en écriture avec tous les problèmes de sécurité que cela poserait.
Une solution technique possible serait celle-ci :
Limites acceptables
le dépôt devant être hébergé sur zds, il ne doit pas contenir du contenu autre que :
- des images compatibles pour le web (png, jpg (si possible avec l'encodage mozilla pour limiter la taille)
- du texte au format markdown
- un et un seul
manifest.json
Une limite de taille doit aussi être imposée afin que l'hébergement ne souffre pas trop.
Gestion de la sécurité
La gestion des droits pourrait se faire à la github avec des clefs ssh. D'après le commentaires, il faudrait utiliser des outils comme gerrit ou gitolite.