<?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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>26</version>
        <relativePath />
    </parent>

    <!-- 
     * Please do not use this pom for other deltaspike modules.
     * Instead use the one from deltaspike/parent/pom.xml!
     *
     * This very pom.xml contains only the basic build layout 
     * and no build-rules at all. See parent/pom.xml for all
     * the dependencyManagement and plugin configuration stuff. 
    -->
    <groupId>org.apache.deltaspike</groupId>
    <artifactId>deltaspike</artifactId>
    <version>2.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>Apache DeltaSpike</name>
    <description>
        Apache DeltaSpike CDI Extensions.
    </description>
    <url>http://deltaspike.apache.org</url>

    <properties>
        <asciidoctor.version>1.5.2</asciidoctor.version>
        <version.deltaspike.latest.stable>1.9.6</version.deltaspike.latest.stable>
        <version.deltaspike.latest.snapshot>1.9.7-SNAPSHOT</version.deltaspike.latest.snapshot>
        <svn.scmPubCheckoutDirectory>${project.build.directory}/co-site</svn.scmPubCheckoutDirectory>

        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>

    <scm>
        <connection>scm:git:https://git-wip-us.apache.org/repos/asf/deltaspike.git</connection>
        <developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/deltaspike.git</developerConnection>
        <url>https://git-wip-us.apache.org/repos/asf/deltaspike.git</url>
        <tag>HEAD</tag>
    </scm>

    <modules>
        <module>deltaspike</module>
        <module>documentation</module>
        <module>site</module>
    </modules>

    <build>
        <pluginManagement>
            <plugins>
                <!-- this is a hack to make mvn site not really run. -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-site-plugin</artifactId>
                    <configuration>
                        <skip>true</skip>
                        <skipDeploy>true</skipDeploy>
                    </configuration>
                </plugin>


                <!-- SCM Publish plugin to publish documentation and site -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-scm-publish-plugin</artifactId>
                    <version>1.1</version>
                    <configuration>
                        <content>${project.reporting.outputDirectory}</content>
                        <pubScmUrl>scm:svn:${svn.scmPubUrl}</pubScmUrl>
                        <tryUpdate>true</tryUpdate>
                        <skipDeletedFiles>true</skipDeletedFiles>
                        <checkoutDirectory>${svn.scmPubCheckoutDirectory}</checkoutDirectory>
                        <serverId>deltaspike-site</serverId>
                    </configuration>
                </plugin>

                <!-- Configure ASCIIDOC plugin -->
                <plugin>
                    <groupId>org.asciidoctor</groupId>
                    <artifactId>asciidoctor-maven-plugin</artifactId>
                    <version>${asciidoctor.version}</version>
                    <configuration>
                        <sourceDirectory>src/main/asciidoc</sourceDirectory>
                        <outputDirectory>${project.reporting.outputDirectory}</outputDirectory>
                        <sourceHighlighter>coderay</sourceHighlighter>
                        <backend>html</backend>
                        <templateDir>../template</templateDir>
                        <eruby>erb</eruby>
                        <preserveDirectories>true</preserveDirectories>
                        <attributes>
                            <toc>true</toc>
                            <icons>font</icons>
                            <latestStable>${version.deltaspike.latest.stable}</latestStable>
                            <latestSnapshot>${version.deltaspike.latest.snapshot}</latestSnapshot>
                        </attributes>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>

        <plugins>
            <!-- we need to tweak the maven-release-plugin for GIT -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <pushChanges>false</pushChanges>
                    <localCheckout>true</localCheckout>
                    <autoVersionSubmodules>true</autoVersionSubmodules>

                    <preparationGoals>clean install</preparationGoals>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <profiles>
        <profile>
            <!-- Profile used to publish documentation and site under staging 
                folder. -->
            <id>staging</id>
            <build>
                <pluginManagement>
                    <plugins>
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-scm-publish-plugin</artifactId>
                            <version>1.1</version>
                            <configuration>
                                <pubScmUrl>scm:svn:${svn.scmPubUrlStaging}</pubScmUrl>
                            </configuration>
                        </plugin>
                    </plugins>
                </pluginManagement>
            </build>
        </profile>
    </profiles>

</project>
