From 5f3a8bd318ddbe835be7c3db18ee8edc3b5ad946 Mon Sep 17 00:00:00 2001
From: Mirco Nasuti <mirco.nasuti@chuv.ch>
Date: Wed, 13 Jul 2016 13:41:40 +0200
Subject: [PATCH] use flyway from Java instead of Maven

---
 docker-compose_build.yml                      | 14 ----
 pom.xml                                       | 83 ++++++++++++-------
 src/docker/build/Dockerfile                   |  2 -
 src/docker/build/build-in-docker.sh           | 17 ----
 .../PersistenceConfiguration.java             | 11 +++
 5 files changed, 62 insertions(+), 65 deletions(-)

diff --git a/docker-compose_build.yml b/docker-compose_build.yml
index 53c3ab56a..b29bf59ec 100644
--- a/docker-compose_build.yml
+++ b/docker-compose_build.yml
@@ -4,22 +4,8 @@ services:
   backend_build:
     container_name: backend_build
     build: ./src/docker/build/
-    depends_on:
-      - "db"
     volumes:
       - ./:/opt/portal/
       - .m2:/root/.m2/
     ports:
       - "8080:8080"
-    links:
-      - "db"
-  db:
-    container_name: db
-    image: postgres:9.5.3
-    ports:
-      - "5432:5432"
-    volumes:
-      - ./pgdata:/var/lib/postgresql/data/pgdata
-    environment:
-      POSTGRES_USER: postgres
-      PGDATA: /var/lib/postgresql/data/pgdata
diff --git a/pom.xml b/pom.xml
index 0c8367bde..2726b792b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -15,27 +15,45 @@
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>1.3.2.RELEASE</version>
-        <relativePath /> <!-- lookup parent from repository -->
+        <relativePath />
     </parent>
 
     <properties>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <sonar.host.url>http://dockerhost:9000</sonar.host.url>
+        <sonar.projectName>MIP Backend</sonar.projectName>
+        <sonar.sources>src/main/java/</sonar.sources>
         <java.version>1.8</java.version>
         <asciidoctor.maven.plugin.version>1.5.3</asciidoctor.maven.plugin.version>
         <asciidoctorj.pdf.version>1.5.0-alpha.11</asciidoctorj.pdf.version>
         <asciidoctorj.version>1.5.4</asciidoctorj.version>
