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
.
- Si queremos ver issues, pasaríamos el filtro de
- 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:
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:
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
omaster
: 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 dedevelop
). -
fix
: Para corregir bugs (creadas a partir dedevelop
). -
configuration
: Para implementar cambios en la configuración del repositorio (creadas a partir dedevelop
). -
test
: Para implementar las pruebas asociadas a cada WI (creadas a partir dedevelop
).
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').
- Contenido en
-
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:
ToDo
: Tareas identificadas pero no iniciadas.In Progress
: Tareas en desarrollo.In Review
: Tareas resueltas listas para revisión.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:
- Solicitar revisión a un miembro del equipo.
- El revisor realiza comentarios o sugiere cambios.
- El autor implementa las modificaciones solicitadas.
- 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
amain
.
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:
-
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
.
-
Desarrollo:
- Creación de una rama feature** a partir de
develop
. - Implementación de la funcionalidad siguiendo las políticas establecidas.,
- Creación de una rama feature** a partir de
-
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.
-
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.
- Creación de una Pull Request hacia
-
Despliegue:
- Los cambios fusionados en
main
activan automáticamente el proceso de CI/CD mediante workflows configurados en GitHub Actions, que automatizan el despliegue.
- Los cambios fusionados en
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
-
Creación de la rama
Las ramas se crean 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 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:
- Python: Proporciona soporte avanzado para desarrollo en Python, con funcionalidades como depuración, linting y formateo automático del código.
- Docker: Facilita la gestión de contenedores directamente desde el IDE, integrando herramientas esenciales para el desarrollo y las pruebas.
- 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
.
- Ejemplo:
-
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.