-
Notifications
You must be signed in to change notification settings - Fork 321
Description
Votre demande de fonctionnalité est-elle liée à un problème ? Veuillez le décrire.
Actuellement, il n'existe aucun mécanisme automatisé pour détecter les breaking changes (BC) dans les signatures des méthodes publiques des classes du core Jeedom. Cela peut conduire à des ruptures de compatibilité non détectées lors de refactorings ou d'évolutions, affectant les plugins et l'écosystème Jeedom. Les développeurs peuvent involontairement modifier des signatures de méthodes publiques sans réaliser l'impact sur la compatibilité ascendante.
Décrivez la solution que vous souhaitez
Je propose d'implémenter un système de tests automatisés qui :
- Génère et maintient une base de référence des signatures de toutes les méthodes publiques et protégées des classes du core
- Détecte automatiquement les breaking changes :
- Ajout/suppression de paramètres
- Changement de type de paramètres
- Changement de type de retour (vers un type plus strict)
- Modification de visibilité (public → protected/private)
- Ajout de modificateurs
finalouabstract - Changement de statut static/non-static
- Différencie les vrais BC des améliorations safe :
- Ajout de type de retour sur méthode finale (safe)
- Élargissement de type de retour (safe)
- Amélioration de visibilité (protected → public) (safe)
- Intégration dans la CI/CD pour validation automatique sur chaque PR
- Commande de régénération de la base de référence lors de changements intentionnels
Contexte supplémentaire
Un prototype fonctionnel a été développé démontrant la faisabilité #2902 :
- Système de sérialisation des signatures dans un fichier de référence
- Tests PHPUnit avec data providers pour chaque signature
- Distinction entre breaking changes (échec du test) et améliorations safe (warnings)
- Gestion des types de retour, paramètres, visibilité, modificateurs final/abstract/static
- Méthode de génération automatique des signatures de référence
Cette approche permettra de maintenir la stabilité de l'API publique de Jeedom tout en autorisant les évolutions et refactorings nécessaires.