-        <sonar.host.url>http://dockerhost:9000</sonar.host.url>
-        <sonar.projectName>MIP Backend</sonar.projectName>
-        <sonar.sources>src/main/java/</sonar.sources>
-        <flyway.url>jdbc:postgresql://db:5432/postgres</flyway.url>
-        <flyway.user>postgres</flyway.user>
+        <spring-data-commons.version>1.12.2.RELEASE</spring-data-commons.version>
+        <angularjs.version>1.4.3</angularjs.version>
+        <jquery.version>2.1.1</jquery.version>
+        <bootstrap.version>3.2.0</bootstrap.version>
+        <hibernate-jpa-2.1-api.version>1.0.0.Final</hibernate-jpa-2.1-api.version>
+        <hibernate-core.version>4.3.8.Final</hibernate-core.version>
+        <hibernate-entitymanager.version>4.3.8.Final</hibernate-entitymanager.version>
+        <h2.version>1.4.187</h2.version>
+        <postgresql.version>9.4-1205-jdbc42</postgresql.version>
+        <springfox-swagger2.version>2.3.1</springfox-swagger2.version>
+        <springfox-swagger-ui.version>2.3.1</springfox-swagger-ui.version>
+        <gson.version>2.5</gson.version>
+        <slugify.version>2.1.4</slugify.version>
+        <spring-data-jpa.version>1.10.2.RELEASE</spring-data-jpa.version>
+        <maven-resources-plugin.version>2.3</maven-resources-plugin.version>
+        <sonar-maven-plugin.version>3.0.1</sonar-maven-plugin.version>
+        <swagger2markup-maven-plugin.version>1.0.0</swagger2markup-maven-plugin.version>
+        <maven-compiler-plugin.version>3.1</maven-compiler-plugin.version>
+        <hibernate4-maven-plugin.version>1.1.0</hibernate4-maven-plugin.version>
+        <flyway-core.version>4.0.3</flyway-core.version>
     </properties>
 
     <dependencies>
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-commons</artifactId>
-            <version>1.12.2.RELEASE</version>
+            <version>${spring-data-commons.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -60,17 +78,17 @@
         <dependency>
             <groupId>org.webjars</groupId>
             <artifactId>angularjs</artifactId>
-            <version>1.4.3</version>
+            <version>${angularjs.version}</version>
         </dependency>
         <dependency>
             <groupId>org.webjars</groupId>
             <artifactId>jquery</artifactId>
-            <version>2.1.1</version>
+            <version>${jquery.version}</version>
         </dependency>
         <dependency>
             <groupId>org.webjars</groupId>
             <artifactId>bootstrap</artifactId>
-            <version>3.2.0</version>
+            <version>${bootstrap.version}</version>
         </dependency>
         <dependency>
             <groupId>org.webjars</groupId>
@@ -84,57 +102,62 @@
         <dependency>
             <groupId>org.hibernate.javax.persistence</groupId>
             <artifactId>hibernate-jpa-2.1-api</artifactId>
-            <version>1.0.0.Final</version>
+            <version>${hibernate-jpa-2.1-api.version}</version>
         </dependency>
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-core</artifactId>
-            <version>4.3.8.Final</version>
+            <version>${hibernate-core.version}</version>
         </dependency>
         <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-entitymanager</artifactId>
-            <version>4.3.8.Final</version>
+            <version>${hibernate-entitymanager.version}</version>
         </dependency>
         <dependency>
             <groupId>com.h2database</groupId>
             <artifactId>h2</artifactId>
-            <version>1.4.187</version>
+            <version>${h2.version}</version>
         </dependency>
         <dependency>
             <groupId>org.postgresql</groupId>
             <artifactId>postgresql</artifactId>
-            <version>9.4-1205-jdbc42</version>
+            <version>${postgresql.version}</version>
         </dependency>
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
-            <version>2.3.1</version>
+            <version>${springfox-swagger2.version}</version>
         </dependency>
         <dependency>
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger-ui</artifactId>
-            <version>2.3.1</version>
+            <version>${springfox-swagger-ui.version}</version>
         </dependency>
         <dependency>
             <groupId>com.google.code.gson</groupId>
             <artifactId>gson</artifactId>
-            <version>2.5</version>
+            <version>${gson.version}</version>
         </dependency>
         <dependency>
             <groupId>com.github.slugify</groupId>
             <artifactId>slugify</artifactId>
-            <version>2.1.4</version>
+            <version>${slugify.version}</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-jpa</artifactId>
-            <version>1.10.2.RELEASE</version>
+            <version>${spring-data-jpa.version}</version>
         </dependency>
         <dependency>
             <groupId>commons-dbcp</groupId>
             <artifactId>commons-dbcp</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.flywaydb</groupId>
+            <artifactId>flyway-core</artifactId>
+            <version>${flyway-core.version}</version>
+        </dependency>
     </dependencies>
 
     <pluginRepositories>
@@ -161,6 +184,7 @@
                     <include>**/*.xml</include>
                     <include>**/*.json</include>
                     <include>**/*.csv</include>
+                    <include>**/*.sql</include>
                 </includes>
                 <filtering>true</filtering>
             </resource>
@@ -170,7 +194,7 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-resources-plugin</artifactId>
-                <version>2.3</version>
+                <version>${maven-resources-plugin.version}</version>
                 <configuration>
                     <!-- specify UTF-8, ISO-8859-1 or any other file encoding -->
                     <encoding>UTF-8</encoding>
@@ -183,7 +207,7 @@
             <plugin>
                 <groupId>de.juplo</groupId>
                 <artifactId>hibernate4-maven-plugin</artifactId>
-                <version>1.1.0</version>
+                <version>${hibernate4-maven-plugin.version}</version>
                 <executions>
                     <execution>
                         <phase>compile</phase>
@@ -192,21 +216,16 @@
             </plugin>
             <plugin>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.1</version>
+                <version>${maven-compiler-plugin.version}</version>
                 <configuration>
-                    <source>1.8</source>
-                    <target>1.8</target>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.flywaydb</groupId>
-                <artifactId>flyway-maven-plugin</artifactId>
-                <version>4.0.1</version>
-            </plugin>
             <plugin>
                 <groupId>io.github.swagger2markup</groupId>
                 <artifactId>swagger2markup-maven-plugin</artifactId>
-                <version>1.0.0</version>
+                <version>${swagger2markup-maven-plugin.version}</version>
                 <configuration>
                     <swaggerInput>http://localhost:8080/services/v2/api-docs</swaggerInput>
                     <outputFile>${project.build.directory}/asciidoc/api</outputFile>
@@ -238,7 +257,7 @@
             <plugin>
                 <groupId>org.sonarsource.scanner.maven</groupId>
                 <artifactId>sonar-maven-plugin</artifactId>
-                <version>3.0.1</version>
+                <version>${sonar-maven-plugin.version}</version>
             </plugin>
         </plugins>
     </build>
diff --git a/src/docker/build/Dockerfile b/src/docker/build/Dockerfile
index b9164761d..b4318d788 100644
--- a/src/docker/build/Dockerfile
+++ b/src/docker/build/Dockerfile
@@ -5,6 +5,4 @@ COPY ./build-in-docker.sh /build-in-docker.sh
 VOLUME /opt/portal/
 WORKDIR /opt/portal/
 
-RUN apt-get update && apt-get install -y postgresql
-
 CMD ["bash", "/build-in-docker.sh"]
diff --git a/src/docker/build/build-in-docker.sh b/src/docker/build/build-in-docker.sh
index 44f5005d0..7b77f1e66 100644
--- a/src/docker/build/build-in-docker.sh
+++ b/src/docker/build/build-in-docker.sh
@@ -5,20 +5,3 @@ rm -r target/
 
 echo 'Packaging...'
 mvn package
-
-echo 'Waiting for postgres to be ready...'
-until psql -h "db" -U "postgres" -c '\l'; do
-  >&2 echo "Postgres is unavailable - sleeping"
-  sleep 1
-done
-
-if [ $(psql -h "db" -U "postgres" -c "\dt" | grep schema_version | wc -l) == 0 ]; then
-  echo 'Generating database baseline...'
-  mvn flyway:baseline
-fi
-
-echo 'Migrating database...'
-mvn flyway:migrate
-
-# Uncomment to generate a PDF API documentation
-# mvn swagger2markup:convertSwagger2markup asciidoctor:process-asciidoc
diff --git a/src/main/java/org/hbp/mip/configuration/PersistenceConfiguration.java b/src/main/java/org/hbp/mip/configuration/PersistenceConfiguration.java
index 1c0a3ad59..35ce472e9 100644
--- a/src/main/java/org/hbp/mip/configuration/PersistenceConfiguration.java
+++ b/src/main/java/org/hbp/mip/configuration/PersistenceConfiguration.java
@@ -1,10 +1,12 @@
 package org.hbp.mip.configuration;
 
+import org.flywaydb.core.Flyway;
 import org.hbp.mip.utils.CSVUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.orm.jpa.EntityScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.DependsOn;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.orm.jpa.JpaVendorAdapter;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
@@ -30,6 +32,7 @@ public class PersistenceConfiguration {
     }
 
     @Bean
+    @DependsOn("flyway")
     public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
         LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
         em.setDataSource(dataSource);
@@ -38,4 +41,12 @@ public class PersistenceConfiguration {
         return em;
     }
 
+    @Bean(initMethod = "migrate")
+    public Flyway flyway() {
+        Flyway flyway = new Flyway();
+        flyway.setBaselineOnMigrate(true);
+        flyway.setDataSource(dataSource);
+        return flyway;
+    }
+
 }
-- 
GitLab