Présentation
Wing est un utilitaire de gestion de synchronisation de code, similaire à repo, conçu pour les équipes de développement. Il offre les fonctionnalités clés suivantes :
- Compatibilité avec les systèmes d'exploitation Windows, Linux et MacOS
- Synchronisation de code et mappage local
- Extension des commandes git pour la gestion des espaces de travail
- Conservation des commandes git natives
- Intégration d'outils de développement courants pour l'environnement, la vérification de code, la création de modèles, le débogage et la publication
L'objectif principal de Wing est d'uniformiser les environnements de développement au sein d'une équipe, en mettant l'accent sur la collaboration et les processus d'ingénierie pour accélérer les cycles de conception, de développement, de test et de dépoliement.
Architecture de l'Espace de Développement
Conception Structurelle
L'espace de développement (dev-space) est organisé de manière modulaire pour faciliter la gestion des composants du projet.
Normes d'Utilisation
Configuration du Manifest
Le fichier manifest définit les dépôts de code accessibles aux différents membres de l'équipe, garantissant une structure cohérente. Il assure l'alignement entre les développeurs, les serveurs d'intégration continue (comme Jenkins) et les environnements de développement. L'initialisation se fait via une commande pour obtenir l'index du code (par exemple : wing init nom_equipe branche_fichier.xml).
Chaque balise project dans le manifest correspond à un dépôt distant avec le format suivant :
<!-- path : chemin relatif local -->
<!-- name : adresse relative du dépôt distant -->
<!-- revision : branche ou tag spécifique, utilise la valeur default si non spécifié -->
<project path="docs/schéma" name="repo/docs.git" revision="principale">
<!-- Exporte le fichier source du dépôt vers le répertoire local -->
<copyfile dest="construction.py" src="construction.py"/>
</project>
Groupe de Code Administration
Le fichier gestion.xml recense tous les dépôts du projet ou produit. Il n'est pas destiné au développement quotidien, mais sert aux responsables techniques pour superviser les activités de l'équipe, faciliter la gestion et les revues de code.
<?xml version='1.0' encoding='UTF-8'?>
<manifest>
<remote name="source" fetch=".."/>
<!-- Branche par défaut -->
<default revision="principale" remote="source" sync-j="4"/>
<!-- Documentation -->
<project path="docs" name="projet/equipe/docs.git"/>
<!-- Plateforme : toujours sur la branche principale -->
<project path="plateforme/docs" name="plateforme/docs.git" revision="principale"/>
<!-- Application -->
<project path="application/client" name="projet/equipe/client.git"/>
<!-- Composants -->
<project path="composants/communs" name="plateforme/composants/communs.git"/>
<project path="composants/comm" name="plateforme/composants/comm.git"/>
<project path="composants/uikit" name="plateforme/composants/uikit.git"/>
<project path="composants/framework" name="plateforme/composants/framework.git"/>
<!-- PC : toujours sur la branche principale -->
<project path="pc/wing" name="plateforme/wing.git"/>
<project path="pc/tinyui" name="plateforme/tinyui.git"/>
<!-- Modèles : toujours sur la branche principale -->
<project path="modeles/as" name="plateforme/modele_as.git" revision="principale"/>
<project path="modeles/as_mts" name="plateforme/modele_as_jni.git" revision="principale"/>
<project path="modeles/as_jar" name="plateforme/modele_as_jar.git" revision="principale"/>
<project path="modeles/py" name="plateforme/modele_py.git" revision="principale"/>
<!-- Serveur -->
<project path="serveur/fomosite" name="projet/equipe/fomosite.git"/>
<project path="serveur/web" name="projet/equipe/web.git"/>
<project path="serveur/vue" name="projet/equipe/vue.git"/>
<!-- Test -->
<project path="test/outils" name="plateforme/outils.git" revision="principale"/>
<project path="test/testBot" name="projet/equipe/testBot.git"/>
<!-- Construction -->
<project path="construction" name="projet/equipe/construction">
<!--<copyfile dest="construction.py" src="construction.py"/>-->
</project>
</manifest>
Groupe de Code PC
Ce fichier manifest correspond à l'index du groupe PC, incluant uniquement les bibliothèques communes et les dépôts liés au développement PC.
<?xml version='1.0' encoding='UTF-8'?>
<manifest>
<remote name="source" fetch=".."/>
<default revision="principale" remote="source" sync-j="4"/>
<project path="docs" name="projet/equipe/docs.git"/>
<project path="plateforme/docs" name="plateforme/docs.git" revision="principale"/>
<project path="pc/wing" name="plateforme/wing.git"/>
<project path="pc/tinyui" name="plateforme/tinyui.git"/>
<project path="test/outils" name="plateforme/outils.git" revision="principale"/>
<project path="test/testBot" name="projet/equipe/testBot.git"/>
<project path="construction" name="projet/equipe/construction">
<!--<copyfile dest="construction.py" src="construction.py"/>-->
</project>
</manifest>
Groupe de Code Test
Voici l'index pour le groupe de développement de tests automatisés, contenant seulement les bibliothèques communes et les dépôts de test.
<?xml version='1.0' encoding='UTF-8'?>
<manifest>
<remote name="source" fetch=".."/>
<default revision="principale" remote="source" sync-j="4"/>
<project path="docs" name="projet/equipe/docs.git"/>
<project path="plateforme/docs" name="plateforme/docs.git" revision="principale"/>
<project path="test/outils" name="plateforme/outils.git" revision="principale"/>
<project path="test/testBot" name="projet/equipe/testBot.git"/>
<project path="construction" name="projet/equipe/construction">
<!--<copyfile dest="construction.py" src="construction.py"/>-->
</project>
</manifest>
Création de Branches ou de Tags
Pour créer une nouvelle branche basée sur une branche existante, utilisez une commande telle que wing -create b version_beta1.0.0 principale. Cela génère automatiquement une branche version_beta1.0.0 dans le dépôt Git du manifest et met à jour la valeur de révision par défaut dans tous les fichiers index XML du manifest.
Par exemple, le fichier test.xml dans la nouvelle branche serait modifié comme suit, avec les bibliothèques communes (c'est-à-dire celles spécifiant une révision) restant inchangées :
<?xml version='1.0' encoding='UTF-8'?>
<manifest>
<remote name="source" fetch=".."/>
<default revision="version_beta1.0.0" remote="source" sync-j="4"/>
<project path="docs" name="projet/equipe/docs.git"/>
<project path="plateforme/docs" name="plateforme/docs.git" revision="principale"/>
<project path="test/outils" name="plateforme/outils.git" revision="principale"/>
<project path="test/testBot" name="projet/equipe/testBot.git"/>
<project path="construction" name="projet/equipe/construction">
<!--<copyfile dest="construction.py" src="construction.py"/>-->
</project>
</manifest>
Démarrage Rapide
Installation
$ python setup.py install
Configuration de l'Environnement
Pour Windows : Ajoutez le chemin C:\Utilisateurs\${nom_utilisateur}\bin aux variables d'environnement système.
Pour Linux/MacOS : Configurez le répertoire ~/bin comme emplacement global pour les exécuatbles.
Création d'un Espace de Travail
Ajoutez l'adresse du dépôt Git correspondant à l'espace de travail, par exemple :
# Mode d'index local
# wing -space add {nom_espace} {hôte_git} [manifest]
# Exemple :
$ wing -space add espace_dev git@github.com/equipe_dev
Obtention du Code
$ mkdir projet_dev
$ cd projet_dev
# wing init {nom_espace} {branche/tag} {fichier_manifest}
# Exemple :
$ wing init espace_dev principale gestion.xml
Cela crée automatiquement un fichier index manifest vide (par exemple .wing/manifests/gestion.xml) où vous devez ajouter les relations de mappage des dépôts à synchroniser.
Licence
Ce projet est distribué sous la licence MIT.