Les forges logicielles

Un indispensable pour le développement de logiciels pérennes

ANF reproductibilité computationnelle, 1-3 juillet 2025

Pierre-Antoine Bouttier, CNRS/GRICAD

Sommaire

  1. Généralités sur les forges logicielles
  2. Les groupes et projets
  3. La gestion de version en ligne
  4. Gestion d'un projet
  5. Fork et merge requests

Sommaire

  1. Généralités sur les forges logicielles
  2. Les groupes et projets
  3. La gestion de version en ligne
  4. Gestion d'un projet
  5. Fork et merge requests

Une situation classique

center

Plateformes de développements collaboratifs ou Forges logicielles

  • Forge : ensemble de logiciels, le plus souvent réunis sur un site web, dont le but est de faciliter la travail collaboratif et la gestion de projets de développement au sens large
  • Quelques exemples célèbre : gitlab, github, bitbucket, sourcesup, etc.
  • Dans le monde académique, des dizaines de forges
  • Aujourd'hui, nous utiliserons https://plmlab.math.cnrs.fr

À quoi ça sert ?

  • Développement de logiciels, scripts
  • Écriture collaborative (ou pas) de rapport, articles, manuscrit de thèse
  • Enseignement (cours, matériel pour TP, etc.)
  • Génération et déploiement de site web, documentation, notebook, HOWTO
  • Quelques mots-clés récurrents : travail collaboratif, mise à disposition, partage, ...

Forge : système de gestion de développement collaboratif

Principe :

  • Rassembler des utilisateurs d’horizons différents (chercheurs, ingénieurs, développeurs, coordonnateurs, ...) autour de projets
  • Mise à disposition d’un ensemble d’outils adaptés pour gérer les projets

En pratique :

  • un site web
  • des utilisateurs (login) et des projets
  • des outils configurables via l’interface web
  • différents niveaux de droits sur les outils et les projets

Les fonctionnalités classiques

  • Gestion de versions et partage de code (au sens large)
  • Gestion électronique de document : édition en ligne, suivi d'historique
  • Suivi de problèmes, de tests et intégration continue
  • partage de l'information, liste de diffusion, espace d'échanges
  • Sauvegarde
  • Hébergement/génération de pages web

Pourquoi utiliser une forge ?

Collaboration ”interne” au projet, facilite le travail collectif.

  • Espace de travail (git) et d’échanges (listes de diffusion ...)
  • Statistiques, activité, état d’avancement du projet.
  • Collaboration inter-organismes
  • Pérennisation du projet (sauvegardes, doc ...)

Visibilité , diffusion du projet.

  • Interface de contacts et d’échanges utilisateurs/membres du projet (support en ligne, documentation, suivi de bugs ...).
  • Vue sur l’activité, la maturité du projet.
  • Téléchargement de code, de documents.

Pourquoi utiliser une forge ?

La plupart des outils pré-cités sont disponibles indépendamment des forges mais les principaux avantages de celles-ci sont :

  • un accès à tous les outils via un seul portail web ;
  • des outils bien intégrés, configurables pour chaque projet, avec une utilisation relativement intuitive ;
  • ne nécessite aucune installation préalable ;
  • un accès multi-site, multi-users ;
  • une prise en compte des différents profils d’utilisateurs (niveaux de droits différents).

Pourquoi utiliser une forge ?

Utiliser ce genre d’outils permet de faciliter la vie de tout le monde, contributeurs ET utilisateurs (présents et futurs).

Créer un projet sur une forge devrait être la première étape de tout projet de développement.

Accès à une forge

GitHub, GitLab.com, Bitbucket, etc. :

  • Très fonctionnelles
  • Intègrent de nombreux outils
  • Grosses communautés
  • Visibilité...
  • ...Mais ce ne sont pas des sites académiques : pb de droits, de confidentialité, tutelles pas contentes, pérennité...

Accès à une forge

Pour l’enseignement et la recherche, la tendance est aujourd’hui à la mise en place de plateformes mutualisées dans les organismes de recherche et/ou les communautés.

