Documento del proyecto - pringa-uvlhub/uvlhub GitHub Wiki

Documento del Proyecto pringa-hub


Información del proyecto

  • Grupo: 1
  • Curso escolar: 2024/2025
  • Asignatura: Evolución y Gestión de la Configuración

Miembros del equipo

Nombre y Apellidos Implicación
Daniel Diañez Suárez 10
Pablo Díaz Ordóñez 10
María Escalante Ramos 10
Jesús Fernández Rodríguez 10
Javier García Rodríguez 10
Miguel González Ortiz 10
Francisco Mateos Villarejo 10
Javier Nieto Vicioso 10
Manuel Palacios Pineda 10
Miguel Palomo García 10
Luis Javier Periáñez Franco 10

Enlaces de interés


Apartados del documento

Indicadores del proyecto

  • Aquí se pueden ver los commits y LoC de cada usuario:Contribuiciones de todos los usuarios
  • La responsabilidad de añadir los tests e issues pertenece a cada miembro. Se pueden ver en este enlace
    • Si queremos ver issues, pasaríamos el filtro de assignee.
  • Las horas han sido añadidas mediante una estimación entre todos los miembros.
Miembro del equipo Horas (HH) Commits (XX) LoC (YY) Test (ZZ) Issues (II) Work Item
Diañez Suárez, Daniel 60 17 462 8 6 Remember my password
Díaz Ordóñez, Pablo 60 17 421 6 6 Bot Integration
Escalante Ramos, María 60 24 761 15 6 Advanced filtering
Fernández Rodríguez, Jesús 70 62 3144 32 21 Staging area
García Rodríguez, Javier 62 27 1264 6 11 View user profile
González Ortiz, Miguel 64 34 1498 19 12 Rate datasets
Mateos Villarejo, Francisco 62 22 1125 7 7 Dashboard
Nieto Vicioso, Javier 63 32 1204 13 9 Signup validation
Palacios Pineda, Manuel 60 13 835 5 3 Improve UI
Palomo García, Miguel 61 24 1642 9 14 Build my datasets
Periáñez Franco, Luis Javier 65 31 1590 29 11 Create communities
TOTAL 683 303 13946 149 103

Detalles de los indicadores

  • Horas: número de horas empleadas en el proyecto.
  • Commits: solo contar los commits hechos por miembros del equipo, no los commits previos.
  • LoC (líneas de código): solo contar las líneas producidas por el equipo y no las que ya existían o las que se producen al incluir código de terceros.
  • Test: solo contar los test realizados por el equipo nuevos.
  • Issues: solo contar las issues gestionadas dentro del proyecto y que hayan sido gestionadas por el equipo.
  • Work Item: principal WI del que se ha hecho cargo el miembro del proyecto.

Integración con otros equipos

El proyecto está desarrollado por 2 grupos, pringa-hub-1 y pringa-hub-2.


Resumen ejecutivo

Pringa-hub es una plataforma para la gestión e interacción de datos comunitarios, desarrollada con prácticas modernas y eficientes. Este documento resume los aspectos clave del proyecto, incluyendo metodologías, políticas de equipo, flujos operativos, entorno de desarrollo y pruebas.

Se adoptó una metodología ágil para permitir entregas iterativas, con gestión de tareas a través de GitHub Projects. Esto facilitó el seguimiento y la adaptación al cambio, mejorando constantemente el producto y el proceso de desarrollo.

Se desarrollaron políticas de ramas, commits, issues y pull requests que permitieron un correcto desarrollo durante todo el proyecto, con algunos cambios que mejorase el mismo.

El flujo de trabajo incluyó planificación, desarrollo, pruebas, revisión y despliegue automatizado mediante GitHub Actions. Las pruebas abarcaban unitarias, de integración, funcionales y de carga, utilizando herramientas como pytest, Selenium y Locust.

El entorno de trabajo se basó en Visual Studio Code con extensiones para Python y Docker, y MariaDB para la gestión de bases de datos. Se usaron Docker y Vagrant para asegurar configuraciones consistentes en todos los entornos de desarrollo.

