<!--
   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>
    <groupId>org.apache.bookkeeper.tests</groupId>
    <artifactId>docker-images</artifactId>
    <version>4.9.2-SNAPSHOT</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.bookkeeper.tests</groupId>
  <artifactId>current-version-image</artifactId>
  <name>Apache BookKeeper :: Tests :: Docker Images :: Current Version</name>
  <packaging>pom</packaging>
  <dependencies>
    <dependency>
      <groupId>org.apache.bookkeeper</groupId>
      <artifactId>bookkeeper-dist-server</artifactId>
      <version>${project.parent.version}</version>
      <classifier>bin</classifier>
      <type>tar.gz</type>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <profiles>
    <profile>
      <id>docker</id>
      <activation>
        <property>
          <name>integrationTests</name>
        </property>
      </activation>
      <build>
        <plugins>
          <!-- build cpp client, copy the wheel file and then build docker image -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>${exec-maven-plugin.version}</version>
            <executions>
              <execution>
                <id>build-python-client</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <workingDirectory>${project.basedir}/target</workingDirectory>
                  <executable>${project.basedir}/../../../stream/clients/python/scripts/docker_build.sh</executable>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <!-- this task is used for copy docker scripts & python wheel file to build docker image -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>${maven-antrun-plugin.version}</version>
            <executions>
              <execution>
                <phase>generate-resources</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <tasks>
                    <echo>copy python wheel file</echo>
                    <mkdir dir="${project.basedir}/target/bookkeeper-client" />
                    <copydir src="${project.basedir}/../../../stream/clients/python/dist" dest="${project.basedir}/target/bookkeeper-client" />
                    <echo>copying docker scripts</echo>
                    <mkdir dir="${project.basedir}/target/scripts" />
                    <copydir src="${project.basedir}/../../../docker/scripts" dest="${project.basedir}/target/scripts" />
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>${dockerfile-maven-plugin.version}</version>
            <executions>
              <execution>
                <id>default</id>
                <goals>
                  <goal>build</goal>
                </goals>
              </execution>
              <execution>
                <id>add-latest-tag</id>
                <goals>
                  <goal>tag</goal>
                </goals>
                <configuration>
                  <repository>apachebookkeeper/bookkeeper-current</repository>
                  <tag>latest</tag>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <repository>apachebookkeeper/bookkeeper-current</repository>
              <tag>${project.version}</tag>
              <pullNewerImage>false</pullNewerImage>
              <noCache>true</noCache>
              <buildArgs>
                <BK_VERSION>${project.version}</BK_VERSION>
              </buildArgs>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>${maven-dependency-plugin.version}</version>
            <executions>
              <execution>
                <id>copy-docker-dependencies</id>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <phase>generate-resources</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/</outputDirectory>
                  <includeArtifactIds>bookkeeper-dist-server</includeArtifactIds>
                  <excludeTransitive>true</excludeTransitive>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
