Flujo de trabajo con GitHub

De Wiki de EGC
Saltar a: navegación, buscar

Como ya hemos comentado en la asignatura, una forma muy habitual de trabajar con GitHub es por medio de pull requests. Las pull requests se crean desde una rama a otra del repositorio y permite decirle a otros qué cambios has hecho en un repositorio en GitHub. Una vez que un pull request se abre, puedes discutir y revisar los cambios potenciales con colaboradores y continuar haciendo commits antes de que los cambios se integren en el repositorio. Un escenario muy habitual donde se trabaja con pull requests es si se sigue un flujo de desarrollo del estilo de GitHub Flow.

Cuando se abre una pull request, Travis CI recibe una notificación de pull request de GitHub. Esta notificación se transforma en una nueva build. Durante la build se actualiza el estado de los commits a uno de los siguientes:

  • un warning porque aún se está construyendo
  • que la pull request se debe de integrar con cuidado porque la build falló
  • que la pull request se puede integrar sin problemas porque la build tuvo éxito

Travis CI inicia una build cuando se abre por primera vez una pull request y cuando se añaden commits a ella. Además, la prueba se realiza a partir de un merge de la rama con la feature y la rama master, no únicamente de la rama con la feature.

Ejercicio

  1. Vamos a añadir una nueva característica a nuestra aplicación que permita decir hola en distintos idiomas. Para eso, vamos a crear una rama con nombre add-languages.
  2. En la nueva rama creada vamos a editar el fichero greeting.html en src/main/resources/templates con este contenido
    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Getting Started: Serving Web Content</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <p th:text="${hello} + ', ' + ${name} + '!'" />
    </body>
    </html>
    
  3. añadimos la clase GreetingTranslator:
    package hello;
    
    public class GreetingTranslator {
    	
    	public String sayHelloIn(String lang) {
    		String hello;
    		if ("en".equals(lang)) {
    			hello = "hello";
    		} else if ("es".equals(lang)) {
    			hello = "hola";
    		} else {
    			hello = "no hablo tu idioma";
    		}
    	}
    
    }
    
  4. y modificamos el método greeting de la clase GreetingController como sigue:
        @RequestMapping("/greeting")
        public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, 
        					   @RequestParam(value="lang", required=false, defaultValue="en") String lang, 
        					   Model model) {
        	model.addAttribute("hello", greetingTranslator.sayHelloIn(lang));
            model.addAttribute("name", name);
            return "greeting";
        }
    
  5. Haz un commit de estos cambios y haz un push de la nueva rama a GitHub
  6. Una vez que hemos decidido que estos cambios abarcan la funcionalidad deseada, vamos a crear una pull request siguiendo estas instrucciones: https://help.github.com/articles/creating-a-pull-request/#creating-the-pull-request (Fíjate bien que la pull request la haces a la rama master de tu repositorio y no a otro repositorio ni a resinas/master).
  7. Si abres la pull request que se ha creado, podrás observar abajo cómo se ejecuta una nueva build en Travis CI con la pull request.
  8. ¿Ha funcionado con éxito la build de la pull request o ha fallado? ¿Por qué motivo?