FAM 4.0 - Revision i branca amb GIT

1. Introducció

El projecte FAM, i l'arquetip de projectes Web basat en ell, està configurat per generar el nom del war amb la revision del projecte SVN i incloure aquest numero en un fitxer de propietats que es pot consulta des de l'aplicació a la finestra d'informació de l'entorn.

Si el projecte fa servir GIT, cal modificar alguns arxius per mostrar la revision i la branca correctament.

2. Requisits

Cal instal·lar el client Git de windows i verificar que està al PATH del sistema la ruta <directori d'instal·lació>/git/cmd

https://gitforwindows.org/

3. Modificacions

3.1. Literals

Edita l'arxiu resources/literals/core.properties i afegeix dos entrades:

Aplicacio.GIT.Branch   = Branca
Aplicacio.GIT.Revision = GIT revision

3.2. Vista

Edita l'arxiu WebRoot\views\ajuda\infoAplicacio.xhtml.

Elimina la informació de SVN

        <tr>
          <th scope="row">#{literalsCore['Aplicacio.SVN.Title']}</th>
          <td>#{literalsCore['Aplicacio.SVN.Revision']}</td>
        </tr>

I afegeix la informació de GIT

        <tr>
          <th scope="row">#{literalsCore['Aplicacio.GIT.Branch']}</th>
          <td>#{applicationBB.gitBranch}</td>
        </tr>
        <tr>
          <th scope="row">#{literalsCore['Aplicacio.GIT.Revision']}</th>
          <td>#{applicationBB.gitRevision}</td>
        </tr>

3.3. Bean de control

Afegeix a la classe ApplicationBB el següent codi

import java.util.Properties;
import java.io.IOException;


    private String gitRevision = null;
    private String gitBranch = null;

    public String getGitRevision() {
        if (gitRevision == null) {
            try {
                Properties prop = new Properties();
                prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("build.properties"));
                gitRevision = prop.getProperty("revision");
                gitBranch = prop.getProperty("branch");
            } catch (IOException e) {
                LOG.error("sense propietats del build.properties", e);
            }
        }
        return gitRevision;
    }

    public String getGitBranch() {
        if (gitBranch == null) {
            try {
                Properties prop = new Properties();
                prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("build.properties"));
                gitRevision = prop.getProperty("revision");
                gitBranch = prop.getProperty("branch");
            } catch (IOException e) {
                LOG.error("sense propietats del build.properties", e);
            }
        }
        return gitBranch;
    }

3.4. Configuració

Edita l'arxiu pom.xml i afegeix la següent informació:

SCM del git desprès de les propietats

    <scm>
        <url>https://codifont.diba.es</url>
        <connection>scm:git:https://codifont.diba.es/CODI_PROJECTE/CODI_PROJECTEgit</connection>
        <developerConnection>scm:git:https://codifont.diba.es/CODI_PROJECTE/CODI_PROJECTE.git</developerConnection>
    </scm>

Afegeix la part en negreta al plugin del build que genera el war

            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <webappDirectory>${basedir}/WebRoot</webappDirectory>
                    <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                    <!-- TODO revisar per que excloure config -->
                    <warSourceExcludes>**/.svn/**,**/config/**,filters/**</warSourceExcludes>
                    <!-- release peu -->
                    <nonFilteredFileExtensions>
                        <!-- default value contains jpg,jpeg,gif,bmp,png -->
                        <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
                        <nonFilteredFileExtension>png</nonFilteredFileExtension>
                        <nonFilteredFileExtension>css</nonFilteredFileExtension>
                        <nonFilteredFileExtension>bmp</nonFilteredFileExtension>
                        <nonFilteredFileExtension>jpg</nonFilteredFileExtension>
                        <nonFilteredFileExtension>jpeg</nonFilteredFileExtension>
                        <nonFilteredFileExtension>gif</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                    <archive>
                        <manifest>
                            <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                        </manifest>
                        <manifestEntries>
                            <Implementation-Branch>${scmBranch}</Implementation-Branch>
                            <Implementation-Build>${buildNumber}</Implementation-Build>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>

Afegeix dins del build, desprès del plugin de construcció del war, aquest plugin

            <!-- GIT revision -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.4</version>

                <executions>
                    <execution>
                        <id>create</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>metadata</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>create-metadata</goal>
                        </goals>
                        <configuration>
                            <attach>true</attach>
                            <!--make it available for jar/war classpath resource -->
                            <addOutputDirectoryToResources>true</addOutputDirectoryToResources>
                            <properties>
                                <branch>${scmBranch}</branch>
                            </properties>
                        </configuration>
                    </execution>
                </executions>
                <configuration>
                    <shortRevisionLength>8</shortRevisionLength>
                    <doCheck>false</doCheck>
                    <doCreate>false</doCreate>
                </configuration>
            </plugin>

Modifica el patró del nom a cadascun dels profile segons l'exemple del profile dev:

<finalName>${project.artifactId}-${project.version}-dev-r${svnProperties.revision}${svnProperties.specialStatus}</finalName>

per

<finalName>${project.artifactId}-${project.version}-dev-r${buildNumber}</finalName>

3.5. Modificacions per projectes FAM3

Pels projectes FAM3 que hagin migrat el repositori de SVN a GIT, les modificacions difereixen en alguns punts.

La configuració del pom és igual que la descrita a l'apartat Configuració. La diferència està en l'apartat Modificacions. Per adaptar aquests projectes només caldrà modificar els següents dos literals del fitxer literalsCore.properties amb aquests valors.

EntornRevisionApp = GIT revision

appSvnRevision = ${buildNumber}

No cal fer cap modificació en la vista ni en el backing bean.