Skip to content

Conversión de 2.0.7

Juan García edited this page Aug 30, 2019 · 5 revisions

Para la migración de INSIDE a 2.0.8, se hace necesario disponer de una rama basada en original-2.0.7, sobre la que se tendrán aplicados todos los parches que inicialmente aplicamos en la CARM sobre rama master. Así, se podrán aislar los cambios que realizamos en la CARM sobre la versión original, para evaluar si deben aplicarse o no en la nueva versión.

Este documento describe este proceso: Identificar cada uno de los 77 commits realizados sobre la rama master para llevarlos a una nueva rama, y así poder sustituir el master por esta nueva rama que llamaremos carm-2.0.7. El objetivo último, es poder desplegar en los entornos de explotación de la CARM indiferentemente el WAR generado desde el master o desde la rama carm-2.0.7, sin alterar ninguna funcionalidad, y en ese momento extinguir el master.

Creación de la rama carm-2.0.7

A partir de la rama original-2.0.7, aplicar los cambios que necesita nuestro proceso de integración continua, y formateo del código, en la CARM.

  • Realizar el clone inicial, desde nuestro fork:
cd checkout
git clone https://github.com/carm-es/inside.git
cd inside

git status 
  • Por defecto estaremos situados en la rama master, con lo que nos cambiaremos a la original-2.0.7, y desde ella, crearemos una nueva rama llamada carm-2.0.7:
git checkout original-2.0.7
git checkout -b carm-2.0.7

  • Modificarán todos los pom.xml para cambiar la versión, y pasar de 2.0.7 a 2.0.7-CARM.1-SNAPSHOT.

  • Modificar el pom.xml de la raíz del proyecto, para añadir la configuración de scm y plugins para el parseo de fuentes, inspirándonos en el pom.xml de csvstorage.

  • Ampliar el pom.xml de la raíz del proyecto para evitar problema en Eclipse, tras añadir el plugin para el pre-commit hook de git al mismo, que provoca el error en el IDE: Plugin execution not covered by lifecycle configuration: io.github.phillipuniverse:githook-maven-plugin:1.0.4:install (execution: default, phase: initialize). Se soluciona añadiendo:

      ...
    <build>
      ...
      <pluginManagement>
        <plugins>
           <!-- This plugin's configuration is used to store Eclipse
                m2e settings only. It has no influence on the Maven build itself. -->
           <plugin>
             <groupId>org.eclipse.m2e</groupId>
             <artifactId>lifecycle-mapping</artifactId>
             <version>1.0.0</version>
             <configuration>
               <lifecycleMappingMetadata>
                 <pluginExecutions>
                   <pluginExecution>
    	             <pluginExecutionFilter>
    	               <groupId>io.github.phillipuniverse</groupId>
    	               <artifactId>githook-maven-plugin</artifactId>
    	               <versionRange>[1.0.4,)</versionRange>
    	               <goals>
    	                 <goal>install</goal>
    	               </goals>
                     </pluginExecutionFilter>
    	             <action>
    	               <ignore />
    	             </action>
                   </pluginExecution>
                 </pluginExecutions>
               </lifecycleMappingMetadata>
             </configuration>
           </plugin>
        </plugins>
       </pluginManagement>
    ...
    </build>
    ...
    
  • Corrección de ficheros XML que vienen mal declarados (en el código original se ha insertado el texto de la licencia por encima del prólogo). Para correghir esto, nos situamos en el directorio fuentes para ejecutar los siguientes comandos que trasladen la declaración XML al principio de cada fichero afectado:

    grep -RPzli '(?s)^<!-- Copyright.*<\?xml version="1.0" encoding="UTF-8" standalone="yes"' | grep -v '/target/' |  xargs -I '{}' sed -i 's/<?xml version="1.0" encoding="[Uu][Tt][Ff]-8" standalone="yes"?>\r//g; 1i\<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' ./{}'
    
    grep -RPzli '(?s)^<!-- Copyright.*<\?xml version="1.0" encoding="UTF-8"\?' | grep -v '/target/' |  xargs -I '{}' sed -i 's/<?xml version="1.0" encoding="[Uu][Tt][Ff]-8"?>\r//g; 1i\<?xml version="1.0" encoding="UTF-8"?>' ./{}
    
    grep -RPzli '(?s)^<!-- Copyright.*<\?xml version="1.0"\?' | grep -v '/target/' |  xargs -I '{}' sed -i 's/<?xml version="1.0"?>\r//g; 1i\<?xml version="1.0"?>' ./{}
    
  • Descargar la hoja de estilo de código de Google:

mkdir .mvn
cd .mvn

wget https://raw.githubusercontent.com/carm-es/csvstorage/master/.mvn/eclipse-java-google-style.xml
cd -

git add .mvn -f
rm LICENSE
wget https://raw.githubusercontent.com/carm-es/inside/master/LICENSE
  • Descargar el fichero README.md del master
rm README.md
wget https://raw.githubusercontent.com/carm-es/inside/master/README.md
  • Comprobar la calidad del código con sonarqube:
mvn clean install 

mvn org.jacoco:jacoco-maven-plugin:prepare-agent \
    -Darguments="-Dmaven.javadoc.skip=true" \
    -Djava.awt.headless=true \
    --batch-mode verify \
    -Dformat=ALL org.owasp:dependency-check-maven:4.0.2:aggregate \
    -DfailOnError=false org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar \
    -Dsonar.dependencyCheck.reportPath=target/dependency-check-report.xml \
    -Dsonar.dependencyCheck.htmlReportPath=target/dependency-check-report.html \
    -Dsonar.host.url=https://sonarqube-pru.carm.es \
    -Dsonar.gitlab.query_max_retry=50 \
    -Dsonar.gitlab.query_wait=10000 \
    -Dsonar.dynamicAnalysis=reuseReports \
    -Dsonar.jacoco.reportPaths=target/jacoco.exec

  • Publicar la rama:
 # Añadir todos los ficheros que hemos cambiado,
 git add fuentes README.md  pom.xml  LICENSE

 # Commitear los cambios
 git commit -m "Conversión de 2.0.7 a carm-2.0.7
Se retoca la versión original 2.0.7 para poder iterar con los procesos de integración contínua de la CARM"

 # Publicar la rama en el Fork remoto 
 git push --set-upstream origin carm-2.0.7

Identificación de parches aplicados en la CARM

Repasando la lista de commits aplicados sobre la versión 2.0.7 que realmente alteran el código original, identificamos los siguientes:

Los siguientes commits, simplemente añaden el directorio resources_2-0-7-x y lo actualizan: La idea, sería fusionarlos en un único commit:

Reaplicación de parches sobre carm-2.0.7

Una vez identificados todos los parches que se realizaron sobre el código fuente original, y descartados aquellos que sólo tienen que ver con los procesos de integración contínua de la CARM, se procederá a ir aplicando uno a uno todos estos parches sobre la rama carm-2.0.7, y vincularlos en el mensaje del commit.

Para añadirlos usaremos el siguiente formato de mensajes...

git commit -m "Re-aplico el parche 58dd10a
Aplicamos el parche https://github.com/carm-es/inside/commit/58dd10ac0510338448106407707ca5a811884720 sobre los fuentes originales"