Se ofrecieron tres métodos de instalación: manual, mediante Vagrant, y Docker.

Se implementaron pruebas en varios niveles para asegurar la calidad del proyecto. Las pruebas unitarias validaron módulos, las pruebas funcionales con Selenium validaron la interfaz, y las pruebas de carga con Locust evaluaron el rendimiento.

En resumen, PringaHub ha sido un proyecto de desarrollo ágil y colaborativo, utilizando herramientas modernas para optimizar la gestión de código y la automatización de tareas, lo que prepara al equipo para desafíos tecnológicos futuros.


Descripción del Sistema

Visión General

El sistema desarrollado, denominado UVLHub, tiene como objetivo principal proporcionar un repositorio accesible y eficiente para la gestión, creación y exploración de modelos de características en formato UVL (User-Variable Language). Este sistema está diseñado para soportar una amplia gama de funcionalidades, desde la visualización de perfiles de usuario hasta la integración con herramientas externas para la exportación de datos.

Basado en una arquitectura moderna y modular, UVLHub combina tecnologías web avanzadas y APIs REST, garantizando así una alta escalabilidad, flexibilidad y facilidad de mantenimiento. El sistema está orientado a satisfacer las necesidades de diversos tipos de usuarios, incluidos investigadores, desarrolladores y analistas de datos, facilitando la colaboración y el intercambio de conocimientos dentro de la comunidad.


Funcionalidades

Originalmente, el sistema entregado sin las propuestas de work items realizados contaba con esta arquitectura:

Diagrama de Módulos

UVLHub ofrece un conjunto robusto de funcionalidades que permiten a los usuarios gestionar y explorar modelos de características de manera eficiente. A continuación, se detallan las principales funcionalidades del sistema:

1. Visualización de Perfiles de Usuario

  • Perfiles Personalizados: Cada usuario dispone de un perfil donde se almacena información personal, como nombre, afiliación, ORCID (si aplica) y una lista de sus datasets.
  • Interacción Social: Los usuarios pueden explorar los perfiles de otros miembros de la comunidad, facilitando la colaboración y el intercambio de conocimientos.

2. Creación y Gestión de Comunidades

  • Comunidades Temáticas: Los usuarios pueden crear o unirse a comunidades enfocadas en áreas específicas, como análisis financiero, investigación científica o desarrollo de software.

3. Filtrado Avanzado de Datasets

  • Filtros por Características y Productos: Búsquedas detalladas utilizando filtros como el número de características (features) y productos derivados (models_uvl).
  • Filtros Adicionales: Filtros basados en el tamaño del archivo, tipo de contenido y fecha de creación, optimizando la precisión de los resultados.

4. Construcción de Datasets

  • Generación de Datasets Personalizados: Los usuarios pueden crear datasets a partir de modelos UVL seleccionados, permitiendo una personalización flexible y eficiente.
  • Organización y Documentación: Los datasets generados se organizan automáticamente, facilitando su catalogación y búsqueda dentro de la plataforma.

5. Valoración de Datasets

  • Sistema de Valoración: Los usuarios pueden valorar y comentar los datasets, permitiendo una retroalimentación colaborativa y la identificación de datasets de alta calidad.
  • Métricas de Calidad: Se muestran estadísticas basadas en las valoraciones, facilitando la identificación de datasets más relevantes y fiables.

6. Staging Area (Área de Preparación)

  • Validación de Datos Antes de Subida: Los datasets se someten a una fase de preparación previa donde se verifica su estructura y contenido antes de ser publicados.
  • Corrección de Errores: Los usuarios reciben notificaciones detalladas si se detectan problemas, permitiendo realizar ajustes y mejoras antes de la publicación definitiva.

7. Validación por Correo de Registro de Usuarios

  • Registro Seguro: Los usuarios deben validar su cuenta a través de un enlace enviado por correo electrónico, asegurando la autenticidad y seguridad de los registros en la plataforma.
  • Notificaciones de Estado: Se envían correos de confirmación para completar el proceso de registro y proporcionar detalles adicionales.

