Skip to content

CI - Ajoute le build, le tag git et la publication sur PyPi

sandcha requested to merge publish into main

Cette MR met à jour la configuration de la CI et permet :

[Optionnel] Particularités de la pipeline ayant rencontré quelques limites de la configuration GitLab :

Pour permettre la création de tags sur GitLab, le moyen habituel est de créer un Personal Access Token qui, dans notre cas, serait relié au compte leximpact-bot (décrit par exemple dans cet article medium.com). Mais ces tokens expirent annuellement et nous préférons éviter ces renouvellements manuels.

On a tenté une première méthode : ajouter leximpact-bot aux membres du dépôt et prendre cette identité sur git (en sauvegardant et masquant son mot de passe au plus haut niveau de l'administration des variables gitlab ; plusieurs syntaxes dans 53e74398) mais non seulement cela donnait des droits d'écriture au bot sur le dépôt mais cela échouait en erreur 403 pour manque de droits sur la branche de travail. Cette méthode a donc été abandonnée sachant que la branche de travail était plus simple que la branche principale main protégée sur laquelle il aurait en plus fallu définir des droits de force push pour que cela ait une chance de fonctionner.

Pour contourner la configuration trop complexe des accès pour permettre un 'git tag' depuis un script, on utilise la création de release GitLab qui déclenche automatiquement la création de tag git lorsqu'il n'existe pas.

Il semble néanmoins que la syntaxe de définition de nom de release est limitée soit à un texte prédéfini, soit à la création d'un fichier de métadonnées dans un autre job (doc) soit à un évènement de création de tag par l'usager. Ceci alors que nous voulons l'extraire automatiquement du pyproject.toml. On fait donc appel à la commande release-cli create fournie par une image docker spécifique. Cette image ne contenant pas les commandes pip/poetry, on choisit d'extraire la version avec Bash (plutôt que d'ajouter un job créant un fichier metadata pour la version du dépôt).

Pipeline obtenue :

La première pipeline à déploiement réussi est : https://git.leximpact.dev/leximpact/simulateur-dotations-communes/leximpact-dotations-back/-/pipelines/15830 Capture_d_écran_2024-07-23_à_22.14.40 Mais s'en est suivi une pipeline identique suite à l'évènement de tagging (comme l'indique le sous-titre de la pipeline) : https://git.leximpact.dev/leximpact/simulateur-dotations-communes/leximpact-dotations-back/-/pipelines/15831

Le commit suivant fc033072 a donc forcé la non écoute d'un évènement de tagging. Ceci étant défini dans les rules, le job release-and-tag n'apparaît alors même pas dans l'arbre décrivant la pipeline : Capture_d_écran_2024-07-23_à_22.14.59

Questions ouvertes :

À faire avant le merge de cette MR :

  • Bumper la version (retirer le release candidate aka rc de la version) et mettre à jour le CHANGELOG
  • Vérifier les commit TO REVERT
    • Pour release-and-tag en particulier, décommanter if ! .gitlab/ci/has-functional-changes.sh ; then exit 0 ; fi et reverter 14fb5622 pour limiter le déploiement à la branche main
  • Vérifier que le déploiement fonctionne correctement sur main
  • Nettoyer les essais en supprimant les tags, release, wheels pypi rc -> on les conserve pour des tests
  • Supprimer la variable de mot de passe de leximpact-bot des settings
Edited by sandcha

Merge request reports