<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>23</version>
    </parent>

    <artifactId>statefun-parent</artifactId>
    <groupId>org.apache.flink</groupId>
    <name>statefun-parent</name>
    <version>3.2-SNAPSHOT</version>
    <packaging>pom</packaging>

    <url>http://flink.apache.org</url>
    <inceptionYear>2014</inceptionYear>

    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
        </license>
    </licenses>

    <scm>
        <url>https://github.com/apache/flink-statefun</url>
        <connection>git@github.com:apache/flink-statefun.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/flink-statefun.git</developerConnection>
    </scm>

    <modules>
        <module>statefun-sdk-embedded</module>
        <module>statefun-sdk-protos</module>
        <module>statefun-sdk-java</module>
        <module>statefun-sdk-python</module>
        <module>statefun-sdk-go</module>
        <module>statefun-sdk-js</module>
        <module>statefun-kafka-io</module>
        <module>statefun-kinesis-io</module>
        <module>statefun-flink</module>
        <module>statefun-shaded</module>
        <module>statefun-testutil</module>

        <!--
            Always build the end-to-end tests module last,
            since the module builds the base Stateful Functions image with the
            built project artifacts before running the end-to-end tests.
        -->
        <module>statefun-e2e-tests</module>
    </modules>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spotless-maven-plugin.version>1.20.0</spotless-maven-plugin.version>
        <auto-service.version>1.0-rc6</auto-service.version>
        <protobuf.version>3.7.1</protobuf.version>
        <unixsocket.version>2.3.2</unixsocket.version>
        <protoc-jar-maven-plugin.version>3.11.1</protoc-jar-maven-plugin.version>
        <flink.version>1.13.2</flink.version>
        <scala.binary.version>2.12</scala.binary.version>
        <test.unit.pattern>**/*Test.*</test.unit.pattern>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.google.auto.service</groupId>
            <artifactId>auto-service-annotations</artifactId>
            <version>${auto-service.version}</version>
        </dependency>
    </dependencies>


    <profiles>
        <!--
            We're reusing the apache-release build profile defined in the Apache Parent POM,
            with one exclusion: do not run the source-release-assembly execution goal.
            We have our own scripts to create the source release, which correctly excludes
            binaries from distribution tarball.
            The script can be found under tools/releasing/create_source_release.sh.
        -->
        <profile>
            <id>apache-release</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-assembly-plugin</artifactId>
                        <dependencies>
                            <dependency>
                                <groupId>org.apache.apache.resources</groupId>
                                <artifactId>apache-source-release-assembly-descriptor</artifactId>
                                <version>1.0.6</version>
                            </dependency>
                        </dependencies>
                        <executions>
                            <execution>
                                <id>source-release-assembly</id>
                                <!-- disable the execution -->
                                <phase>none</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>java11</id>
            <activation>
                <jdk>[11,)</jdk>
            </activation>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <source>11</source>
                            <target>11</target>
                            <compilerArgs combine.children="append">
                                <arg>--add-exports=java.base/sun.net.util=ALL-UNNAMED</arg>
                                <arg>--add-exports=java.management/sun.management=ALL-UNNAMED</arg>
                            </compilerArgs>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.github.os72</groupId>
                    <artifactId>protoc-jar-maven-plugin</artifactId>
                    <version>${protoc-jar-maven-plugin.version}</version>
                    <executions>
                        <!-- Generate src/main/protobuf -->
                        <execution>
                            <id>generate-protobuf-sources</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <includeStdTypes>true</includeStdTypes>
                                <protocVersion>${protobuf.version}</protocVersion>
                                <cleanOutputFolder>true</cleanOutputFolder>
                                <outputDirectory>${basedir}/target/generated-sources/protoc-jar</outputDirectory>
                            </configuration>
                        </execution>

                        <!-- Generate src/test/protobuf -->
                        <execution>
                            <id>generate-protobuf-test-sources</id>
                            <phase>generate-sources</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <includeStdTypes>true</includeStdTypes>
                                <protocVersion>${protobuf.version}</protocVersion>
                                <inputDirectories>
                                    <include>src/test/protobuf</include>
                                </inputDirectories>
                                <outputTargets>
                                    <outputTarget>
                                        <type>descriptor</type>
                                        <outputDirectory>${basedir}/target/test-classes</outputDirectory>
                                    </outputTarget>
                                    <outputTarget>
                                        <type>java</type>
                                        <outputDirectory>${basedir}/target/generated-test-sources/protoc-jar</outputDirectory>
                                    </outputTarget>
                                </outputTargets>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <!-- Java compiler -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>com.google.auto.service</groupId>
                            <artifactId>auto-service</artifactId>
                            <version>${auto-service.version}</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>

            <!-- Licence -->
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <version>0.13</version>
                <inherited>false</inherited>
                <executions>
                    <execution>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <excludes>
                        <!-- Additional files like .gitignore etc.-->
                        <exclude>**/.*/**</exclude>
                        <exclude>**/*.prefs</exclude>
                        <exclude>**/*.log</exclude>
                        <!-- Administrative files in the main trunk. -->
                        <exclude>**/README.md</exclude>
                        <exclude>**/README.zh.md</exclude>
                        <exclude>**/CODE_OF_CONDUCT.md</exclude>
                        <exclude>.github/**</exclude>
                        <!-- IDE files. -->
                        <exclude>**/*.iml</exclude>
                        <!-- Generated content -->
                        <exclude>**/target/**</exclude>
                        <exclude>**/_build/**</exclude>
                        <exclude>docs/static/font-awesome/**</exclude>
                        <exclude>docs/resources/**</exclude>
                        <exclude>docs/public/**</exclude>
                        <exclude>docs/themes/book/**</exclude>
                        <exclude>docs/assets/github.css</exclude>
                        <exclude>docs/static/js/anchor.min.js</exclude>
                        <!-- Generated code  -->
                        <exclude>**/generated/**</exclude>
                        <!-- Bundled license files -->
                        <exclude>**/LICENSE*</exclude>
                        <!-- Python venv -->
                        <exclude>**/venv/**</exclude>
                        <!-- Generated lock file -->
                        <exclude>**/go.sum/**</exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- Java code style -->
            <plugin>
                <groupId>com.diffplug.spotless</groupId>
                <artifactId>spotless-maven-plugin</artifactId>
                <version>${spotless-maven-plugin.version}</version>
                <configuration>
                    <java>
                        <googleJavaFormat>
                            <version>1.7</version>
                            <style>GOOGLE</style>
                        </googleJavaFormat>
                        <removeUnusedImports/>
                        <excludes>
                            <exclude>**/generated/**/*.*</exclude>
                        </excludes>
                    </java>
                </configuration>
                <executions>
                    <execution>
                        <id>spotless-check</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Dependency Enforcer -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>3.0.0-M2</version>
                <executions>
                    <execution>
                        <id>enforce</id>
                        <configuration>
                            <rules>
                                <dependencyConvergence/>
                            </rules>
                        </configuration>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!--surefire for unit tests and integration tests-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
                <configuration>
                    <trimStackTrace>false</trimStackTrace>
                    <systemPropertyVariables>
                        <forkNumber>0${surefire.forkNumber}</forkNumber>
                        <project.basedir>${project.basedir}</project.basedir>
                    </systemPropertyVariables>
                    <argLine>-Xms256m -Xmx2048m -Dmvn.forkNumber=${surefire.forkNumber} -XX:+UseG1GC</argLine>
                </configuration>
                <executions>
                    <!--execute all the unit tests-->
                    <execution>
                        <id>default-test</id>
                        <phase>test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>${test.unit.pattern}</include>
                            </includes>
                            <reuseForks>true</reuseForks>
                        </configuration>
                    </execution>
                    <!--execute all the integration tests-->
                    <execution>
                        <id>integration-tests</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <includes>
                                <include>**/*ITCase.*</include>
                            </includes>
                            <excludes>
                                <exclude>${test.unit.pattern}</exclude>
                            </excludes>
                            <reuseForks>false</reuseForks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