8. Recuperación de Contraseñas

  • Proceso Seguro: Los usuarios pueden restablecer contraseñas mediante un enlace de recuperación enviado por correo electrónico.

9. Análisis Automatizado de Modelos de Características (AAFM)

  • Validación y Análisis Estructural: UVLHub analiza automáticamente los modelos cargados evaluando su validez, características y productos derivados mediante herramientas como Flamapy.

10. Integración con APIs REST

  • Extensión de Funcionalidades: La API REST permite la integración con servicios externos, facilitando el acceso a datos y modelos para desarrolladores.

11. Panel de Control (Dashboard)

  • Estadísticas y Métricas: Proporciona una visión general de estadísticas clave. Aplica para el administrador, o para un usuario, siempre y cuando ha publicadao datasets.

12. Integración de Bots

  • Automatización y Comunicación: UVLHub integra un bot conectado a plataformas como Discord.

13. Mejora de la Interfaz de Usuario

  • Experiencia Optimizada: Se implementan mejoras en el diseño y la usabilidad de la plataforma, garantizando una navegación más intuitiva y eficiente para los usuarios.
  • Componentes Interactivos: Nuevos elementos visuales y funcionalidades interactivas que facilitan el uso de las herramientas.

Arquitectura del Sistema

UVLHub está construido sobre una arquitectura cliente-servidor robusta y modular. A continuación, se detalla su estructura:

Arquitectura del Sistema

1. Cliente (Frontend)

  • Tecnologías Utilizadas: HTML, CSS y JavaScript con frameworks como Bootstrap.
  • Interactividad y Experiencia de Usuario: Interfaz intuitiva y fácil de navegar.

2. Servidor (Backend)

  • Framework Flask: Desarrollado con Flask, un framework flexible en Python.
  • Gestión de Datos con SQLAlchemy: Capa de persistencia con MariaDB.

3. Servicios Principales

  • Almacenamiento Local: Gestión de almacenamiento y validación de modelos.
  • Servicio de Persistencia Zenodo: Sincronización con Zenodo para la asignación de DOI.
  • Análisis Automatizado (AAFM): Herramientas como Flamapy para análisis estructurales.
  • API REST Interna: Facilitación de acceso programático.

4. Base de Datos

  • MariaDB: Base de datos relacional para almacenar información adicional de los modelos UVL.

5. Herramientas de Desarrollo y Despliegue

  • Docker: Creación de contenedores consistentes.
  • GitHub Actions: Automatización de CI/CD.
  • Vagrant: Entornos de desarrollo homogéneos.

6. Seguridad y Autenticación

  • Flask-Login y Flask-Mail: Gestión segura de autenticación y recuperación de contraseñas.
  • Cifrado y Protección de Datos: Protección de datos con mecanismos de cifrado.

Relación con Subsistemas

UVLHub interactúa con varios subsistemas externos e internos:

  • Zenodo: Almacenamiento externo con asignación de DOI.
  • Flamapy: Herramientas avanzadas de análisis de modelos UVL.
  • Docker: Gestión de entornos consistentes.
  • GitHub Actions: Automatización de integración y despliegue.
  • Vagrant: Reproducibilidad de entornos de desarrollo.
  • Discord (Bot): Automatización y comunicación en la comunidad.

Cambios Desarrollados

Pringa-hub-1

  • View User Profile: Visualización de perfiles de usuarios.
  • Build My Datasets: Creación de datasets personalizados.
  • Rate My Datasets: Valoración y comentarios de datasets.
  • Staging Area: Preparación previa a la publicación de datasets.
  • Create Communities: Gestión de comunidades temáticas.

Pringa-hub-2

  • Remember My Password: Mejora en la recuperación de contraseñas.
  • Signup Validation: Validación de registros mediante correo electrónico.
  • Improve UI: Optimización de la interfaz similar a GitHub.
  • Dashboard: Visualización de estadísticas y métricas.
  • Advanced Filtering: Filtros avanzados en las búsquedas.
  • Bot Integration: Automatización a través de un bot en Discord.

