Die maßgeblichen Spezifikationen für alles auf Exercism
configlet ist ein Tool, das Track-Maintainer bei der Pflege ihres Tracks unterstützt.
Die Hauptfunktion von configlet ist das Linting: Es prüft, ob die (Konfigurations-)Dateien eines Tracks korrekt strukturiert sind, sowohl syntaktisch als auch semantisch. Falsch konfigurierte Tracks werden möglicherweise nicht korrekt synchronisiert, sehen auf der Website falsch aus oder bieten eine suboptimale Nutzererfahrung. Deshalb spielen die Prüfungen von configlet eine wichtige Rolle dabei, die Integrität von Exercism zu wahren. Die vollständige Liste der Regeln, die der Linter prüft, findest du hier.
Die zweite Funktion von configlet ist das Generieren von Dokumenten. Es gibt zwei Arten von Dokumenten, die configlet generieren kann:
introduction.md-Datei einer Konzeptübung.instructions.md-Datei einer Praxisübung.Wie diese Dokumente generiert werden, erfährst du hier.
Die dritte Funktion von configlet ist es, verschiedene Daten für Praxisübungen bereitzustellen.
Eine Praxisübung in einem Exercism-Track wird oft auf Grundlage einer Spezifikation im Repo exercism/problem-specifications umgesetzt.
Exercism verlangt bewusst, dass jede Übung ihre eigene Kopie bestimmter Dateien hat (wie .docs/instructions.md), selbst wenn diese Übung in problem-specifications existiert.
Deshalb hat configlet einen Befehl sync, der prüfen kann, ob solche Praxisübungen in einem Track mit der Quelle im Upstream synchron sind, und sie aktualisieren kann, wenn Updates verfügbar sind.
Es gibt drei Arten von Daten, die aus problem-specifications aktualisiert werden können: Dokumentation, Metadaten und Tests.
Außerdem gibt es eine Art von Daten, die aus der config.json auf Track-Ebene befüllt werden kann: Dateipfade in den Konfigurationsdateien der Übungen.
Beachte, dass der Befehl sync in configlet-Releases bis einschließlich 4.0.0-alpha.34 nur mit Tests gearbeitet hat.
Um den Überblick zu behalten, welche Tests für eine bestimmte Praxisübung implementiert sind, muss die Übung eine .meta/tests.toml-Datei enthalten.
Die Tests in dieser Datei werden über ihre UUID identifiziert und jeder Test hat einen booleschen Wert, der angibt, ob er von dieser Übung implementiert wird.
Details dazu, wie du die verschiedenen Teile einer Übung synchronisierst, findest du hier.
Mit configlet kannst du schnell Dateien für einen neuen Approach, Artikel oder eine neue Übung anlegen.
Mehr darüber, wie du diese Dateien erstellst, erfährst du hier.
Übungen, Tracks und Konzepte werden durch eine UUID identifiziert.
Wie du UUIDs generierst, erfährst du hier.
Configlet hat einen Befehl fmt, der für eine einheitliche Formatierung der JSON-Dateien im Track-Repository sorgt.
Der Befehl fmt formatiert die folgenden Dateien:
config.jsonexercises/{concept,practice}/*/.approaches/config.jsonexercises/{concept,practice}/*/.articles/config.jsonexercises/{concept,practice}/*/.meta/config.jsonMehr über den Format-Befehl erfährst du hier.
configlet wird als eigenständiges Binary verteilt. Jeder Track sollte ein bin/fetch-configlet-Skript haben und kann zusätzlich ein bin/fetch-configlet.ps1-Skript haben. Das erste ist ein Bash-Skript, das zweite ein PowerShell-Skript.
Wenn du eines dieser Skripte ausführst, lädt es die neueste Version von configlet in das Verzeichnis bin herunter. Danach kannst du configlet verwenden, indem du bin/configlet bzw. bin/configlet.exe ausführst.
Alle Tracks sollten die Lint-Funktionalität von configlet in ihre CI einbinden. Am einfachsten geht das über die configlet CI GitHub Action.