<?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.camel.quarkus</groupId>
        <artifactId>camel-quarkus-build-parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../build-parent/pom.xml</relativePath>
    </parent>

    <artifactId>camel-quarkus-integration-tests</artifactId>
    <packaging>pom</packaging>

    <name>Camel Quarkus :: Integration Tests</name>

    <modules>
        <!-- build those first -->
        <module>core</module>
        <module>core-cdi</module>
        <module>netty4-http</module>

        <module>aws</module>
        <module>infinispan</module>
        <module>jdbc</module>
        <module>salesforce</module>
        <module>servlet</module>
    </modules>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-integration-test-class-transformer-deployment</artifactId>
                <version>${quarkus.version}</version>
            </dependency>
            <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-integration-test-class-transformer</artifactId>
                <version>${quarkus.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>test-project-sanity-checks</id>
            <activation>
                <file>
                    <!-- Run the script only for the child projects  -->
                    <exists>../test-project-sanity-checks.groovy</exists>
                </file>
            </activation>

            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.gmavenplus</groupId>
                        <artifactId>gmavenplus-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>test-project-sanity-checks</id>
                                <goals>
                                    <goal>execute</goal>
                                </goals>
                                <phase>validate</phase>
                                <configuration>
                                    <scripts>
                                        <script>file:///${project.basedir}/../test-project-sanity-checks.groovy</script>
                                    </scripts>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>

        </profile>
    </profiles>


</project>