Revisión Técnica y Adaptación de Requisitos

UVLHub utiliza un conjunto robusto de dependencias y herramientas clave:

  • Flask (3.0.3): Framework principal.
  • Flask-RESTful, Flask-SQLAlchemy: APIs REST y gestión de base de datos.
  • Flask-Login, Flask-Mail: Autenticación y recuperación de contraseñas.
  • Alembic, Flake8, Pytest: Gestión de migraciones, análisis de código y pruebas.
  • Flamapy: Análisis y validación de modelos UVL.
  • Docker, Vagrant, GitHub Actions: Consistencia, automatización y despliegue.

Conclusión

UVLHub representa una solución integral para la gestión y exploración de modelos UVL, ofreciendo funcionalidades avanzadas, una arquitectura escalable y prácticas modernas de desarrollo. Con módulos como la gestión de comunidades, análisis automatizado de modelos y la integración con servicios como Zenodo y Discord, UVLHub facilita la colaboración, el análisis y el intercambio eficiente de datos.


Visión Global del Proceso de Desarrollo

Metodología

El desarrollo del proyecto se basa en una metodología ágil, la cual garantiza flexibilidad, entrega iterativa y colaboración continua entre los miembros del equipo. Este enfoque facilita la adaptación a cambios de requisitos y asegura que los objetivos se cumplan dentro de los plazos definidos, manteniendo altos estándares de calidad.

El ciclo de desarrollo está estructurado en hitos (M1, M2, M3), donde cada milestone representa una fase específica con objetivos claros. Las funcionalidades a implementar se desglosan en Work Items (WI), pequeñas tareas manejables que permiten organizar y distribuir el trabajo de manera eficiente.

Para la gestión del flujo de trabajo, se utiliza GitHub Projects, organizando los Work Items en columnas como:

  • To Do: Tareas pendientes.
  • In Progress: Trabajo en desarrollo.
  • Done: Tareas finalizadas.

Políticas de Trabajo del Equipo

Para asegurar la calidad del proyecto y la cohesión del equipo, se establecen políticas concretas en torno a ramas, commits, pull requests e issues.


Política de Ramas

La estrategia adoptada es la siguiente:

  • Ramas principales:

  • main o master: Rama principal lista para producción.

  • develop: Última versión en desarrollo para la próxima release.

  • Ramas auxiliares:

  • feature: Para nuevas funcionalidades (creadas a partir de develop).

  • fix: Para corregir bugs (creadas a partir de develop).

  • configuration: Para implementar cambios en la configuración del repositorio (creadas a partir de develop).

  • test: Para implementar las pruebas asociadas a cada WI (creadas a partir de develop).


Política de Commits

  • Buenas prácticas:

    • Contenido en inglés
    • Mensajes descriptivos, atómicos, cohesivos y coherentes.
    • Título limitado a 50 caracteres (excluyendo el 'tipo').
  • Estructura de un commit:

  • type puede ser:

    • Feat: Nuevas funcionalidades o cambios menores.
    • Test: Pruebas en la aplicación.
    • Fix: Solución de errores.
    • Config: Cambios en la configuracion del proyecto.
    • Docs: Adición o actualización de documentación.
    • Migrations: Para los commits automáticos en develop relacionados con las migraciones.
  • Cuerpo del mensaje: Párrafo explicativo siguiendo las reglas descritas.

Ejemplo:

Test: Testing form and dataset validation works

Política de issues/incidencias

Antes de comenzar a desarrollar cualquier característica de la aplicación, se debe crear una issue correspondiente. Estas podrán ser creadas por cualquier miembro del equipo, idealmente al inicio del milestone, pero se podrán añadir posteriormente también. Por cada característica/arreglo a implementar se creará una issue asignada al miembro/s del equipo que la vaya a desarrollar.

  • Tipos de issues:
  • WI - Feature: Funcionalidad asociada al WI.
  • WI - Test: Testeo de las funciones del WI.
  • FEAT: Incorporación de nuevas funcionalidades o elementos visuales en la aplicación, y sus tests asociados.
  • BUG: Problemas o bugs que afectan el funcionamiento normal de aplicación.
  • CONFIG: Para configuraciones del repositorio.
  • DOCS: Para temas relacionados con la documentación del proyecto.

