Configlet

Las especificaciones canónicas de todo lo que hay en Exercism


configlet es una herramienta que ayuda a los mantenedores de un track con el mantenimiento de su track.

Linting

La función principal de configlet es hacer linting: comprobar si los archivos (de configuración) de un track están estructurados correctamente, tanto sintáctica como semánticamente. Los tracks mal configurados pueden no sincronizarse correctamente, verse mal en el sitio web o dar una experiencia de usuario poco óptima, así que las comprobaciones de configlet cumplen un papel importante para mantener la integridad de Exercism. La lista completa de reglas que verifica el linter la puedes encontrar aquí.

Generación de documentos

La función secundaria de configlet es generar documentos. Hay dos tipos de documentos que configlet puede generar:

  1. El archivo introduction.md de un Ejercicio de concepto.
  2. El archivo instructions.md de un Ejercicio de práctica.

Cómo se generan estos documentos lo puedes encontrar aquí.

Sincronización de los datos de los ejercicios con el repo problem-specifications

La función terciaria de configlet es proporcionar varios datos para los ejercicios de práctica.

Un Ejercicio de práctica en un track de Exercism a menudo se implementa a partir de una especificación del repo exercism/problem-specifications.

Exercism exige deliberadamente que cada ejercicio tenga su propia copia de ciertos archivos (como .docs/instructions.md), incluso cuando ese ejercicio existe en problem-specifications. Por eso configlet tiene un comando sync, que puede comprobar que esos Ejercicios de práctica de un track estén sincronizados con esa fuente original, y puede actualizarlos cuando haya actualizaciones disponibles.

Hay tres tipos de datos que se pueden actualizar desde problem-specifications: documentación, metadatos y tests. También hay un tipo de datos que se puede rellenar desde el archivo config.json del track: las rutas de archivos en los archivos de configuración de los ejercicios.

Ten en cuenta que en las versiones 4.0.0-alpha.34 y anteriores de configlet, el comando sync operaba solo sobre los tests.

Para llevar un registro de qué tests están implementados para un ejercicio de práctica específico, el ejercicio debe contener un archivo .meta/tests.toml. Los tests de este archivo se identifican por su UUID y cada test tiene un valor booleano que indica si ese ejercicio lo implementa.

Puedes encontrar los detalles sobre cómo sincronizar las diferentes partes de un ejercicio aquí.

Creación de archivos

Configlet se puede usar para generar rápidamente los archivos de un nuevo enfoque, artículo o ejercicio.

Puedes aprender más sobre cómo crear estos archivos aquí.

Generación de UUID

Los ejercicios, los tracks y los conceptos se identifican por un UUID.

Cómo generar UUID lo puedes encontrar aquí.

Formato

Configlet tiene un comando fmt que ayuda a que los archivos JSON del repo del track tengan un formato consistente. El comando fmt da formato a los siguientes archivos:

  • config.json
  • exercises/{concept,practice}/*/.approaches/config.json
  • exercises/{concept,practice}/*/.articles/config.json
  • exercises/{concept,practice}/*/.meta/config.json

Puedes aprender más sobre el comando de formato aquí.

Instalación

configlet se distribuye como un binario independiente. Cada track debería tener un script bin/fetch-configlet, y podría tener también un script bin/fetch-configlet.ps1. El primero es un script de bash, y el segundo es un script de PowerShell.

Ejecutar uno de estos scripts descarga la última versión de configlet al directorio bin. Después puedes usar configlet ejecutando bin/configlet o bin/configlet.exe, respectivamente.

CI

Todos los tracks deberían integrar la funcionalidad de linting de configlet en su configuración de CI. La forma más fácil de hacerlo es usar la GitHub action de CI de configlet.