Quelques exemples :

Accès à une forge :

En pratique

  • Le choix d’une plateforme dépendra de votre projet, des gens impliqués et des habitudes de votre communauté.
  • Utiliser plusieurs plateformes n’est en général pas un problème : leur utilisation est très semblable et le transfert de projets de l’une à l’autre est relativement simple (au moins pour celles basées sur git).
  • Un bon choix (pour les Grenoblois) : gricad-gitlab. Locale (proximité du support), hébergement sur les serveurs universitaires, gratuite...

Le menu Settings

  • Accéder à https://plmlab.math.cnrs.fr
  • Le menu Profile : renseignez les différents champs
  • SSH keys : si vous êtes à l'aise avec les clés SSH
  • Notifications : possibilité de paramétrer le niveau de notifications

Où trouver de l'aide ?

Mise en situation

  • Connectez-vous avec vos identifiants
  • Visitez le menu Settings, complétez ce qui vous paraît utile
  • Explorez les différents menus/boutons, familiarisez-vous avec l'interface, la doc en ligne, etc.

TOC

  1. Généralités sur les forges logicielles
  2. Les groupes et projets
  3. La gestion de version en ligne
  4. Gestion d'un projet
  5. Fork et merge requests

Projets et Groupes

  • Projet

    • Un espace qui vous permettra d'héberger, de sauvegarder et de partager un ensemble de fichiers
    • Un ensemble de participants avec des droits réglables individuellement
    • Une interface de gestion/configuration pour des outils spécifiques au projet
  • Groupe

    • Ensemble de projets et/ou de sous-groupes, associés à un ensemble d'utilisateurs

Création de groupes et de projets