La gestión se llevará a cabo mediante el tablón de tareas de GitHub, donde cada issue pasará por 4 estados:

  • Estados de las issues:
  1. ToDo: Tareas identificadas pero no iniciadas.
  2. In Progress: Tareas en desarrollo.
  3. In Review: Tareas resueltas listas para revisión.
  4. Done: Tareas completadas y verificadas.

Política de Pull Requests

Cada cambio en el código se somete a un proceso de revisión por pares antes de integrarse en las ramas principales. El proceso incluye:

  1. Solicitar revisión a un miembro del equipo.
  2. El revisor realiza comentarios o sugiere cambios.
  3. El autor implementa las modificaciones solicitadas.
  4. Si el revisor aprueba, la Pull Request se fusiona con la rama correspondiente.

Se han definido varios tipos de Pull Requests siguiendo el formato:
type/<Descripción>, donde type corresponde a los tipos definidos a continuación:

  • Feature: Para el desarrollo de la funcionalidad de los working items.
  • Fix: Para la corrección de bugs aparecidos durante el desarrollo del sistema.
  • Config: Destinadas a la configuración del proyecto, como workflows.
  • Test: Para el desarrollo de los tests asociados a cada work item.
  • Release: Destinada a crear la release del proyecto, de la rama develop a main.

Este sistema asegura que cada cambio sea revisado desde múltiples perspectivas, lo que reduce errores y mejora la calidad general del proyecto.

  • Revisión obligatoria por al menos un miembro del equipo.
  • Resolución de conflictos antes de fusionar.

Política de Código

Se garantizará la creación de un código limpio y mantenible, siguiendo el estándar de nomenclatura snake_case. Las funciones implementadas serán atómicas, cumpliendo con el principio de responsabilidad única al realizar una única tarea específica. El código incluirá comentarios claros y concisos únicamente donde sea necesario para facilitar su comprensión. Además, los nombres de las variables deberán ser descriptivos, precisos y coherentes con su propósito dentro del sistema.


Flujo de Trabajo

El ciclo de desarrollo para implementar una funcionalidad sigue los siguientes pasos:

  1. Planificación:

    • Creación de la issue, con las plantilla correspondiente.
    • Incorporación de las etiquetas correspondientes a la issue
    • En el project, pasar la issue a la columna In Progress.
  2. Desarrollo:

    • Creación de una rama feature** a partir de develop.
    • Implementación de la funcionalidad siguiendo las políticas establecidas.,
  3. Pruebas:

    • Pruebas unitarias: Validación de módulos individuales.
    • Pruebas de integración: Comprobación del correcto funcionamiento entre componentes.
    • Pruebas funcionales con Selenium: Garantizan la experiencia del usuario.
  4. Revisión y Fusión:

    • Creación de una Pull Request hacia develop.
    • Revisión por pares y resolución de conflictos.
    • Aprobación y fusión de la rama.
  5. Despliegue:

    • Los cambios fusionados en main activan automáticamente el proceso de CI/CD mediante workflows configurados en GitHub Actions, que automatizan el despliegue.

Ejemplo de Implementación

Funcionalidad: Datasets en comunidad

Creación de la issue
  • Se crea una issue con la plantilla, en este caso de tipo FEAT, en GitHub.
  • Se asignan las etiquetas correspondientes.
  • La issue se mueve a la columna To-Do en el project.
Desarrollo
  1. Creación de la rama
    Las ramas se crean desde GitHub, utilizando el formato establecido.
    Ejemplo: feature/datasets-on-communities.

  2. La issue se mueve a la columna In progress.

  3. Implementación de la lógica correspondiente.

Pruebas
  • Pruebas unitarias: Validan la lógica implementada.
  • Pruebas funcionales: Aseguran que el sistema responde correctamente en la interfaz.
