CI - Ajoute le build, le tag git et la publication sur PyPi
Cette MR met à jour la configuration de la CI et permet :
- la création de release GitLab : https://git.leximpact.dev/leximpact/simulateur-dotations-communes/leximpact-dotations-back/-/releases
- la création de tag GIT : https://git.leximpact.dev/leximpact/simulateur-dotations-communes/leximpact-dotations-back/-/tags
- la publication sur PyPi : https://pypi.org/project/leximpact-dotations-back/
- et initie un fichier
CONTRIBUTING.md
[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 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 :
Questions ouvertes :
-
En cas de changement non fonctionnel, les CI openfisca ou de certains de nos autres dépôt s'achèvent avec une erreur/
exit 1
à la publication (rien à publier). On choisit ici d'achever la CI sans erreur. -
Quand la librairie a déjà été déployée sur PyPi, il n'y a pas d'erreur de détectée ; ce comportement semble inhabituel pour twine/pypi
🤔 Exemple : https://git.leximpact.dev/leximpact/simulateur-dotations-communes/leximpact-dotations-back/-/jobs/60865
⚠ À 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écommanterif ! .gitlab/ci/has-functional-changes.sh ; then exit 0 ; fi
et reverter 14fb5622 pour limiter le déploiement à la branchemain
-
-
Vérifier que le déploiement fonctionne correctement sur main
-
Nettoyer les essais en supprimant les tags, release, wheels pypi-> on les conserve pour des testsrc
-
Supprimer la variable de mot de passe de leximpact-bot des settings