À renseigner :

  • un emplacement (namespace≈dossier) et un nom
  • Une description
  • Un niveau de visibilité
    • privé : visible uniquement par les membres du projet (ajout par l'admin)
    • interne : visible par tout utilisateur connecté (possibilité de demander à rejoindre le projet)
    • public : visible par n'importe qui

Les projets héritent de la visibilité du groupe.

Groupes et projets, compléments

  • Un projet appartient à un namespace qui peut être :
    • Votre login
    • Un groupe ou un sous-groupe
  • Groupe GitLab = organization github
  • Il est possible de demander à rejoindre un projet ou un groupe existant (via le lien request access)

Mise en situation

  • Connectez-vous à la PLMLab
  • Nous regarderons les permissions de chaque membre du groupe ANF Reproductibilité 2025/Sandbox en détail
  • Formez des équipes de 4 ou 5 membres
  • Pour chaque équipe, sur PLMLab, créez un sous-groupe Gitlab sous le chemin suivant: ANF Reproductibilité 2025/Sandbox
  • Au sein de ce sous-groupe, chaque membre créée un projet, initialisé avec un README.md.

Groupes et projets, bonnes pratiques

  • Ne pas négliger l’étape d’organisation et de nommage des groupes et projets : on peut très facilement renommer, déplacer un groupe ou un projet mais nécessairement avec un impact sur l’affichage/la visibilité du projet (pages web, références etc).
  • Prenez le temps de configurer correctement la liste des membres, leurs droits, les rôles, dates d’expiration de participation etc.
  • Membres d’un groupe : n’ajoutez que les personnes susceptibles de participer à tous les projets du groupe. Dans le cas contraire privilégiez un accès par projet.
  • Petit tour dans les paramètres des projets

Aparté sur le langage markdown

Le Markdown est un langage très simple à apprendre, à lire et à écrire qui permet de formater du texte (e.g. pour une page web). Sur Gitlab vous pouvez utiliser une version étendue du Markdown (gitlab flavored markdown) pour rédiger vos commentaires, issues, fichier d’aide etc.

Documentation

Le langage Markdown

L'apprentissage de l'écriture en markdown est très rapide. Prenez ce temps, vous verrez que c'est à la fois très pratique et très utilisé.

Les avantages du markdown :

  • Basé sur des fichiers textes bruts, donc très interopérables (contrairement aux .doc, .docx, par exemple), et facile à mettre dans un dépôt git/gitlab.
  • Des règles très simples
  • Facile à convertir : html, pdf, jpg, png, etc...

Le langage markdown

  • Vous avez pu déjà voir des fichiers dont le nom se finissait par .md : c'est l'extension par défaut pour le markdown.
  • Un fichier markdown est un fichier texte brut avec quelques règles syntaxiques.
  • Si vous écrivant un document markdown dans votre dépôt gitlab, Gitlab l'affichera formatté.
  • Il est très conseillé, pour chaque projet git/gitlab, d'écrire un fichier README.md qui décrira le projet et ce qu'il y a savoir à son propos.

Le langage markdown

# Titre de niveau 1

*Pour écrire en italique*, **pour écrire en gras**, ~~du texte barré~~.

## titre de niveau 2

voici une liste : 
- Élément 2
- Élément 1

### Titre de niveau 3

Une liste ordonnée : 
1. Élément 1
2. Élément 2

Sommaire

  1. Généralités sur les forges logicielles
  2. Les groupes et projets
  3. La gestion de version en ligne
  4. Gestion d'un projet GitLab
  5. Merge requests et Forks

Your closest collaborator is you six months ago, but you don’t reply to emails.

Business as usual

Un gestionnaire de quoi ?

  • Un gestionnaire de version de code vous permet de :
    • Construire l'historique, comme bon vous semble, de toutes les évolutions d'un ensemble de fichiers (principalement textuels)
    • De naviguer dans cet historique
    • d'expérimenter des choses en parallèle, dans le même fichier, ou plusieurs
    • Et d'atténuer drastiquement la peur de détruire des trucs

Pourquoi Git ?

Il existe plusieurs VCS : cvs, subversion, mercurial, git, etc.

Les avantages de git :

  • Marche online et offline
  • Conçu pour le travail largement collaboratif
  • Rapide à l'exécution
  • Le plus utilisé au monde :
    • Documentations et aides innombrables
    • Outils connexes très puissants et développements très actif
  • Gitlab, github
  • ...

GitLab

  • git est au cœur des projets GitLab. C'est l'outil qui va vous permettre de construire et suivre l'évolution du contenu de votre projet
  • Pour des raisons de temps, nous n'aborderons pas ici en détail :
    • Les commandes git en détail
    • Les concepts de branches et de fusion
    • Les commandes de réorganisation de l'historique

Sondage rapide

$ git init
$ git clone
$ git add 
$ git status
$ git commit
$ git log
$ git pull
$ git push
$ git remote
$ git switch
$ git checkout
$ git merge 
$ git rebase
$ git cherry-pick

GitLab

Fort heureusement, nous pouvons gérer entièrement notre dépôt git via l'interface web. La plupart des opérations git listées précdemment peuvent être effectuées directement via l’interface web (édition, add, commit, navigation dans l'historique...).

Voir démo

Mise en situation

Dans votre projet précédemment créé :

  • créez et éditez plusieurs dossiers & fichiers
  • créez une ou plusieurs branches
  • Faites des modifications dans les différentes branches
  • Visualisez/naviguez dans l'historique ainsi enrichi

Sommaire

  1. Généralités sur les forges logicielles
  2. Les groupes et projets
  3. La gestion de version en ligne
  4. Gestion d'un projet GitLab
  5. Le travail collaboratif avec GitLab

GitLab

Un projet GitLab n'est pas seulement un dépôt Git :

  • Gestionnaire tickets
  • Wiki
  • Jalons
  • etc...

Un ensemble d'outils pour gérer votre développement proprement.

Les Tickets GitLab (ou Issues)

Les tickets GitLab permettent de :

  • Suivre l'évolution des problèmes du signalement à la résolution
  • Discuter de nouvelles idées
  • Suivre l'ajout de nouvelles fonctionnalités, leur évolution
  • Liste et Tableau pour visualiser l’ensemble des problèmes déja déposés, les classer, les commenter ...
  • Jalon : définition d’étapes de développement, planification du projet

