====== Gitea, la forge logicielle web avec une tasse de thé (et un carré de chocolat) ======
* Objet : Utilisation de Gitea pour les membres DF
* Niveau requis : {{tag>débutant avisé}}
* Commentaires : Pour une utilisation basique de Gitea hébergé sur DF. Connaître des rudiments de //Git// est nécessaire.
* Débutant, à savoir : [[:doc:systeme:git:git|Une introduction à Git, un système de gestion de version décentralisé ]]
* Suivi : {{tag>à-compléter à-tester}}
* Création par [[user>bendia]] 04/08/2019
* Testé par <…> le <…> FIXME
* Commentaires sur le forum : [[https://debian-facile.org/viewtopic.php?id=26471 | Lien vers le forum concernant ce tuto]] ((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
Nota :
Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !
===== Introduction =====
Gitea est une [[https://fr.wikipedia.org/wiki/Forge_(informatique)|forge logicielle web]], c'est à dire un outil en ligne permettant à plusieurs personnes (développeurs ou non) de collaborer à la création de logiciels. Elle permet entre autre de :
* Gérer les version du code source grâce à [[:doc:systeme:git:git|git]], soit via la ligne de commande, mais aussi graphiquement avec l'interface web.
* Gérer les droits sur les différents dépôts grâce à la création d'organisations pouvant contenir des équipes.
* Créer et gérer des tickets pour signaler et traiter des bugs, proposer des amélirations et répartir les tâches à accomplire.
* Créer et gérer un wiki, pour documenter le code ou l'utilisation du logiciel par exemple
Ce tuto n'a pas pour objectif d'expliquer l'utilisation de git, il existe pour cela de nombreux tuto, dont un livre sous licence CC((https://git-scm.com/book/fr/v2)). Il ne traitera également pas de toutes les possibilités offertes par Gitea. FIXME SI certains veulent s'y lancer, pourquoi pas des tutos spécifiques pour des fonctions précises (genre les //hook// ?)
===== Le tableau de bord =====
Le //Tableau de bord// est la page principale qui s'affiche après la connexion.
{{ /file-R6852f9de8f38b3296273b32c784b64e0.png?800 }}
A partir de ce tableau de bord, on va pourvoir :
* {{/file-R367393c03e0d50d68a0c47455340d9fd.png}}accéder aux réglages et profils du compte
* {{/file-Re8dcc1640a4d52611b7bf76ac3f3b01f.png}}créer de nouveau dépôts, de nouvelles organisation
* {{/file-Ra1b4534af92678beccf6b6151b4e4ca8.png}}Voir les notifications
* {{/file-R1f3dbc2cb636bda99083ba1b28fd3f44.png?60}}visualiser les dépôts et organisations sur lesquels nous travaillons (notez qu'on peut également en ajouter avec le signe **+**)
* {{/file-R97ab11b90b496544aedc930e3b5c5dd6.png}}Changer le contexte du tableau de bord, pour passer naviguer entre votre compte propre et les différentes //organisations// auxquelles vous appartenez
* On voit également au milieu un graphique montrant votre activité, et l'activité des projets que vous suivez
* {{/file-Rc1ea1acd4177c695451291ed61488013.png}}Dans la barre de navigation, on peut également se diriger vers les tickets de vos dépôts, les demandes d'ajouts, et l'explorateur permettant de visualiser les dépôts publics du serveur.
===== Profils et réglages =====
{{/file-Rb9743c5fe6d5bd65d6945801d0b18fd8.png}}Pour modifier son profil (nom, bio, site web, mot de passe ...), gérer son mot de passe, gérer ses dépôts et organisations et ajouter une clé SSH, c'est par là
==== Ajouter une clé SSH ====
Habituellement, pour pousser des modifications dans un dépôt depuis sa machine personnelle, on utilise //SSH//. Il va donc falloir ajouter une [[doc:reseau:ssh:client#par-cles-asymetriques|clé SSH]] grâce à l'onglet **Clés SSH/GPG**
On donne ensuite le nom à la clé, et on copie son contenu dans le cadre qui va bien avant de sauvegarder
{{ /file-R46f963f9ea3a047a9776bf1c95ec8a59.png?600 }}
Avec ça, vous voilà prêt à interagir avec //Gitea// en ligne de commande directement depuis votre machine :-)
===== Les dépôts =====
==== Créer un dépôt ====
Le dépôt, c'est la collection de fichier qui constitue le code source du logiciel (merci VV222 ;-) ). Ce dépôt a un propriétaire (vous ou une organisation). Pour créer un dépôt, nous pouvons cliquer sur //Nouveau//, puis //Nouveau dépôt//, ou sur le bouton + du cadre //Dépôts/Organisation//, et cette page apparaît alors.
{{ /file-Ra4b432819dafbf868ba1bc5ab589f309.png?800 }}
Outre le nom (qui ne doit contenir que ne doit contenir que des caractères alphanumériques, des tirets ''-'', des tirets bas ''_'', et des points. ''.''), on remarquera les deux cases à cocher :
* //Rendre le dépôt privé// ne permettra qu'à vous (ou au personnes que vous ajouterez comme //collaborateurs// de voir ce dépôt.
* //Initialiser le dépôt (ajoute les fichiers .gitignore, Licence et LISEZMOI)// va créer ces 3 fichiers en même temps que votre dépôt. Vous pouvez choisir le type de licence qui s'appliquera à votre logiciel (GPLV3, MIT ...) et une copie de celle-ci sera ajoutée dans le fichier //Licence//. Le fichier //LIZEZMOI// se remplira du contenu du cadre //Description//. Ce fichier peut être formaté en //[[https://fr.wikipedia.org/wiki/Markdown|Markdown]]// et son contenu s'affichera converti en HTML sous la liste des fichiers du dépôt.
On peut également créer un dépôt nu. Une fois créer on y trouve alors toutes les commandes permettant de créer son dépôt en local, puis, de le pousser, ou alors de pousser un dépôt local déjà existant.
==== Travailler avec un dépôt ====
On a désormais un dépôt avec ses premiers fichiers.
{{ /file-R803e555615ac05130efda564c43668cd.png }}
* {{/file-R4494b133e2dff4b39601c7a571418b48.png}} copier directement l'adresse (ssh ou http) permettant de cloner le dépôt
* {{/file-R49a9c43de3f81465e767e897a070a39d.png}} télécharger ces fichiers dans une archive.
=== Sujets ===
{{/file-R49a9c43de3f81465e767e897a070a39d.png}} Les sujets, sont des //tags// qu'on peut appliquer au dépôts, et qui permettrons de lister tous les dépôts ayant un même sujet dans l'explorateur. Par exemple, si on donne le langage dans lequel est codé l'application, on pourra lister tous les dépôts publics codés dans ce même langage.
=== Paramètres ===
{{/file-Ra297b12afff6e4cb6c7e08ae57f7cdc5.png}} permet notamment d'activer ou désactiver le gestionnaire de ticket, le wiki, de modifier la visibilité du dépôt (publique/privé), d'ajouter des collaborateurs, de changer le propriétaire, de l'archiver ou le supprimer.
=== Modifications de fichiers via l'interface web ===
* {{/file-R3548994fa0de58904abf8742aa1d48c3.png}} créer un nouveau fichier vide, ou de téléverser des fichiers
* Cliquez sur le nom d'un fichier l'affiche, il est alors modifiable directement en ligne avec le bouton {{/file-R914b6ff55e059e9e23759dc0b6bbcadb.png}}.
Ces actions donnerons lieu à des nouveaux //commits//.
===== Les organisations =====
Il s'agit d'un regroupement d'utilisateurs qui s'organise en équipe. Cela permet de gérer plus finement les droits sur chaque dépôt appartenant à //l'organisation// qu'un simple dépôt personnel collaboratif.
{{/file-Re8dcc1640a4d52611b7bf76ac3f3b01f.png}} ou le bouton + du cadre //Organisation// pour créer une nouvelle //Organisation//.
On se retrouve alors sur le tableau de bord de l'organisation. On peut alors créer des dépôts qui appartiendrons à l'organisation de la même manière que pour un utilisateur.
{{/file-R6c218fffc8698d3e26c6ee3d80bbfd9e.png}} pour accéder à la page de l'organisation.
==== Les équipes ====
{{ /file-Rf3ac3d2524984ce6e9065aced85dfda3.png?600 }}
L'équipe //Owners// est automatiquement créée avec le créateur de l'organisation comme membre. Les membres de cette équipes ont tous les droits sur tous les dépôts appartenant à l'organisation. Ce sont les administrateurs de l'organisation.
On peut ajouter de nouveaux membres à une équipe en cliquant sur son nom
{{/file-R42ffd550012f9cf06177cf27200a29bc.png}} pour créer une nouvelle équipe.
{{ /file-Re9eac9114bb9900511645cf11133b2b1.png?600 }}
On peut alors ajouter des membres à l'équipe, et des dépôts sur lesquelles cette équipe aura des droits.
Ne pas oublier cette dernière étape, sinon, l'équipe ne peut rien faire :-P
==== Les droits ====
{{ /file-Rf0b8be29053a49647ffecd3193728daa.png?600 }}
Lors de la création d'une équipe, il faudra gérer les droits.
* //Accès en lecture// est utile pour donner un accès en lecture seule aux dépôts privés
* //Accès en écriture// se règle finement pour donner ces droits sur les différentes fonctions de //Gitea//, gestionnaire de ticket, wiki ... De cette façon, on peut par exemple créer une équipe capable de trier les tickets et maintenir le wiki, mais pas de pousser du code sur la branche.
* //Accès Administrateur// sans commentaires, c'est bien expliqué.
===== Les tickets =====
Le système de tickets s'apparente à un forum spécifique à chaque dépôt ayant pour but notamment de signaler des bugs, proposer des améliorations. Il se traduira donc souvent en tâches à effectuer. Plusieurs mécanismes permettent d'organiser ces tâches, comme les //étiquettes//, les //jalons//, la gestion des tickets qui en dépendent ou l'attribution des tickets.
=== Les étiquettes ===
Ces étiquettes vont permettre de classer les tickets par thème. Sur un nouveau dépôt, il faut créer les étiquettes. On peut générer un jeu d'étiquettes par défaut avec ''Utiliser le jeu de label''.
Pour les administrateurs du serveur, on peu ajouter des jeux d'étiquettes dans ''custom/options/label'' qui respecte le format ''#hex-color label name ; label description'' :-)
{{ /file-R07f4b921f1e6c375b7a12222063c2966.png?600 }}
Pour ceux qui en on les droits, on peut ensuite directement ajouter une étiquette lors de la création du ticket, ou une fois le ticket créé (même, par une autre utilisateur).
Lorsqu'une tâche est terminée, il est possible de la fermer.
On peut effectuer des recherches à partir de ces différents mécanismes pour trier les tickets, et ainsi déterminer l'ordre dans lequel effectuer ces tâches dans la liste des tickets en utilisant le menu déroulant de chaque colone.
=== Les jalons ===
Les jalons vont permettre de trier les tickets par objectifs. Par exemple, dse ticket d'amélioration qu'on souhaite voir faire partie de la version //Tartempion// de notre logiciel pourront recevoir le jalon ''Tartempion''. On peut donner des //Échéances// (date butoirs) aux //Jalons//.
=== Affection ===
Afin de savoir qui travaille sur un ticket, il est possible de les affecter à un ou plusieurs membres.
=== Dépendance ===
La réalisation d'une tâche peut dépendre de la réalisation d'une autre. On peut définir que le ticket actuel dépend d'un (ou plusieurs autres)
Lorsqu'une tâche est terminée, il est possible de la fermer.
On peut effectuer des recherches à partir de ces différents mécanismes pour trier les tickets, et ainsi déterminer l'ordre dans lequel effectuer ces tâches.
=== Mention fermeture depuis un message de commit ===
On peut mentionner et même fermer un ticket depuis un message de commit, il suffit de mettre son numéro précédé de ''#'' pour le mentionner, et ''close #numéro'' pour le fermer.
Pour ceux qui en ont les droits, toutes les affectations, étiquetage, jalonage peuvent s'effectuer soit sur le ticket lui-même, soit depuis la liste des tickets en utilisant la case à cocher
===== Le wiki =====
On peut créer des pages au format Markdown. Il existe cependant un éditeur qui va générer les balises. Ce wiki est en lui même un dépôt git, et on peut donc parfaitement l'écrire en local sur sa machine.
Si une page est nommée ''Ma page'', l'URL générée est le nom de la page avec les espaces remplacés par des tiret ''-'' dans ''wiki''. C'est assez pratique pour générer des liens entre page du wiki, puisqu’un simple lien relatif suffit. Ainsi, si je veux créer un lien de la page //Home// vers la page //Ma Page//, il suffit de mettre ça dans //Home// [[Lien vers ma page|Ma-page]]
===== Les versions =====
Une //version// est une publication du code source du logiciel sous forme d'archive (zip et tar.gz). Pour publier une version, il suffit de se rendre dans l'onglet //Version// et de cliquer sur //Nouvelle version//.
===== Les demandes d'ajout =====
Cette partie va traiter d'une fonctionnalité plus fortement imbriquées avec git et les branches notamment. Il faut donc être un minimum à l'aise avec ces notions
L'intérêt des logiciels libres, c'est que tout un chacun peut obtenir et modifier le code source. Il est donc tout à fait possible de cloner un dépôt modifier le logiciel, et proposer ses modifications à son mainteneur.
=== Bifurquer ===
Pour cela, il va falloir créer un nouveau dépôt dont vous serez propriétaire avec {{/file-R592aa7490252d235c3a0c63007f3b3c8.png}}
Vous pouvez ensuite cloner puis travailler sur ce dépôt et y pousser vos modifications.
=== Demander l'ajout ===
Lorsque vous pensez votre modification prête à être ajoutée au code principal, vous pouvez donc faire une //Demande d'ajout// (ou demande de fusion) afin que le mainteneur puisse fusionner votre travail dans le dépôt principal. Cela créé automatiquement un //ticket// dans l'onglet //Demande d'ajout//.
De son coté, le mainteneur va recevoir une notification, et va donc pouvoir décider si ces modifications peuvent être ajouter en autorisant la fusion. Le ticket est alors automatiquement fermé.