fix: add test-release stage for testing and fixing releases (#1040)
Amélioration du Pipeline CI/CD
Cette merge request propose une restructuration majeure de notre pipeline CI/CD pour résoudre les problèmes liés aux releases et améliorer la gestion des artefacts. L'objectif principal était de créer un environnement de test sécurisé pour les releases tout en maintenant une structure de pipeline logique et maintenable.
Changements Principaux
0. Tests unitaires Idempotents
- Refactorisation de test.sh pour assurer l'idempotence de pipeline
1. Migration de GoReleaser vers la Version 2
- Mise à jour du fichier
.goreleaser.yml
vers la syntaxe de la version 2
2. Réorganisation des Stages
- Modification de l'ordre des stages pour suivre un flux plus logique :
test → lint → publish → pre-release-cleanup → test-release → release → post-release-cleanup → cleanup → notify
- Les tests et le linting sont maintenant exécutés en premier pour garantir la qualité du code avant toute tentative de release
3. Nouveaux Jobs de Release
- Ajout de
test-release
pour tester le processus de release en isolation - Introduction de phases de nettoyage avant (
pre-release-cleanup
) et après (post-release-cleanup
) les releases - Utilisation du mode "snapshot" de GoReleaser pour les tests
4. Amélioration de la Maintenance
- Séparation des scripts dans des fichiers
.sh
individuels dans le dossierci/
- Meilleure gestion des erreurs avec
set -e
dans tous les scripts - Fichier
.gitlab-ci.yml
plus propre et plus facile à comprendre
5. Gestion des Artefacts
Note : N'ayant pas une expertise approfondie dans la gestion des artefacts GitLab, j'ai mis en place une approche prudente :
- Nettoyage systématique du dossier
dist
avant et après les releases - Vérification de la création des artefacts pendant les test-releases
- Prévention des conflits d'artefacts entre les jobs
Modifications Techniques
Nouveau Processus de Release
- Pre-release cleanup : Nettoyage de l'environnement
- Test-release : Exécution de GoReleaser en mode snapshot
- Release : Release officielle avec vérification de version
- Post-release cleanup : Nettoyage final
Amélioration des Scripts
- Tous les scripts sont maintenant dans des fichiers séparés pour une meilleure maintenance
- Ajout de logging détaillé pour faciliter le debugging
- Gestion appropriée des erreurs et des cas d'échec
Points d'Attention
-
Gestion des Artefacts :
- La solution actuelle est fonctionnelle mais pourrait être optimisée
- Des améliorations futures pourraient être envisagées selon les besoins
-
Test-Release :
- Le job
test-release
utilise le mode snapshot de GoReleaser - Il ne publie pas réellement les artefacts mais simule le processus
- Le job
-
Cleanup :
- Les scripts de cleanup sont peut-être plus agressifs que nécessaire
- À ajuster selon les retours d'expérience
Edited by Ayoub Abidi