Conseils et fonctionnalités utiles sur les tickets

  • Créez des labels explicites pour classer vos tickets (documentation, bugs, newideas...).
  • Utilisez le markdown pour rédiger vos issues.
  • Vous pouvez mentionner dans les issues ou dans les messages de commit les autres participants au projet via la chaine @username. Cela entrainera l’envoi d’un mail à la personne concernée, l’ajout d’une tâche dans sa todo-list
  • Faire référence à une issue dans une autre issue ou un message de commit via #id, id étant le numéro de l’issue
  • Clore automatiquement une issue via un message de commit. Il suffit qu’il contienne la chaîne Fix #id (ou un des autres mots-clés mentionnés ici).

Mise en situation

  • Dans votre projet, créez des labels
  • Dans le sous-groupe de votre équipe, sur un autre projet que le vôtre, créez des tickets
  • Dans votre projet, interagissez avec les tickets créés par vos collègues
  • Réalisez des commits en relation avec les tickets

Sommaire

  1. Généralités sur les forges logicielles
  2. Les groupes et projets
  3. La gestion de version en ligne
  4. Gestion d'un projet GitLab
  5. Merge Request et Fork

Détour par les Merge Request

Lorsque vous avez fini de travailler dans votre branche et que vous voulez intégrer vos modifications à la branche principale, un outil GitLab vous permet de le faire "proprement" : les merge-requests (ou demandes de fusion).

Merge-request : sur GitLab, soumission d'une demande de fusion d'une branche dans un autre.

  • Réserver la branche main pour la version principale et stable du projet
  • Isoler les essais/implémentations de nouvelles fonctionnalités, corrections d'un bug etc.
  • Informer les membres du projets, demander une revision, un avis
  • ...

Comment fusionner proprement dans la branche main?

Les merge-requests

Lorsque vous avez fini de travailler dans votre branche et que vous voulez intégrer vos modifications à une autre branche de votre projet, un outil GitLab vous permet de le faire "proprement" : les merge-requests (ou demandes de fusion).

Merge-request : sur GitLab, soumission d'une demande de fusion d'une branche dans un autre.

  • Réserver la branche main pour la version principale et stable du projet
  • Isoler les essais/implémentations de nouvelles fonctionnalités, corrections d'un bug etc.
  • Informer les membres du projets, demander une revision, un avis
  • ...

Démonstration d'une demande de fusion

Mise en situation

  • Dans une branche nouvellement créée à partir de la branche main de votre projet, réalisez un commit
  • Créez une Merge Request à partir de ce commit dans cette branche vers la branche main

Et si je ne suis pas membre du projet auquel je veux contribuer ?

Les forks (ou bifurcations)

Sur GitLab, vous pouvez faire une copie d'un projet (interne ou public) dont vous n'êtes pas forcément membre dans un autre namespace et que vous pourrez cette fois modifier.

Une fois vos modifications faites, vous pouvez faire une demande de fusion de votre bifurcation vers le projet source.

Mise en situation

  • Créez un fork d'un projet d'un membre de votre équipe
  • Effectuez des commits dans ce fork
  • Demandez une Merge Request
  • Traitez les Merge Requests de votre projet

Conclusion

Ce que nous n'avons pas (encore ?) vu

  • Les commandes Git en ligne de commandes
  • Les registres
  • Les workflow de travail collaboratif
  • L'intégration continue et le déploiement continu
  • ...

Merci de votre attention !

Miscellanées

Les workflows Git

Qu'est qu'un workflow ?

  • Un ensemble de convention pour travailler à plusieurs sur un même dépot Git/projet GitLab

Pourquoi ?

  • Différents intervenants dans plusieurs contextes, avec leurs habitudes propres,
  • Une gestion compliquée voir chaotique et donc probablement inefficace.
  • Risques de perte de temps, de données !
  • ...

Quel workflow choisir ?

Beaucoup de workflow possible, pas de réponse unique...

Quel workflow choisir ?

Peu importe le workflow choisi et sa complexité, il faut qu'il soit explicité précisément et exhaustivement avec ceux qui travaillent sur le projet !