<?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>server-configuration</artifactId>
        <groupId>org.apache.skywalking</groupId>
        <version>8.6.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>configuration-apollo</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>configuration-api</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.skywalking</groupId>
            <artifactId>library-client</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-autoconfigure</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>CI-with-IT</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>io.fabric8</groupId>
                        <artifactId>docker-maven-plugin</artifactId>
                        <configuration>
                            <sourceMode>all</sourceMode>
                            <showLogs>true</showLogs>
                            <logDate>default</logDate>
                            <verbose>true</verbose>
                            <imagePullPolicy>IfNotPresent</imagePullPolicy>
                            <skip>true</skip>
                            <images>
                                <image>
                                    <name>mysql:5.7</name>
                                    <alias>apollo-db</alias>
                                    <run>
                                        <env>
                                            <TZ>Asia/Shanghai</TZ>
                                            <MYSQL_ALLOW_EMPTY_PASSWORD>yes</MYSQL_ALLOW_EMPTY_PASSWORD>
                                        </env>
                                        <namingStrategy>none</namingStrategy>
                                        <volumes>
                                            <bind>
                                                <volume>
                                                    src/test/resources/docker/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
                                                </volume>
                                            </bind>
                                        </volumes>
                                        <wait>
                                            <log>ready for connections</log>
                                            <time>600000</time>
                                        </wait>
                                    </run>
                                </image>
                                <image>
                                    <name>kezhenxu94/apollo:1.2</name>
                                    <alias>apollo-config-and-portal</alias>
                                    <run>
                                        <namingStrategy>none</namingStrategy>
                                        <dependsOn>
                                            <container>apollo-db</container>
                                        </dependsOn>
                                        <links>
                                            <link>apollo-db</link>
                                        </links>
                                        <ports>
                                            <port>+apollo.portal.host:apollo.portal.port:8070</port>
                                            <port>+apollo.meta.host:apollo.meta.port:8080</port>
                                        </ports>
                                        <wait>
                                            <log>Portal started. You can visit</log>
                                            <time>2400000</time>
                                        </wait>
                                    </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>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-failsafe-plugin</artifactId>
                        <configuration>
                            <systemPropertyVariables>
                                <apollo.portal.host>
                                    ${apollo.portal.host}
                                </apollo.portal.host>
                                <apollo.portal.port>
                                    ${apollo.portal.port}
                                </apollo.portal.port>
                                <apollo.meta.host>
                                    ${apollo.meta.host}
                                </apollo.meta.host>
                                <apollo.meta.port>
                                    ${apollo.meta.port}
                                </apollo.meta.port>
                                <apollo.configService>
                                    http://${apollo.meta.host}:${apollo.meta.port}
                                </apollo.configService>
                            </systemPropertyVariables>
                        </configuration>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>integration-test</goal>
                                    <goal>verify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
