Un exercice d'entraînement sur un parcours Exercism est souvent implémenté à partir d'une spécification du dépôt exercism/problem-specifications.
Exercism exige délibérément que chaque exercice ait sa propre copie de certains fichiers (comme .docs/instructions.md), même lorsque cet exercice existe dans problem-specifications.
C'est pourquoi configlet dispose d'une commande sync, qui peut vérifier que ces exercices d'entraînement d'un parcours sont synchronisés avec cette source en amont, et les mettre à jour lorsque des mises à jour sont disponibles.
Trois types de données peuvent être mis à jour depuis problem-specifications : la documentation, les métadonnées et les tests.
Il existe aussi un type de données qui peut être renseigné à partir du fichier config.json au niveau du parcours : les chemins de fichiers dans les fichiers de configuration d'exercice.
On décrit la vérification et la mise à jour de ces types de données dans des sections distinctes ci-dessous, mais pour résumer :
configlet sync n'agit que sur les exercices qui existent dans le fichier config.json au niveau du parcours.
Par conséquent, si tu implémentes un nouvel exercice sur un parcours et que tu veux ajouter les fichiers initiaux avec configlet sync, ajoute d'abord l'exercice au fichier config.json au niveau du parcours.
Si l'exercice n'est pas encore prêt à être visible par les utilisateurs, mets sa valeur status à wip.configlet sync n'apporte aucune modification au parcours et vérifie chaque type de données pour chaque exercice.--docs, --filepaths, --metadata et --tests.--update.--update --yes.--update --tests include --exercise prime-factors.problem-specifications, ajoute --offline --prob-specs-dir /path/to/local/problem-specifications
configlet sync s'efforce de conserver l'ordre des clés dans les fichiers .meta/config.json des exercices lors de la mise à jour.
Pour écrire ces fichiers sous une forme canonique sans synchroniser, utilise la commande configlet fmt.
Cependant, configlet sync ajoute bien les clés obligatoires (éventuellement vides) authors, files et blurb lorsqu'elles sont absentes.
C'est moins « dans l'esprit de la synchronisation », mais plus pratique : quand tu implémentes un nouvel exercice, tu peux utiliser sync pour créer un fichier .meta/config.json de départ.configlet sync supprime les clés qui ne figurent pas dans la spécification.
Les paires clé/valeur personnalisées restent prises en charge : elles doivent être écrites dans un objet JSON nommé custom.À noter que dans les versions 4.0.0-alpha.34 et antérieures de configlet, la commande sync n'agissait que sur les tests.
La commande sync permet de vérifier ou de mettre à jour la documentation, les métadonnées et les tests des exercices d'entraînement à partir de 'problem-specifications'.
Elle peut aussi vérifier ou renseigner les valeurs files manquantes des exercices d'apprentissage/d'entraînement à partir du 'config.json' du parcours.
configlet [global-options] sync [command-options]
Global options:
-h, --help Show this help message and exit
--version Show this tool's version information and exit
-t, --track-dir <dir> Specify a track directory to use instead of the current directory
-v, --verbosity <verbosity> The verbosity of output. Allowed values: q[uiet], n[ormal], d[etailed]
Options for sync:
-e, --exercise <slug> Only operate on this exercise
-p, --prob-specs-dir <dir> Use this 'problem-specifications' directory, rather than cloning temporarily
-o, --offline Do not check that the directory specified by --prob-specs-dir is up to date
-u, --update Prompt to update the seen data that are unsynced
-y, --yes Auto-confirm prompts from --update for updating docs, filepaths, and metadata
--docs Sync Practice Exercise '.docs/introduction.md' and '.docs/instructions.md' files
--filepaths Populate empty 'files' values in Concept/Practice exercise '.meta/config.json' files
--metadata Sync Practice Exercise '.meta/config.json' metadata values
--tests [mode] Sync Practice Exercise '.meta/tests.toml' files.
The mode value specifies how missing tests are handled when using --update.
Allowed values: c[hoose], i[nclude], e[xclude] (default: choose)
Un exercice d'entraînement dérivé du dépôt problem-specifications doit avoir un fichier .docs/instructions.md (et éventuellement aussi un fichier .docs/introduction.md) contenant la documentation de l'exercice issue de problem-specifications.
Pour vérifier si des mises à jour de documentation sont disponibles pour chaque exercice d'entraînement du parcours (en sortant avec un code de sortie non nul si au moins une mise à jour est disponible) :
configlet sync --docs
Pour mettre à jour la documentation de chaque exercice d'entraînement de façon interactive, ajoute l'option --update (ou -u en abrégé) :
configlet sync --docs --update
Pour mettre à jour la documentation de chaque exercice d'entraînement sans interaction, ajoute l'option --yes (ou -y en abrégé) :
configlet sync --docs --update --yes
Pour n'agir que sur un seul exercice d'entraînement, utilise l'option --exercise (ou -e en abrégé).
Par exemple, pour mettre à jour la documentation de l'exercice prime-factors sans interaction :
configlet sync --docs -uy -e prime-factors
Chaque exercice d'un parcours doit avoir un fichier .meta/config.json.
Pour un exercice d'entraînement dérivé du dépôt problem-specifications, ce fichier doit contenir les paires clé/valeur blurb, source et source_url présentes dans le fichier metadata.toml correspondant en amont.
Pour vérifier si des mises à jour de métadonnées sont disponibles pour chaque exercice d'entraînement (en sortant avec un code de sortie non nul si au moins une mise à jour est disponible) :
configlet sync --metadata
Pour mettre à jour les métadonnées de chaque exercice d'entraînement de façon interactive, ajoute l'option --update (ou -u en abrégé) :
configlet sync --metadata --update
Pour mettre à jour les métadonnées de chaque exercice d'entraînement sans interaction, ajoute l'option --yes (ou -y en abrégé) :
configlet sync --metadata --update --yes
Pour n'agir que sur un seul exercice d'entraînement, utilise l'option --exercise (ou -e en abrégé).
Par exemple, pour mettre à jour les métadonnées de l'exercice prime-factors sans interaction :
configlet sync --metadata -uy -e prime-factors
Si un parcours implémente un exercice pour lequel des données de test existent dans le dépôt problem-specifications, l'exercice doit contenir un fichier .meta/tests.toml.
Le but du fichier tests.toml est de garder la trace des tests qui sont implémentés par l'exercice.
Les tests de ce fichier sont identifiés par leur UUID et chaque test possède une valeur booléenne qui indique s'il est implémenté par cet exercice.
Un fichier tests.toml a ce format :
# This is an auto-generated file.
#
# Regenerating this file via `configlet sync` will:
# - Recreate every `description` key/value pair
# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications
# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion)
# - Preserve any other key/value pair
#
# As user-added comments (using the # character) will be removed when this file
# is regenerated, comments can be added via a `comment` key.
[1e22cceb-c5e4-4562-9afe-aef07ad1eaf4]
description = "basic"
[79ae3889-a5c0-4b01-baf0-232d31180c08]
description = "lowercase words"
[ec7000a7-3931-4a17-890e-33ca2073a548]
description = "invalid input"
include = false
comment = "excluded because we don't want to add error handling to the exercise"
Dans ce cas, le parcours a choisi d'implémenter deux des trois tests disponibles.
Si un parcours utilise un générateur de tests pour générer la suite de tests d'un exercice, il doit utiliser le contenu du fichier tests.toml pour déterminer quels tests inclure dans la suite de tests générée.
Pour vérifier si des mises à jour de tests sont disponibles pour chaque fichier tests.toml d'exercice d'entraînement (en sortant avec un code de sortie non nul s'il existe au moins un cas de test qui apparaît dans les données canoniques de l'exercice, mais pas dans le tests.toml) :
configlet sync --tests
Pour mettre à jour le fichier tests.toml de chaque exercice d'entraînement de façon interactive, ajoute l'option --update :
configlet sync --tests --update
Pour chaque test manquant, cela demande à l'utilisateur de choisir de l'inclure, de l'exclure ou de le passer, puis met à jour le fichier tests.toml correspondant en conséquence.
Configlet écrit le fichier tests.toml d'un exercice lorsque l'utilisateur a terminé de faire ses choix pour cet exercice.
Cela signifie que tu peux interrompre configlet au niveau d'une invite (par exemple en appuyant sur Ctrl-C dans le terminal) et ne perdre les décisions de synchronisation que pour un seul exercice au maximum.
Pour inclure sans interaction tous les cas de test non encore vus, utilise --tests include.
Par exemple, pour le faire pour un exercice nommé prime-factors :
configlet sync --tests include -u -e prime-factors
N'oublie pas d'implémenter réellement ces tests sur le parcours !
Enfin, la commande sync gère aussi la « synchronisation » depuis une source qui n'est pas problem-specifications : le fichier config.json au niveau du parcours.
Chaque exercice d'apprentissage et chaque exercice d'entraînement doit avoir un fichier .meta/config.json avec un objet files qui précise les emplacements (relatifs) des fichiers que l'exercice utilise.
Ces chemins de fichiers suivent généralement un schéma simple, et configlet peut donc renseigner les valeurs au niveau de l'exercice à partir des motifs de la clé files du fichier config.json au niveau du parcours.
Pour vérifier que chaque exercice d'apprentissage et chaque exercice d'entraînement du parcours a une clé files entièrement renseignée (ou du moins une clé qui ne peut pas être renseignée à partir de la clé files au niveau du parcours) :
configlet sync --filepaths
(À noter que configlet lint produit aussi une erreur quand un exercice a une clé files manquante ou vide.)
Pour renseigner les valeurs vides ou manquantes de la clé files au niveau de l'exercice pour chaque exercice d'apprentissage et chaque exercice d'entraînement, à partir des motifs de la clé files au niveau du parcours :
configlet sync --filepaths --update
Pour le faire sans interaction et pour un seul exercice nommé prime-factors :
configlet sync --filepaths -uy -e prime-factors
sync quand tu ajoutes un nouvel exercice à un parcoursLa commande sync est utile quand tu ajoutes un nouvel exercice à un parcours.
Si tu ajoutes un exercice d'entraînement nommé foo qui existe dans problem-specifications, un workflow possible est le suivant :
foo dans le fichier config.json au niveau du parcours.
Cela rend l'exercice visible pour configlet sync.configlet sync --docs --filepaths --metadata -uy -e foo pour créer la documentation de l'exercice, ainsi qu'un fichier .meta/config.json de départ avec des valeurs files et blurb renseignées, et peut-être source et source_url..meta/config.json de l'exercice comme tu le souhaites.
Par exemple, ajoute-toi au tableau authors.configlet sync --tests include -u -e foo pour créer un fichier .meta/tests.toml avec tous les tests inclus..meta/tests.toml et ajoute include = false à tout cas de test que l'exercice n'implémentera pas..meta/tests.toml.