<?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.tika</groupId>
    <artifactId>tika-parent</artifactId>
    <version>1.23</version>
    <relativePath>tika-parent/pom.xml</relativePath>
  </parent>

  <artifactId>tika</artifactId>
  <packaging>pom</packaging>
  <name>Apache Tika</name>
  <url>https://tika.apache.org</url>

  <modules>
    <module>tika-parent</module>
    <module>tika-core</module>
    <module>tika-parsers</module>
    <module>tika-bundle</module>
    <module>tika-xmp</module>
    <module>tika-serialization</module>
    <module>tika-batch</module>
    <module>tika-app</module>
    <module>tika-server</module>
    <module>tika-translate</module>
    <module>tika-langdetect</module>
    <module>tika-example</module>
    <module>tika-java7</module>
    <module>tika-eval</module>
    <module>tika-dl</module>
    <module>tika-nlp</module>
  </modules>

  <profiles>
    <profile>
      <id>apache-release</id>
      <properties>
        <username>${user.name}</username>
      </properties>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>${maven.assembly.version}</version>
            <executions>
              <execution>
                <id>src</id>
                <goals>
                  <goal>single</goal>
                </goals>
                <phase>package</phase>
                <configuration>
                  <descriptors>
                    <descriptor>assembly.xml</descriptor>
                  </descriptors>
                </configuration>
              </execution>
              <execution>
                <id>source-release-assembly</id>
                <configuration>
                  <skipAssembly>true</skipAssembly>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>${maven.antrun.version}</version>
            <executions>
              <execution>
                <goals>
                  <goal>run</goal>
                </goals>
                <phase>deploy</phase>
                <configuration>
                  <tasks>
                    <mkdir dir="${basedir}/target/${project.version}" />
                    <copy todir="${basedir}/target/${project.version}" flatten="true">
                      <fileset dir="${basedir}">
                        <include name="CHANGES.txt" />
                        <include name="target/*-src.zip*" />
                        <include name="tika-app/target/tika-app-${project.version}.jar*" />
                        <include name="tika-server/target/tika-server-${project.version}.jar*" />
                        <include name="tika-eval/target/tika-eval-${project.version}.jar*" />
                      </fileset>
                    </copy>
                    <checksum algorithm="SHA-512" fileext=".sha512">
                      <fileset dir="${basedir}/target/${project.version}">
                        <include name="*.zip" />
                        <include name="*.?ar" />
                      </fileset>
                    </checksum>
                    <checksum file="${basedir}/target/${project.version}/tika-${project.version}-src.zip" algorithm="SHA-512" property="checksum" />
                    <echo file="${basedir}/target/vote.txt">
From: ${username}@apache.org
To: dev@tika.apache.org
    user@tika.apache.org
Subject: [VOTE] Release Apache Tika ${project.version} Candidate #N

A candidate for the Tika ${project.version} release is available at:
  https://dist.apache.org/repos/dist/dev/tika/

The release candidate is a zip archive of the sources in:
  https://github.com/apache/tika/tree/{project.version}-rcN/

The SHA-512 checksum of the archive is
  ${checksum}.

In addition, a staged maven repository is available here:
  https://repository.apache.org/content/repositories/orgapachetika-.../org/apache/tika

Please vote on releasing this package as Apache Tika ${project.version}.
The vote is open for the next 72 hours and passes if a majority of at
least three +1 Tika PMC votes are cast.

[ ] +1 Release this package as Apache Tika ${project.version}
[ ] -1 Do not release this package because...${line.separator}
                    </echo>
                    <echo />
                    <echo>
                      The release candidate has been prepared in:

                      ${basedir}/target/${project.version}

                      Please deploy it to people.apache.org like this:

                      scp -r ${basedir}/target/${project.version} people.apache.org:public_html/tika/

                      A release vote template has been generated for you:

                      file://${basedir}/target/vote.txt
                    </echo>
                    <echo />
                  </tasks>
                </configuration>
              </execution>
            </executions>
            <dependencies>
              <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant-nodeps</artifactId>
                <version>1.8.1</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>${rat.version}</version>
        <configuration>
          <excludes>
            <exclude>CHANGES.txt</exclude>
            <exclude>README.md</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <description>The Apache Tika™ toolkit detects and extracts metadata and structured text content from various documents
    using existing parser libraries.
  </description>
  <organization>
    <name>The Apache Software Foundation</name>
    <url>https://www.apache.org</url>
  </organization>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/TIKA</url>
  </issueManagement>
  <ciManagement>
    <system>Jenkins</system>
    <url>https://builds.apache.org/job/Tika-trunk/</url>
  </ciManagement>
</project>
