Définir le modèle de dépôt

Microsoft fournit des recommandations dédiées pour X++ dans Git. Versionnez les sources et les métadonnées significatives en excluant les sorties de compilation, les caches locaux et les secrets.

Je privilégie un dépôt par produit ou solution cohérente, pas automatiquement un dépôt par modèle. Les modèles étroitement couplés doivent compiler et être livrés ensemble. À l'inverse, un monorepo contenant des clients et des produits sans rapport élargit le périmètre de build et encourage les dépendances accidentelles.

Ce qui appartient à Git

Versionner

  • Descripteurs de modèle et de package (.descriptor).
  • Métadonnées X++ et fichiers projet utiles (.rnrproj).
  • Scripts de build et configuration NuGet.
  • Tests automatisés et données de référence non sensibles.
  • Documentation technique versionnée et ADR.

Exclure

  • Binaires et sorties de build (bin/, obj/).
  • Dossiers temporaires Visual Studio (.vs/).
  • Packages téléchargés et cache NuGet.
  • Clés, mots de passe et certificats (.pfx, .snk).
  • Paramètres spécifiques à la VM développeur (*.user).
.vs/
**/bin/
**/obj/
*.user
*.suo
PackagesLocalDirectory/bin/
PackagesLocalDirectory/XppMetadata/
*.pfx
*.snk
.env
# Expérience développeur unifiée — exclure les sorties générées
.pac/
OutputDirectory/

Les chemins exacts diffèrent entre l'expérience classique et l'expérience développeur unifiée. Validez sur un clone propre : le pipeline peut-il restaurer, compiler et tester sans contenu local non déclaré ?

Choisir une stratégie de branches

Pour la plupart des équipes D365, le développement trunk-based avec des branches de courte durée est plus facile à gouverner que le GitFlow long. main reste stable et déployable ; chaque ticket utilise une branche temporaire qui ne dépasse pas la durée d'un sprint.

main fusion PR fusion PR hotfix feature/ADO-1423-credit-contrôle fix/ADO-1510-ssrs-facture Trunk-based development — branches de courte durée
Chaque branche vit le temps d'un work item. Les branches qui dépassent un sprint accumulent des risques de fusion et des conflits XML.
  • feature/ADO-1423-credit-controle
  • fix/ADO-1510-ssrs-facture
  • hotfix/ADO-1612-deadlock-batch

Les branches de release permanentes sont justifiées uniquement quand plusieurs versions supportées nécessitent vraiment une maintenance parallèle. Pour les déploiements SaaS, elles ne sont presque jamais nécessaires.

Créer des commits révvisables

Un commit doit exprimer une intention technique. Mélanger le renommage en masse, la mise en forme et la logique métier rend les revues XML inutilement risquées.

ADO-1423 Bloquer la commande client au-delà du plafond de crédit

- ajout de la classe de service QwoCreditPolicy
- wrapping de SalesTable.checkCreditLimit() via CoC
- couverture SysTest pour les clients bloqués et autorisés
- mise à jour de la version du descripteur de modèle à 1.1.0

Le message lie le code au work item et explique l'intention. Les commits intermédiaires bruyants peuvent être squashés lors de la complétion de la pull request.

Résoudre les conflits de métadonnées X++ en sécurité

Les artefacts D365 sont des fichiers XML. Une fusion textuellement valide peut quand même créer un artefact invalide : contrôles dupliqués, références cassées ou propriétés supprimées. Le risque varie selon le type d'artefact :

Type d'artefactRisque de conflitApproche de résolution sûre
Classe / méthode de tableFaible — les méthodes isolées entrent rarement en collisionFusion standard ; compiler et tester
Formulaire (AxForm XML)Élevé — arborescence de contrôles, sources de données et événements dans un seul fichierRouvrir dans le designer Visual Studio ; ne jamais fusionner le XML de formulaire manuellement
Descripteur de modèleMoyen — version, liste de dépendancesRéconcilier manuellement les versions et la liste de dépendances
Fichier de labelsMoyen — lignes XML sensibles à l'ordreFusionner par ID de label ; supprimer les doublons ; recompiler les labels
Politique / rôle de sécuritéÉlevé — la liste de privilèges peut perdre des entrées silencieusementRecroiser la liste de privilèges d'origine après la fusion

Après toute résolution de conflit de métadonnées : rouvrir l'objet dans Visual Studio, compiler le modèle et exécuter des tests ciblés. Ne résolvez pas un XML complexe uniquement dans un éditeur de texte.

Git dans l'expérience développeur unifiée

L'expérience développeur unifiée (développement local sur DevBox ou machine développeur, sans VM AOS complète) modifie certaines hypothèses Git :

  • Les sources se trouvent dans un dossier Repos mappé à une solution Power Platform ; le dépôt suit la même stratégie de branches, mais les chemins sous PackagesLocalDirectory ne s'appliquent plus.
  • Les métadonnées X++ sont compilées par la toolchain pac d365 build, qui nécessite les packages NuGet et le nuget.config corrects committés avec les sources.
  • Le dossier .pac/ et les sorties générées doivent être exclus de Git.
  • Les pull requests doivent toujours compiler depuis une image d'agent propre. Le guide CI/CD pour l'expérience développeur unifiée décrit le pipeline de référence.

Politique de pull request

  1. Un work item lié avec des critères d'acceptation lisibles.
  2. Au moins un relecteur familier avec le domaine impacté.
  3. Un build de validation obligatoire (compilation + Best Practice check au minimum).
  4. Les commentaires bloquants résolus, pas seulement accusés de réception.
  5. Preuves de test UI et SSRS attachées ou liées.
  6. Évaluation explicite des performances, de la sécurité et du traitement par lot pour toute méthode de table ou job batch.
  7. Aucun secret, binaire, fichier .user ni modification sans rapport.
  8. Branche à jour avec main avant la fusion.

Contrôler les dépendances de modèles

Une dépendance ajoutée pour réutiliser une classe peut élargir le périmètre de compilation et imposer un ordre de déploiement. Challengez chaque nouvelle référence de package : la capacité peut-elle être exposée via une abstraction, un délégué, un contrat ou un modèle réellement partagé ?

Le pipeline doit compiler depuis un environnement propre. Un build qui réussit uniquement sur la VM de l'auteur expose généralement une dépendance locale non déclarée. Épinglez les versions de packages NuGet dans packages.config et committez le fichier.

Références Microsoft Learn

Aucune section ne correspond.