<?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">
  <parent>
    <artifactId>hudi-hadoop-docker</artifactId>
    <groupId>org.apache.hudi</groupId>
    <version>0.5.3-rc2</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <packaging>pom</packaging>
  <artifactId>hudi-hadoop-hive-docker</artifactId>

  <description>Base Docker Image with Hoodie</description>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <checkstyle.skip>true</checkstyle.skip>
    <main.basedir>${project.parent.parent.basedir}</main.basedir>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.hudi</groupId>
        <artifactId>hudi-hadoop-base-docker</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <phase>package</phase>
            <configuration>
              <tasks>
                <copy file="${project.basedir}/../../../../packaging/hudi-hadoop-mr-bundle/target/hudi-hadoop-mr-bundle-${project.version}.jar" tofile="target/hoodie-hadoop-mr-bundle.jar" />
                <copy file="${project.basedir}/../../../../packaging/hudi-hive-bundle/target/hudi-hive-bundle-${project.version}.jar" tofile="target/hoodie-hive-bundle.jar" />
                <copy file="${project.basedir}/../../../../packaging/hudi-spark-bundle/target/hudi-spark-bundle_${scala.binary.version}-${project.version}.jar" tofile="target/hoodie-spark-bundle.jar" />
                <copy
                  file="${project.basedir}/../../../../packaging/hudi-utilities-bundle/target/hudi-utilities-bundle_${scala.binary.version}-${project.version}.jar"
                  tofile="target/hoodie-utilities.jar"/>
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <!-- Build Docker image -->
      <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>dockerfile-maven-plugin</artifactId>
        <version>${dockerfile.maven.version}</version>
        <executions>
          <execution>
            <id>tag-latest</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>build</goal>
              <goal>tag</goal>
              <!-- <goal>push</goal> -->
            </goals>
            <configuration>
              <skip>${docker.build.skip}</skip>
              <pullNewerImage>false</pullNewerImage>
              <repository>apachehudi/hudi-hadoop_${docker.hadoop.version}-hive_${docker.hive.version}</repository>
              <force>true</force>
              <tag>latest</tag>
            </configuration>
          </execution>
          <execution>
            <id>tag-version</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>build</goal>
              <goal>tag</goal>
              <!-- <goal>push</goal> -->
            </goals>
            <configuration>
              <skip>${docker.build.skip}</skip>
              <pullNewerImage>false</pullNewerImage>
              <repository>apachehudi/hudi-hadoop_${docker.hadoop.version}-hive_${docker.hive.version}</repository>
              <force>true</force>
              <tag>${project.version}</tag>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
