Universidad Técnica Federico Santa María

ELO-330 Programación de Sistemas

Proyecto Final

"Automaticación de Tareas GIT de Ayudantías ELO329-ELO330"

Contenidos:

  1. Resumen del Proyecto
  2. Descripción del Problema
  3. Propuesta de Solución del Problema
  4. Solución Generada
  5. Funcionamiento de la Solución Generada
  6. Resultados del Desarrollo del Proyecto
  7. Descargas
  8. Referencias

1.- Resumen del Proyecto:

El proyecto Automaticación de Tareas GIT de Ayudantías ELO329-ELO330 consiste en un script de python que permite al usuario enlistar proyectos, clonar repositorios, verificar rótulos en proyectos o crear usuarios en el repositorio GitLab del Departamento de Electrónica de la Universidad Técnica Federico Santa María.

2.- Descripción del Problema:

En la actualidad, los ayudantes de las asignaturas Programación Orientada a Objetos (ELO329) y Programación de Sistemas (ELO330) deben realizar diversas operaciones de gestión con el repositorio GitLab del departamento de electrónica, tales como generar nuevos usuarios, revisar commits en repositorios, descargar proyectos y otras, con el fin de verificar que los alumnos de dichas asignaturas muestran un nivel apropiado en el uso de dicha herramienta.

Sin embargo, al realizarse todas estas operaciones en una página web mediante el uso de formularios e interfaces gráficas, completar estas labores puede resultar algo tedioso y demandar más tiempo del esperado, el cual podría destinarse a evaluar otros aspectos de la tareas de los alumnos.

3.- Propuesta de Solución del Problema:

Para resolver este dilema, se propone la redacción de un programa que permita realizar las operaciones mencionadas vía una linea de comandos y que sea capaz de agrupar las labores iterativas en un proceso de una sola ejecución.

4.- Solución Generada:

La solución generada corresponde a un script de programación redactado en lenguaje python, llamado git_elo_usm_manager.py el cual sigue un paradigma de programación imperativa y hace un uso intensivo del módulo python-gitlab, el cuál es un módulo que se encarga de enmascarar requerimientos GET, POST, REQUEST y otros propios del protocolo http con el uso de la API de gitlab para http, lo que permite la interacción más transparente y directa con este tipo de servidor para subir o extraer datos de proyectos y usuarios.

Además, también se hace gran uso de hebras para tener procedimientos ejecutándose concurrentemente. El enfoque principal utilizado para generar hebras nuevas es el de asignar una hebra a cada requerimiento realizado por el cliente al servidor. Es decir, si deseo crear 3 usuarios, en vez de realizar 3 requerimientos iterativos de creación de usuario, se crean 3 hebras realizando los requerimientos de forma concurrente.

5.- Funcionamiento de la Solución Generada:

El script generado posee 4 modos de funcionamiento: check, clone, create y list. El modo de ejecución se determina al iniciar el programa y debe ser señalado explicitamente como argumento del script, anteponiendo a ellos dos guiones (--). Además, cada uno de los modos de operación tienen argumentos diferentes, necesario para llevar a cabo su ejecución.

En la tabla a continuación se muestran las formas de llamar al script para llevar a cabo los distintos modos de operación:

Operación a Ejecutar Sintaxis de Llamada del Script
Verificar Presencia de Rótulo en Proyecto ~$ ./git_elo_usm_manager.py --check Project_List_File tag_to_search
Descargar Proyectos Enlistados en Archivo txt ~$ ./git_elo_usm_manager.py --clone Project_List_File
Crear usuarios desde archivo csv ~$ ./git_elo_usm_manager.py --create New_User_List_File
Enlistar proyectos de GitLab de Electrónica ~$ ./git_elo_usm_manager.py --list [Search_in_Projects_Text]
Ver menú de ayuda ~$ ./git_elo_usm_manager.py -h

Modo Check

El modo check se encarga de verificar en cada uno de los proyectos cuyos nombres están contenidos en el archivo Project_List_File la presencia del rótulo/tag Tag_To_Search. Se crea una hebra por cada proyecto a consultar y se lleva a cabo la función de verificación en cada una de ellas, indicando por pantalla la presencia o no del rótulo.

Se muestra un ejemplo del llamado de este módo y su resultado.

Cabe señalar que el contenido del archivo example.txt es el siguiente:

Modo Clone

El modo clone se encarga de generar una copia en la carpeta local de cada uno de los proyectos cuyos nombres estan contenidos en el archivo Project_List_File, tomando como referencia el último commit realizado en el repositorio. Cabe indicar que se crea una hebra por cada proyecto a almacenar y que todos los datos de un proyecto se almacenan en una carpeta con el nombre de éste.

Se muestra un ejemplo del llamado de este módo y su resultado. Primero se muestra el estado inicial de la carpeta local, luego la ejecución y resultado del comando y finalmente el estado final de la carpeta.

Modo Create

El modo create toma el archivo csv New_User_List_File, analiza cada fila y con los datos contenidos allí genera un nuevo usuario de Git. Cada fila contiene primero el apellido paterno del nuevo usuario, luego su apellido materno, sus nombres y finalmente el correo a utilizar. Para asegurar unicidad en los nuevos usuarios y tomando en mente que solo deberían existir usuarios con correo sansano u otra variante institucional, el nombre de usuario a asignar corresponde al encabezado del correo que antecede al carácter arroba.

Cada requerimiento de creación de usuario se ejecuta en un hilo diferente.

Se muestra un ejemplo del llamado de este modo y su resultado. Primero se muestra el formato que tiene el archivo csv, luego el estado inicial del repositorio, la ejecución y resultado del comando y finalmente el estado final del Git de Electrónica.

Modo List

El modo list se encarga de recuperar todos los nombres de los proyectos que se encuentran en el Git de Electrónica. Esta operación se ejecuta en requerimientos secuenciales, pero que son controlados por el objeto Project.Manager, por lo que solo se ejecuta el proceso en una sola hebra. El resultado de este modo de operación es almacenado en el archivo example.txt del directorio local, él que es creado o reemplazado dependiendo de cual sea el caso.

Se muestra a continuación un ejemplo de la ejecución del modo list y su resultado. Además, se muestra el archivo example.txt resultante.

Además, este modo cuenta con la opción de entregar un parámetro extra, que corresponde a un "filtrado" de los resultados, entregando sólo proyectos que contengan el texto contenido en el argumento Search_in_Projects_Text dentro de su nombre. Se muestra a continuación la ejecución de esta versión de operación.

6.- Resultados del Desarrollo del Proyecto:

Concluido el desarrollo del proyecto Automaticación de Tareas GIT de Ayudantías ELO329-ELO330, se obtiene un script que desarrolla de forma rudimentaria las cuatro operaciones planteadas como objetivo, resultando en éxito el proyecto.

Además, se logra una introducción parcial al lenguaje de programación python, entendiendo sus distintos paradigmas de programación, la estructura de sus programas y la forma de trabajar con variables, funciones y estructuras de datos, lo que resulta de especial provecho para el programador, ya que python cada vez adquiere mayor relevancia en el ámbito de desarrollo de software.

Por último, se logra aplicar conocimientos adquiridos en la asignatura de Programación de Sistemas al ser capaz de estudiar y comprender librerias de software, entender e identificar el modelo cliente-servidor y aplicar e implementar hebras en un programa con operaciones concurrentes.

7.- Descargas

El código fuente del proyecto se puede encontrar en la siguiente sección: Código Fuente.

La presentación expuesta en clases se puede encontrar en la siguiente sección: Presentación.

8.- Referencias

Documentación de python-gitlab


Developed by Jesús Márquez Barrera