<?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.tika</groupId>
        <artifactId>tika</artifactId>
        <version>${revision}</version>
    </parent>

    <artifactId>tika-docs</artifactId>
    <packaging>pom</packaging>
    <name>Apache Tika Documentation</name>

    <properties>
        <!-- Update this when a new stable version is released -->
        <tika.stable.version>3.2.3</tika.stable.version>
        <antora.version>1.0.0-alpha.5</antora.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <configuration>
                    <inputExcludes>
                        <!-- AsciiDoc pages and plain-text data files do not carry ASF headers -->
                        <inputExclude>modules/**/*.adoc</inputExclude>
                        <inputExclude>modules/**/*.txt</inputExclude>
                        <inputExclude>modules/**/*.yml</inputExclude>
                        <!-- UI assets: CSS, SVG, and Handlebars templates -->
                        <inputExclude>supplemental-ui/**</inputExclude>
                    </inputExcludes>
                </configuration>
            </plugin>
            <!-- Ensure mvn clean removes Antora output -->
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>${project.basedir}/target</directory>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
            <!-- Stamp the current git commit and build date onto a
                 sibling copy of antora-playbook.yml so the docs home
                 page shows which commit produced the site. The copy
                 lives next to the original so Antora's relative-path
                 resolution (e.g. ./supplemental-ui) still works. The
                 generated file is gitignored. -->
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>stamp-antora-playbook</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <exec executable="git" outputproperty="git.commit.short" failonerror="true">
                                    <arg value="rev-parse"/>
                                    <arg value="--short"/>
                                    <arg value="HEAD"/>
                                </exec>
                                <tstamp>
                                    <format property="build.date" pattern="yyyy-MM-dd"/>
                                </tstamp>
                                <copy file="${project.basedir}/antora-playbook.yml"
                                      tofile="${project.basedir}/antora-playbook-stamped.yml"
                                      overwrite="true"/>
                                <replaceregexp file="${project.basedir}/antora-playbook-stamped.yml"
                                               match="(tika-stable-version:.*)"
                                               replace="\1${line.separator}    git-commit: '${git.commit.short} (${build.date})'"
                                               byline="true"/>
                            </target>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- Antora plugin for building the documentation site.
                 Bound to prepare-package so target/site/ exists before
                 the assembly runs.

                 nodeInstallDirectory is moved out of target/ so 'mvn
                 clean' does not nuke the downloaded Node.js. First
                 build per machine downloads ~100MB once; subsequent
                 builds reuse it. The plugin's nodeExecutable param
                 cannot reuse a system Node on distros where npm and
                 node packages aren't co-located (Debian/Ubuntu), so
                 caching the plugin-managed install is the practical
                 alternative. -->
            <plugin>
                <groupId>org.antora</groupId>
                <artifactId>antora-maven-plugin</artifactId>
                <version>${antora.version}</version>
                <extensions>true</extensions>
                <configuration>
                    <nodeInstallDirectory>${user.home}/.cache/tika-antora</nodeInstallDirectory>
                    <playbook>antora-playbook-stamped.yml</playbook>
                    <packages>
                        <package>@antora/lunr-extension@1.0.0-alpha.8</package>
                    </packages>
                    <options>
                        <!-- Use 'fatal' for development to ignore broken links, 'error' for CI -->
                        <option>--log-failure-level=fatal</option>
                    </options>
                </configuration>
                <executions>
                    <execution>
                        <id>build-antora-site</id>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>antora</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <!-- Maven Assembly plugin to package the built site into a
                 tar.gz for release distribution. Runs after Antora. -->
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <executions>
                    <execution>
                        <id>make-docs-archive</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                        <configuration>
                            <descriptors>
                                <descriptor>src/assembly/docs.xml</descriptor>
                            </descriptors>
                            <finalName>${project.artifactId}-${project.version}</finalName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