Revisión y fusión
  • Se abre una Pull Request y otro miembro del equipo revisa el código.
  • Una vez aprobada, se fusiona en la rama develop.
Despliegue
  • El cambio se despliega a producción tras la release.

Entorno de desarrollo

En el desarrollo del proyecto, el equipo ha empleado diversas herramientas y configuraciones que aseguran un entorno de trabajo robusto, eficiente y reproducible. A continuación, se detallan los entornos de desarrollo utilizados, sus versiones, la configuración adoptada y los pasos necesarios para instalar tanto el sistema como los subsistemas relacionados. Además, se referencia el uso de distintas herramientas por los diversos miembros del grupo.

1. Herramientas Principales

IDE: Visual Studio Code

El entorno de desarrollo integrado (IDE) principal utilizado en este proyecto ha sido Visual Studio Code (VS Code). La elección de este IDE se debe a su rendimiento, su extensibilidad mediante plugins y su capacidad para integrarse con herramientas modernas de desarrollo.

  • Versión utilizada: Última versión estable de Visual Studio Code.

Extensiones clave utilizadas:

  1. Python: Proporciona soporte avanzado para desarrollo en Python, con funcionalidades como depuración, linting y formateo automático del código.
  2. Docker: Facilita la gestión de contenedores directamente desde el IDE, integrando herramientas esenciales para el desarrollo y las pruebas.
  3. flake8: Herramienta de linting para Python que asegura que el código sigue las normas PEP 8 y otras buenas prácticas de estilo.

Además, se configuraron tareas personalizadas dentro de VS Code para automatizar la ejecución de pruebas y la compilación del código, facilitando así el flujo de trabajo del equipo.

2. Base de Datos

El proyecto hace uso de dos bases de datos, seleccionadas según las etapas del desarrollo:

  • MariaDB: Utilizada tanto en el entorno de producción como en el entorno de desarrollo.
    Se eligió MariaDB por su robustez, escalabilidad y soporte para transacciones ACID, lo que garantiza integridad y fiabilidad en la gestión de datos.

3. Pruebas y Calidad del Código

Para garantizar la calidad del código y el correcto funcionamiento del sistema, el equipo implementó diversas herramientas y marcos de pruebas que abarcan todos los niveles de verificación:

  • Pruebas de Carga con Locust:
    Locust se utiliza para evaluar el rendimiento del sistema bajo condiciones de carga. Estas pruebas permiten identificar cuellos de botella y garantizar que la aplicación pueda manejar un alto volumen de usuarios concurrentes sin degradar su rendimiento.

  • Pruebas Unitarias e Integración con Pytest:
    El framework pytest es el principal para ejecutar pruebas unitarias e integración. Cada módulo del sistema tiene diseñadas pruebas unitarias que verifican su funcionalidad individual. Las pruebas de integración aseguran que los módulos interactúen correctamente entre sí.

  • Pruebas Funcionales con Rosemary Selenium:
    Se implementan pruebas automatizadas de la interfaz de usuario (UI) mediante Rosemary Selenium, simulando interacciones reales de los usuarios con la aplicación. Estas pruebas validan que los principales flujos de trabajo (como inicio de sesión o manipulación de datos) funcionen correctamente en los navegadores soportados.

4. Automatización del Flujo de Trabajo

La automatización juega un rol clave en el desarrollo del proyecto. Mediante GitHub Actions, se implementaron flujos de trabajo (workflows) que manejan tareas recurrentes y críticas:

  • Ejecución de pruebas unitarias e integración en cada commit.
  • Ejecución de migraciones
  • Release programada con pull request
  • Validación de formato de commits
  • Construcción y despliegue automático del sistema en los entornos de desarrollo y producción.
  • Análisis de calidad del código con herramientas como Codacy o Python Lint.

Estos workflows se ejecutan automáticamente al realizar cambios en las ramas principales (main y develop), proporcionando retroalimentación inmediata al equipo.

5. Vagrant

