<?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">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-parent</artifactId>
    <version>0.4.0-incubating</version>
    <relativePath>../pom.xml</relativePath>
  </parent>

  <artifactId>beam-runners-parent</artifactId>

  <packaging>pom</packaging>

  <name>Apache Beam :: Runners</name>

  <modules>
    <module>core-java</module>
    <module>direct-java</module>
    <module>flink</module>
    <module>google-cloud-dataflow-java</module>
    <module>spark</module>
    <module>apex</module>
  </modules>

  <profiles>
    <profile>
      <id>release</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-checkstyle-plugin</artifactId>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>findbugs-maven-plugin</artifactId>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- A profile that adds an integration test phase if and only if
         the runnableOnServicePipelineOptions maven property has been set.
         It should be set to a valid PipelineOptions JSON string. -->
    <profile>
      <id>runnable-on-service-tests</id>
      <activation>
        <property><name>runnableOnServicePipelineOptions</name></property>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-surefire-plugin</artifactId>
              <executions>
                <execution>
                  <id>runnable-on-service-tests</id>
                  <phase>integration-test</phase>
                  <goals>
                    <goal>test</goal>
                  </goals>
                  <configuration>
                    <groups>org.apache.beam.sdk.testing.RunnableOnService</groups>
                    <parallel>all</parallel>
                    <threadCount>4</threadCount>
                    <dependenciesToScan>
                      <dependency>org.apache.beam:beam-sdks-java-core</dependency>
                    </dependenciesToScan>
                    <systemPropertyVariables>
                      <beamTestPipelineOptions>${runnableOnServicePipelineOptions}</beamTestPipelineOptions>
                    </systemPropertyVariables>
                  </configuration>
                </execution>
              </executions>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </profile>
  </profiles>
</project>
