<?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>23</version>
    </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>1.9.5-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.4</version.deltaspike.latest.stable>
        <version.deltaspike.latest.snapshot>1.9.5-SNAPSHOT</version.deltaspike.latest.snapshot>
        <svn.scmPubCheckoutDirectory>${project.build.directory}/co-site</svn.scmPubCheckoutDirectory>
    </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>