Vagrant es una herramienta utilizada para crear entornos virtualizados homogéneos. Este enfoque es particularmente útil para configurar entornos de desarrollo en sistemas operativos diferentes, asegurando que todos los desarrolladores trabajen en un entorno idéntico, independientemente de su plataforma local.

6. Docker

Docker es una plataforma que permite empaquetar aplicaciones y sus dependencias en contenedores, asegurando que se ejecuten de manera consistente en cualquier entorno. El uso de Docker garantiza que el entorno de desarrollo y prueba sea uniforme en todas las máquinas del equipo. Con Docker Compose, los desarrolladores pueden gestionar servicios como bases de datos, servidores web y aplicaciones de forma sencilla, lo que facilita la configuración inicial y evita conflictos entre entornos.

7. Instalación del entorno

Se han desarrollado 3 formas de instalar el proyecto para trabajar en él:

Instalación Manual

Para realizar la instalación manual del proyecto primero debemos clonarlo mediante ssh y acceder al repositorio.

[email protected]:pringa-uvlhub/uvlhub.git
cd uvlhub

Tras haber realizado estos pasos deberá de seguir los pasos de instalación dentro de la documentación oficial de uvlhub que podrá encontrar aquí.

Instalación a través de Vagrant

Para utilizar este método, es necesario tener Vagrant instalado previamente en su sistema.

Este enfoque automatiza el proceso de instalación mediante una máquina virtual gestionada a través de Vagrant y provisionada con Ansible. Para realizar la instalación utilizando Vagrant, debe asegurarse de que la tecnología esté instalada en su equipo. A continuación, se detallan los pasos a seguir para su instalación:

1. Actualizar la lista de paquetes

sudo apt update
sudo apt upgrade

2. Instalar Vagrant, Ansible y VirtualBox

sudo apt install vagrant ansible virtualbox
Si el paquete vagrant no está disponible tendrá que ser añadido manualmente el repositorio oficial y la clave GPG:
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt update && sudo apt install vagrant ansible virtualbox

Tras instalar Vagrant, deberá clonarse el repositorio mediante ssh, como se indicó en la instalación manual.

[email protected]:pringa-uvlhub/uvlhub.git
cd uvlhub

Una vez dentro del directorio, deberá copiar el archivo .env.vagrant.example al .env, y después deberá acceder al subdirectorio de Vagrant.

cp .env.vagrant.example .env
cd vagrant

Tras esto, ya podrá inicial la ejecución del entorno de Vagrant:

vagrant up

Si todo ha funcionado correctamente, debería ver la versión desplegada de uvlhub en desarrollo en:

http://localhost:5000

Para acceder a la máquina virtual para ejecutar operaciones, como los tests de rosemary, escriba en la terminal:

vagrant ssh

Si desea salir de la máquina virtual, escriba:

exit

Para comprobar el estado, parar o destruir la máquina virtual, puede ejecutar, de forma independiente cada uno de los siguientes:

Comprobar estado:

vagrant status

Detener la máquina virtual:

vagrant halt

Destruir la máquina virtual:

vagrant destroy

Instalación mediante Docker

Para esta instalación, es necesario tener instalado Docker en su sistema. Si no lo tiene, aquí se especifican todos los pasos.

  • Instalar todas las dependencias
pip install -r requirements.txt
  • Copiar las variables de entorno en nuestro sistema
cp .env.docker.example .env
  • Iniciar docker
sudo systemctl start docker     
sudo docker compose -f docker/docker-compose.dev.yml up -d
  • Parar MariaDB si está en uso
sudo systemctl stop mariadb 
sudo docker compose -f docker/docker-compose.dev.yml up -d
  • Ver el estado de Docker
docker ps 

Si entramos en la siguiente URL, debería aparecer el sistema funcionando:

localhost
  • Para pararlo
docker compose -f docker/docker-compose.dev.yml down -v
sudo systemctl start mariadb
docker compose -f docker/docker-compose.dev.yml up -d --build
  • Si no se ha parado docker, lanzamos este comando
