<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <parent>
    <artifactId>demo-parent</artifactId>
    <groupId>org.apache.servicecomb.demo</groupId>
    <version>2.8.0</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>

  <artifactId>docker-run-config-edge</artifactId>
  <name>Java Chassis::Demo::Docker Run Config</name>

  <packaging>pom</packaging>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>io.fabric8</groupId>
          <artifactId>docker-maven-plugin</artifactId>
          <configuration>
            <images>
              <image>
                <name>servicecomb/service-center</name>
                <alias>service-center</alias>
                <run>
                  <wait>
                    <log>server is ready</log>
                    <tcp>
                      <ports>
                        <port>30100</port>
                      </ports>
                    </tcp>
                    <time>60000</time>
                  </wait>
                  <ports>
                    <port>30100:30100</port>
                  </ports>
                </run>
              </image>
              <image>
                <name>authentication:${project.version}</name>
                <alias>authentication</alias>
                <run>
                  <env>
                    <JAVA_OPTS>
                      -Dservicecomb.service.registry.address=http://sc.servicecomb.io:30100
                    </JAVA_OPTS>
                    <JAR_PATH>/maven/maven/authentication-${project.version}.jar</JAR_PATH>
                  </env>
                  <links>
                    <link>service-center:sc.servicecomb.io</link>
                  </links>
                  <wait>
                    <log>Register microservice instance success</log>
                    <!--
                        the log waiting of the plugin has a bug and fails frequently
                        refer to https://github.com/fabric8io/docker-maven-plugin/issues/767
                        this http checking is used as a temporary solution
                    -->
                    <tcp>
                      <ports>
                        <port>7070</port>
                      </ports>
                    </tcp>
                    <time>120000</time>
                  </wait>
                  <ports>
                    <port>7070:7070</port>
                  </ports>
                  <dependsOn>
                    <container>service-center</container>
                  </dependsOn>
                </run>
              </image>
              <image>
                <name>business-1-0-0:${project.version}</name>
                <alias>business-1-0-0</alias>
                <run>
                  <env>
                    <JAVA_OPTS>
                      -Dservicecomb.service.registry.address=http://sc.servicecomb.io:30100
                    </JAVA_OPTS>
                    <JAR_PATH>/maven/maven/business-1-0-0-${project.version}.jar</JAR_PATH>
                  </env>
                  <links>
                    <link>service-center:sc.servicecomb.io</link>
                  </links>
                  <wait>
                    <log>Register microservice instance success</log>
                    <!--
                        the log waiting of the plugin has a bug and fails frequently
                        refer to https://github.com/fabric8io/docker-maven-plugin/issues/767
                        this http checking is used as a temporary solution
                    -->
                    <tcp>
                      <ports>
                        <port>8080</port>
                      </ports>
                    </tcp>
                    <time>120000</time>
                  </wait>
                  <ports>
                    <port>8080:8080</port>
                  </ports>
                  <dependsOn>
                    <container>service-center</container>
                  </dependsOn>
                </run>
              </image>
              <image>
                <name>business-1-1-0:${project.version}</name>
                <alias>business-1-1-0</alias>
                <run>
                  <env>
                    <JAVA_OPTS>
                      -Dservicecomb.service.registry.address=http://sc.servicecomb.io:30100
                    </JAVA_OPTS>
                    <JAR_PATH>/maven/maven/business-1-1-0-${project.version}.jar</JAR_PATH>
                  </env>
                  <links>
                    <link>service-center:sc.servicecomb.io</link>
                  </links>
                  <wait>
                    <log>Register microservice instance success</log>
                    <!--
                        the log waiting of the plugin has a bug and fails frequently
                        refer to https://github.com/fabric8io/docker-maven-plugin/issues/767
                        this http checking is used as a temporary solution
                    -->
                    <tcp>
                      <ports>
                        <port>8090</port>
                      </ports>
                    </tcp>
                    <time>120000</time>
                  </wait>
                  <ports>
                    <port>8090:8090</port>
                  </ports>
                  <dependsOn>
                    <container>service-center</container>
                  </dependsOn>
                </run>
              </image>
              <image>
                <name>business-2-0-0:${project.version}</name>
                <alias>business-2-0-0</alias>
                <run>
                  <env>
                    <JAVA_OPTS>
                      -Dservicecomb.service.registry.address=http://sc.servicecomb.io:30100
                    </JAVA_OPTS>
                    <JAR_PATH>/maven/maven/business-2-0-0-${project.version}.jar</JAR_PATH>
                  </env>
                  <links>
                    <link>service-center:sc.servicecomb.io</link>
                  </links>
                  <wait>
                    <log>Register microservice instance success</log>
                    <!--
                        the log waiting of the plugin has a bug and fails frequently
                        refer to https://github.com/fabric8io/docker-maven-plugin/issues/767
                        this http checking is used as a temporary solution
                    -->
                    <tcp>
                      <ports>
                        <port>8091</port>
                      </ports>
                    </tcp>
                    <time>120000</time>
                  </wait>
                  <ports>
                    <port>8091:8091</port>
                  </ports>
                  <dependsOn>
                    <container>service-center</container>
                  </dependsOn>
                </run>
              </image>
              <image>
                <name>edge-service:${project.version}</name>
                <alias>edge-service</alias>
                <run>
                  <env>
                    <JAVA_OPTS>
                      -Dservicecomb.service.registry.address=http://sc.servicecomb.io:30100 -Dservicecomb.service.publishAddress=${docker.hostname}
                    </JAVA_OPTS>
                    <JAR_PATH>/maven/maven/edge-service-${project.version}.jar</JAR_PATH>
                  </env>
                  <links>
                    <link>service-center:sc.servicecomb.io</link>
                  </links>
                  <wait>
                    <log>Register microservice instance success</log>
                    <!--
                        the log waiting of the plugin has a bug and fails frequently
                        refer to https://github.com/fabric8io/docker-maven-plugin/issues/767
                        this http checking is used as a temporary solution
                    -->
                    <tcp>
                      <ports>
                        <port>18080</port>
                      </ports>
                    </tcp>
                    <time>120000</time>
                  </wait>
                  <ports>
                    <port>18080:18080</port>
                  </ports>
                  <dependsOn>
                    <container>service-center</container>
                  </dependsOn>
                </run>
              </image>
            </images>
          </configuration>
          <executions>
            <execution>
              <id>start</id>
              <phase>pre-integration-test</phase>
              <goals>
                <goal>start</goal>
              </goals>
            </execution>
            <execution>
              <id>stop</id>
              <phase>post-integration-test</phase>
              <goals>
                <goal>stop</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <profiles>
    <profile>
      <id>docker</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <executions>
              <execution>
                <id>add-default-properties</id>
                <phase>initialize</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <scripts>
                    <script>
                      project.properties.setProperty('docker.hostname', 'localhost')
                      log.info("Docker hostname is " + project.properties['docker.hostname'])
                    </script>
                  </scripts>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-failsafe-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <servicecomb.service.registry.address>http://${docker.hostname}:30100</servicecomb.service.registry.address>
              </systemPropertyVariables>
              <argLine>${jacoco.failsafe.argLine}</argLine>
            </configuration>
            <executions>
              <execution>
                <goals>
                  <goal>integration-test</goal>
                  <goal>verify</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <id>docker-machine</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <executions>
              <execution>
                <id>add-dynamic-properties</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <scripts>
                    <script>
                      def process = "docker-machine ip default".execute()
                      process.waitFor()
                      project.properties.setProperty('docker.hostname', process.in.text.trim())

                      log.info("Docker hostname is " + project.properties['docker.hostname'])
                    </script>
                  </scripts>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
