Gestión de Código Fuente e Integración Continua 22-23
De Wiki de EGC
Revisión del 16:28 9 oct 2022 de Ajramirez (discusión | contribuciones)
Página_Principal -> 2022/2023 -> Prácticas - 22/23
Prerrequisitos
- Ver video de presentación aquí: aquí
- Configuraciones Previas
- Cómo mostrar la rama de Git en el promt de Bash
Puedes utilizar este repositorio para basarte: Repo con Actions
Uso de Git
Ejercicio 1. git branch -d
Para preparar el entorno de decide en vuestro GitHub, es recomendable limpiar el proyecto quedarnos únicamente con las ramas relevantes para el desarrollo.
- Visualiza las ramas desde tu repositorio local. ¿Cómo mostramos las ramas que están en el repositorio remoto (GitHub)?.
- Borra una rama diferente a la de master y comprueba que se ha borrado en GitHub.
- Haz lo mismo con todas las ramas que no creas útiles. Puedes automatizar esta tarea haciendo uso de instrucciones de Linux como
grep
,cut
oxargs
Ejercicio 2. git rebase y git merge
- Trabajando en local, crea una rama con el objetivo de desarrollar alguna nueva funcionalidad. Haz algunos commits ahí.
- Muevete a la rama master y haz algún commit más.
- Ahora quieres subir los cambios al servidor remoto con push, pero no te interesa que la rama que has creado exista en el remoto, ya que era algo local tuyo. ¿Qué consideras más oportuno antes de hacer un push? ¿Rebase ó Merge hacia master?
- ¿Qué diferencias habría en la rama master?
Ejercicio 3. git cherry-pick
- Trabajando en local, crea una rama y haz varios commits.
- Vuelve a la rama master.
- De todos los commits que has hecho en la rama anterior, sólo te interesa uno o dos de ellos, pero no la rama entera, ¿cómo puedes traerte esos cambios a la rama master?
- ¿Crees que es buena práctica usarlo?
Ejercicio 4. git reset
- Trabajando en local, haz varios commits sobre la rama master pero no lo subas al servidor remoto.
- Suponiendo que los cambios de código que has hecho están bien, pero que los commits y sus mensaje no te parecen tan correctos, ¿cómo deshacemos esos commits sin perder el código fuente?
- Y, si quieres desahacer también los cambios hechos en el código, ¿cómo podemos hacerlo?
- ¿Podemos hacer esto con commits que hayan sido enviados al servidor remoto? ¿Por qué? ¿Qué habría que hacer entonces si quiere revertir cambios en el servidor remoto?
Más ejercicios de Git aquí
Uso de Github Actions
Revisa antes los Conceptos básicos para poder usar Github Actions. Puedes utilizar este repositorio para basarte: Repo con Actions
Ejercicio 5. CI/CD de decide
Siguiendo estas instrucciones:
- Revisa que al hacer push se lanza el worflow de integración continua de decide.
- Crea una rama donde reduciremos la carga de tests. Comentaremos los tests de mixnet y el test_complete_voting del módulo Voting.
- Crea un pull-request siguiendo estas instrucciones (Fíjate bien que la pull request la haces a la rama
master
de tu repositorio y no a otro repositorio ni aEGCETSI/decide
). - Si abres la pull request que se ha creado, podrás observar abajo cómo se ejecuta el workflow de Github Actions con la pull request.
- ¿Es exitoso o fallido? ¿Por qué?
Ejercicio 6. Matriz con diferentes versiones de python
Siguiendo estas instrucciones:
- Configura el workflow para que lanze las pruebas en varias versiones de Python y Django.
- ¿Cuántos jobs se están lanzando?
Ejercicio 7. Badges de workflows
Siguiendo estas instrucciones
- Configura el README.md de tu proyecto para que muestre una imagen con el estado de la construcción.
Ejercicio 8. Reutilización de workflows y creación de releases
Siguiendo estas instrucciones:
- Crea un nuevo workflow con una etapa de buildTest, (que invoque al workflow django.yml) y otro job de release.
- Haga que este workflow se dispare sólo cuando se cree un tag.
- Haga que el workflow django.yml sea "invocable" requiriendo el parámetro de secrets CODACY_PROJECT_TOKEN.
- Cree un tag.
- ¿Cuántos workflows se disparan?
- ¿Cuántos jobs se ejecutan del nuevo workflow?
- ¿Se crea correctamente la release? ¿Por qué?
Uso de Codacy
Ejercicio 9. Calidad de código
- Analiza el reporte de Codacy para el proyecto.
- ¿Crees que el estado de los problemas (Issues), cobertura y duplicidad de decide son importantes?
- Siguiendo estas instrucciones configura el README.md de tu proyecto para que muestre el estado de la calidad del proyecto y su análisis de cobertura de tests.