sudo systemctl restart docker 
docker compose -f docker/docker-compose.dev.yml down

8. Ejecución de Pruebas

A continuación, se señalas las opciones de comandos disponibles para ejecutar los distintos tipos de pruebas:

  • Pruebas Unitarias:

rosemary test <módulo a testear>

  • Pruebas de Cobertura:

rosemary coverage <módulo a testear>

  • Pruebas de Selenium:

pytest app/modules/<módulo a testear>/tests/<nombre_test_selenium.py>

  • Pruebas de Carga:

rosemary locust <módulo a testear>


Ejercicio de propuesta de cambio

Funcionalidad: Mostrar datasets en comunidades

Objetivo: Añadir datasets publicados usuarios en las comunidades donde estén inscritos.

Pasos para Implementar el Cambio

1. Creación de la feature

  • Se crea una issue con la plantilla, en este caso FEAT, en GitHub.
  • Se asignan las etiquetas correspondientes.
  • La issue se mueve a la columna To-Do en el project.

2. Desarrollo

  • Creación de la rama: Se crea una rama desde GitHub utilizando el formato establecido.

    • Ejemplo: feature/datasets-on-communities.
  • La issue se mueve a la columna In Progress.

  • Implementación de la lógica:

    • Desarrollar toda la lógica funcional y hacer commits con el formato preestablecido y definido.
    • Desarrollo de sus tests asociados (pruebas unitarias, de interfaz, y de carga)
    • En caso de generar archivos de migración, estos no se subirán, debido a un workflow que lo automatiza.

3. Revisión y Fusión

  • Se abre una Pull Request para revisión del código. En este caso, de tipo Feature/<Descripción>.
  • Un miembro del equipo revisa el código, y una vez aprobado, se fusiona en la rama develop.

4. Despliegue

  • El cambio se despliega a producción tras la release.

Conclusiones y trabajo futuro

A lo largo de este proyecto, hemos alcanzado importantes conclusiones tanto a nivel técnico como de trabajo en equipo, lo que ha contribuido significativamente a nuestro crecimiento profesional.

En primer lugar, hemos aprendido que la colaboración efectiva es fundamental para el éxito de cualquier proyecto. Aunque el trabajo individual tiene su valor, las tareas complejas nos han enseñado que la planificación conjunta y la comunicación constante son esenciales para abordar problemas de manera eficiente y con la menor cantidad de imprevistos posibles. Nos enorgullece ver cómo, a través del trabajo en equipo, hemos logrado resolver desafíos y crear soluciones sólidas.

Desde el punto de vista técnico, hemos adquirido una comprensión más profunda sobre herramientas clave como Docker, Render y las soluciones de CI/CD. Si bien estas tecnologías han facilitado enormemente el proceso de despliegue y automatización, también hemos enfrentado obstáculos relacionados con la configuración y el mantenimiento, lo que nos ha permitido aprender de nuestros errores y mejorar nuestra capacidad para gestionar flujos de trabajo y entornos de desarrollo.

Una de las lecciones más valiosas ha sido la importancia de las pruebas automatizadas y la integración continua. Aunque al principio algunos de estos procesos parecían excesivamente complejos, ahora reconocemos su crucial papel en garantizar la fiabilidad y estabilidad del sistema a lo largo de su ciclo de vida.

Sin embargo, no todo ha sido perfecto. Hubo momentos en los que la planificación inicial no se ajustó a la realidad, y nos vimos obligados a realizar ajustes sobre la marcha. Este proceso de adaptación nos ha permitido entender mejor la importancia de la anticipación y la flexibilidad en la gestión de proyectos.

En resumen, aunque hemos logrado avanzar con éxito en muchos aspectos, también nos hemos enfrentado a desafíos que nos han enseñado a ser más cuidadosos con la planificación y más rigurosos con las pruebas. Este proyecto nos ha dejado valiosas lecciones que, sin duda, aplicaremos en futuros desarrollos, fortaleciendo tanto nuestras habilidades técnicas como nuestra capacidad para trabajar en equipo.