Présentation
Codemap est un utilitaire en Go qui produit, à partir d’un module Go, une page HTML unique répertoriant chaque package, les dépendances internes et les fonctions contenues dans chaque fichier. Le rendu se lit dans un navigateur sans serveur, ce qui permet de le publier sur n’importe quel site statique. L’exemple fourni montre la cartographie du module yggstore : 40 packages et 1 850 fonctions sont visualisés en une seule page.
Fonctionnement technique
Le programme s’appuie sur la chaîne d’outils du compilateur Go ≥ 1.24. En exécutant la commande suivante, il analyse le répertoire du module :
go run github.com/peterretief/codemap@latest -o code-map.htmlLe processus parcourt le go.mod, interroge les métadonnées de chaque package via les API standard de Go (par exemple go list) et construit un graphe d’appels où chaque ligne ne dépend que des lignes situées en dessous. Les boîtes les plus larges correspondent à des packages contenant davantage de fonctions, et les couleurs distinguent les dossiers de premier niveau. Les dossiers internal/, vendor/, testdata/ ainsi que les sous‑modules disposant de leur propre go.mod sont explicitement exclus du rendu, ce qui réduit le bruit visuel.
Intégration CI/CD
Codemap peut être intégré dans un workflow GitHub Actions, comme le montre l’extrait suivant :
- uses: actions/checkout@v4
- uses: peterretief/codemap@v0.1.0
with:
output: code-map.html
- uses: actions/upload-artifact@v4
with:
name: code-map
path: code-map.htmlLe job génère le fichier code-map.html puis le stocke comme artefact, rendant possible sa publication automatique sur une page GitHub Pages ou tout autre hébergement statique. Cette automatisation garantit que la cartographie reste synchronisée avec le code source à chaque push.
Limites et considérations
Le rendu dépend de la version du compilateur ; les modules nécessitant des fonctionnalités post‑Go 1.24 ne seront pas supportés. Les tests sont volontairement omis, ce qui signifie que la visibilité sur les fonctions de test est inexistante. Pour de très gros modules, la taille du fichier HTML peut croître de façon non linéaire, impactant les temps de chargement et la réactivité du navigateur. Enfin, la page charge ses polices depuis Google Fonts ; en l’absence de connexion internet, le navigateur bascule sur les polices système, ce qui peut modifier légèrement l’apparence.