<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
<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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.yahoo.vespa</groupId>
    <artifactId>tenant-base</artifactId>
    <version>7.472.1</version>
    <name>Hosted Vespa tenant base</name>
    <description>Parent POM for all hosted Vespa applications.</description>
    <url>https://github.com/vespa-engine</url>
    <packaging>pom</packaging>

    <licenses>
        <license>
            <name>The Apache License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>
    <developers>
        <developer>
            <name>Vespa</name>
            <url>https://github.com/vespa-engine</url>
        </developer>
    </developers>
    <scm>
        <connection>scm:git:git@github.com:vespa-engine/vespa.git</connection>
        <developerConnection>scm:git:git@github.com:vespa-engine/vespa.git</developerConnection>
        <url>git@github.com:vespa-engine/vespa.git</url>
    </scm>

    <properties>
        <vespaversion>7.472.1</vespaversion>
        <!-- when <test-framework.version> is "${project.version}", it is decoupled from the
             compile version set with "-D vespaversion=...", and is instead the newest version.
             When it is "${vespaversion}", it is coupled, which should be the default. -->
        <test-framework.version>${vespaversion}</test-framework.version>
        <target_jdk_version>11</target_jdk_version>
        <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
        <maven-surefire-plugin.version>2.22.0</maven-surefire-plugin.version>
        <junit.version>5.7.0</junit.version> <!-- Keep in sync with hosted-tenant-base and tenant-cd until all direct use is removed -->
        <endpoint>https://api.vespa-external.aws.oath.cloud:4443</endpoint>
        <test.categories>!integration</test.categories>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.yahoo.vespa</groupId>
                <artifactId>container-dependency-versions</artifactId>
                <version>${vespaversion}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
                <version>${junit.version}</version>
            </dependency>

            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter-engine</artifactId>
                <version>${junit.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>com.yahoo.vespa</groupId>
            <artifactId>container</artifactId>
            <version>${vespaversion}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.yahoo.vespa</groupId>
            <artifactId>container-test</artifactId>
            <version>${vespaversion}</version>
            <scope>test</scope>
	    <exclusions>
		    <exclusion>
			    <groupId>org.apache.commons</groupId>
			    <artifactId>commons-exec</artifactId>
		    </exclusion>
		    <exclusion>
			    <groupId>commons-lang</groupId>
			    <artifactId>commons-lang</artifactId>
		    </exclusion>
	    </exclusions>
        </dependency>

        <dependency>
            <groupId>com.yahoo.vespa</groupId>
            <artifactId>tenant-cd-api</artifactId>
            <version>${test-framework.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.yahoo.vespa</groupId>
            <artifactId>cloud-tenant-cd</artifactId>
            <version>${test-framework.version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>net.java.dev.jna</groupId>
                    <artifactId>jna</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.commons</groupId>
                    <artifactId>commons-exec</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>commons-lang</groupId>
                    <artifactId>commons-lang</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <!-- Build *-fat-test.jar file that includes all non-test classes and resources
                 that are part of the class path during test and and test.jar that includes
                 all test classes and resources, and put it inside a zip:
                   1. application classes and resources
                   2. test classes and resources
                   3. classes and resources in all dependencies of both (1) and (2)
                   4. copy the fat-test-jar and test-jar to application-test/artifacts directory
                   5. zip application-test -->
            <id>fat-test-application</id>
            <build>
                <plugins>
                    <plugin>
                        <!-- dependencies, see (3) above -->
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <version>3.1.1</version>
                        <executions>
                            <execution>
                                <!-- JAR-like dependencies -->
                                <id>unpack-dependencies</id>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>unpack-dependencies</goal>
                                </goals>
                                <configuration>
                                    <includeTypes>jar,test-jar</includeTypes>
                                    <outputDirectory>target/fat-test-classes</outputDirectory>
                                    <!-- WARNING(2018-06-27): bcpkix-jdk15on-1.58.jar and
                                         bcprov-jdk15on-1.58.jar are pulled in via
                                         container-dev and both contains the same set of
                                         bouncycastle signature files in META-INF:
                                         BC1024KE.DSA, BC1024KE.SF, BC2048KE.DSA, and
                                         BC2048KE.SF. By merging any of these two with any
                                         other JAR file like we're doing here, the signatures
                                         are wrong. Worse, what we're doing is WRONG but not
                                         yet fatal.

                                     The symptom of this happening is that the tester fails
                                     to load the SystemTest class(!?), and subsequently
                                     tries to run all test-like files in the fat test JAR.

                                     The solution is to exclude such files. This happens
                                     automatically with maven-assembly-plugin. -->
                                    <excludes>META-INF/*.SF,META-INF/*.DSA</excludes>
                                </configuration>
                            </execution>
                            <execution>
                                <!-- non-JAR-like dependencies -->
                                <id>non-jar-dependencies</id>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>copy-dependencies</goal>
                                </goals>
                                <configuration>
                                    <excludeTypes>jar,test-jar</excludeTypes>
                                    <outputDirectory>target/fat-test-classes</outputDirectory>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>3.1.0</version>
                        <executions>
                            <execution>
                                <id>copy-resources</id>
                                <phase>prepare-package</phase>
                                <goals>
                                    <goal>copy-resources</goal>
                                </goals>
                                <configuration>
                                    <outputDirectory>target/fat-test-classes</outputDirectory>
                                    <resources>
                                        <!-- application classes and resources, see 1. above -->
                                        <resource>
                                            <directory>target/classes</directory>
                                        </resource>
                                    </resources>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-jar-plugin</artifactId>
                        <version>3.1.0</version>
                        <executions>
                            <execution>
                                <id>fat-test-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                                <configuration>
                                    <classesDirectory>target/fat-test-classes</classesDirectory>
                                    <classifier>fat-test</classifier>
                                </configuration>
                            </execution>
                            <execution>
                                <id>test-jar</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>test-jar</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>attach-artifact</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <tasks>
                                        <!-- copy fat test-jar to application-test artifacts directory, see 4. above -->
                                        <copy file="target/${project.artifactId}-fat-test.jar"
                                              todir="target/application-test/artifacts/" />

                                        <!-- copy slim test-jar to application-test artifacts directory, see 4. above -->
                                        <copy file="target/${project.artifactId}-tests.jar"
                                              todir="target/application-test/artifacts/" />

                                        <!-- zip application-test, see 5. above -->
                                        <zip destfile="target/application-test.zip"
                                             basedir="target/application-test/" />
                                    </tasks>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile> <!-- Alias vespaversion with a more descriptive vespa.compile.version -->
            <id>set-vespa-compile-version</id>
            <activation>
                <property>
                    <name>vespa.compile.version</name>
                </property>
            </activation>
            <properties>
                <vespaversion>${vespa.compile.version}</vespaversion>
            </properties>
        </profile>

        <profile> <!-- Alias vespaVersion with a more descriptive vespa.runtime.version -->
            <id>set-vespa-runtime-version</id>
            <activation>
                <property>
                    <name>vespa.runtime.version</name>
                </property>
            </activation>
            <properties>
                <vespaVersion>${vespa.runtime.version}</vespaVersion>
            </properties>
        </profile>
    </profiles>

    <build>
        <finalName>${project.artifactId}</finalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <groups>${test.categories}</groups>
                        <redirectTestOutputToFile>false</redirectTestOutputToFile>
                        <trimStackTrace>false</trimStackTrace>
                        <systemPropertyVariables>
                            <application>${application}</application>
                            <tenant>${tenant}</tenant>
                            <instance>${instance}</instance>
                            <environment>${environment}</environment>
                            <region>${region}</region>
                            <endpoint>${endpoint}</endpoint>
                            <apiKeyFile>${apiKeyFile}</apiKeyFile>
                            <apiCertificateFile>${apiCertificateFile}</apiCertificateFile>
                            <dataPlaneKeyFile>${dataPlaneKeyFile}</dataPlaneKeyFile>
                            <dataPlaneCertificateFile>${dataPlaneCertificateFile}</dataPlaneCertificateFile>
                        </systemPropertyVariables>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-report-plugin</artifactId>
                    <version>${maven-surefire-plugin.version}</version>
                    <configuration>
                        <reportsDirectory>${env.TEST_DIR}</reportsDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>3.0.0-M2</version>
                <executions>
                    <execution>
                        <id>enforce-java</id>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <requireJavaVersion>
                                    <version>[11, )</version>
                                </requireJavaVersion>
                                <requireMavenVersion>
                                    <version>[3.5, )</version>
                                </requireMavenVersion>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>${target_jdk_version}</source>
                    <target>${target_jdk_version}</target>
                    <showWarnings>true</showWarnings>
                    <showDeprecation>true</showDeprecation>
                    <compilerArgs>
                        <arg>-Xlint:all</arg>
                        <arg>-Werror</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.yahoo.vespa</groupId>
                <artifactId>vespa-maven-plugin</artifactId>
                <version>${vespaversion}</version>
            </plugin>

            <plugin>
                <groupId>com.yahoo.vespa</groupId>
                <artifactId>vespa-application-maven-plugin</artifactId>
                <version>${vespaversion}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>packageApplication</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>com.yahoo.vespa</groupId>
                <artifactId>bundle-plugin</artifactId>
                <version>${vespaversion}</version>
                <extensions>true</extensions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-report-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
