He dejado la Integración Continua con GitHub Actions
porque es la única con la que me aseguro de tener siempre la última versión del contenedor que contiene el entorno para ejecutar los tests. Además, me ahorro de estar haciendo builds innecesarios, solo se hacen los builds y push de la imagen del Dockerfile
cada vez que hay un commit que edita el mismo o el package.json
.
Los workflows implementados son los siguientes:
- linters. Para checkear que la sintaxis y el estilo de todo el código implementado en TypeScript y que los Dockerfiles son correctos.
- check-ortography. Para comprobar que no se han producido ninguna falta de ortografía en este fichero que estás leyendo ahora mismo.
- dockerci. Detecta si hay cambios en el Dockerfile y si los hay, lo construye y actualiza la imagen del contenedor de GHCR. Después ejecuta el contenedor (que a su vez ejecuta los tests) para comprobar que el código funciona correctamente.
Travis
lo he configurado para poder probar si la aplicación se puede ejecutar en distintas versiones de node
y de forma paralela para ahorrar tiempo de espera. Las versiones en las que funciona la aplicación son las que aparecen en el fichero de configuración de Travis
. Dicho fichero se encuentra aquí.
No he puesto ninguna configuración para usar caché, ya que se supone que viene activado por defecto para npm
. Checkear aquí.
Además también probé con Travis
si la aplicación funcionaba en distintos Sistemas Operativos además de en Linux (osx
y Windows
), pero tardaba 4 minutos y los quité. La siguiente imagen demuestra que he probado los SOs.
CircleCI
lo he usado para poder ejecutar los tests unitarios y de cobertura de forma rápida. Tengo que decir que había probado Shippable
antes que este por ser no solo un servicio de CI, sino una herramienta de DevOps que permite el CD a varias plataformas, lo cuál sería útil para el futuro. Además puede recoger el report de los tests de cobertura, pero tardaba 2 minutos en ejecutar los tests y pensé que es demasiado. Además, Shippable
usa versiones no tan actualizadas de node
como CircleCI
. Este último es muy rápido, suele tardar únicamente 20 segundos en ejecutar los tests unitarios, los tests de cobertura y de subir los resultados a codecov
. El fichero de configuración se encuentra aquí.
Se puede ver en el fichero de configuración de CircleCI que se está usando caché para los node_modules
.
Para poder ejecutar los tests de cobertura y hacer un reportar los resultados hacia codecov
se han añadido nuevas tareas al task runner:
npm run coverage
npm run coverage-report
Además de otra tarea para generar la documentación (aunque esto no sirva para CI)
npm run doc
En el proyecto se han hecho los siguientes cambios:
- Se han añadido las interfaces que representan los prototipos de los objetos JSON que devolverán las clases. Las interfaces son las siguientes
- Se ha documentado todo el código usando el estándar de comentarios
tsdoc
y se puede generar la documentación conTypeDoc
. Además de las interfaces de arriba, se han documentado las clases. - Se ha quitado TypeORM de la definición de las clases, para separar la lógica de negocio del almacenamiento. Por tanto se han privatizado las variables y se han añadido los getters y setters necesarios.
- Se han añadido los métodos toJSON a todas las clases, que devuelven objetos JSON con la estructura de las interfaces antes mencionadas. Esto se ha hecho así porque se va a implementar próximamente la API REST, que trabaja enviando objetos JSON a través de HTTP. Posteriormente se han testado.
- Se ha cambiado la orden
npm install
del Dockerfile anpm ci
porque es más rápida instalando las dependencias.
Enlaces a las clases y sus tests:
Clase | Definición | Tests |
---|---|---|
Usuario | usuario.model.ts | usuario.test.ts |
Partido | partido.model.ts | partido.test.ts |
Jugada | jugada.model.ts | jugada.test.ts |