<!--

    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.pulsar</groupId>
    <artifactId>docker-images</artifactId>
    <version>2.6.3</version>
  </parent>
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.pulsar</groupId>
  <artifactId>pulsar-docker-image</artifactId>
  <name>Apache Pulsar :: Docker Images :: Pulsar Latest Version</name>
  <packaging>pom</packaging>

  <dependencies>
    <dependency>
      <groupId>org.apache.pulsar</groupId>
      <artifactId>pulsar-server-distribution</artifactId>
      <version>${project.parent.version}</version>
      <classifier>bin</classifier>
      <type>tar.gz</type>
      <scope>provided</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>docker</id>
      <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-pulsar-clients-python-35</id>
                <phase>compile</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <skip>${skipBuildPythonClient}</skip>
                  <workingDirectory>${project.basedir}/target</workingDirectory>
                  <executable>${project.basedir}/../../pulsar-client-cpp/docker/build-wheels.sh</executable>
                  <arguments>
                    <!-- build python 3.7 -->
                    <argument>3.7 cp37-cp37m</argument>
                  </arguments>
                </configuration>
              </execution>
              <execution>
                <id>build-pulsar-cpp-client-deb</id>
                <phase>compile</phase>
                <goals>
                  <goal>exec</goal>
                </goals>
                <configuration>
                  <skip>${skipBuildCppClient}</skip>
                  <workingDirectory>${project.basedir}/target</workingDirectory>
                  <executable>${project.basedir}/../../pulsar-client-cpp/pkg/deb/docker-build-deb.sh</executable>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-pulsar-clients-python</id>
                <phase>compile</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <skip>${skipCopyPythonClients}</skip>
                  <tasks>
                    <echo>copy python wheel file</echo>
                    <mkdir dir="${basedir}/target/python-client"/>
                    <copydir src="${basedir}/../../pulsar-client-cpp/python/wheelhouse" dest="${basedir}/target/python-client"/>
                  </tasks>
                </configuration>
              </execution>
              <execution>
                <id>copy-pulsar-cpp-client</id>
                <phase>compile</phase>
                <goals>
                  <goal>run</goal>
                </goals>
                <configuration>
                  <skip>${skipCopyCppClient}</skip>
                  <tasks>
                    <echo>copy cpp client deb file</echo>
                    <mkdir dir="${basedir}/target/cpp-client"/>
                    <copydir src="${basedir}/../../pulsar-client-cpp/pkg/deb/BUILD/DEB" dest="${basedir}/target/cpp-client"/>
                  </tasks>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>dockerfile-maven-plugin</artifactId>
            <version>${dockerfile-maven.version}</version>
            <executions>
              <execution>
                <id>default</id>
                <goals>
                  <goal>build</goal>
                </goals>
              </execution>
              <execution>
                <id>add-no-repo-and-version</id>
                <goals>
                  <goal>tag</goal>
                </goals>
                <configuration>
                  <repository>pulsar</repository>
                  <tag>${project.version}</tag>
                </configuration>
              </execution>
              <execution>
                <id>add-no-repo-and-latest</id>
                <goals>
                  <goal>tag</goal>
                </goals>
                <configuration>
                  <repository>pulsar</repository>
                  <tag>latest</tag>
                </configuration>
              </execution>
              <execution>
                <id>tag-and-push-latest</id>
                <goals>
                  <goal>tag</goal>
                  <goal>push</goal>
                </goals>
                <configuration>
                  <repository>${docker.organization}/pulsar</repository>
                  <tag>latest</tag>
                </configuration>
              </execution>
            </executions>
            <configuration>
              <repository>${docker.organization}/pulsar</repository>
              <pullNewerImage>false</pullNewerImage>
              <tag>${project.version}</tag>
              <buildArgs>
                <PULSAR_TARBALL>target/pulsar-server-distribution-${project.version}-bin.tar.gz</PULSAR_TARBALL>
              </buildArgs>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-tarball</id>
                <goals>
                  <goal>copy-dependencies</goal>
                </goals>
                <phase>generate-resources</phase>
                <configuration>
                  <outputDirectory>${project.build.directory}/</outputDirectory>
                  <includeArtifactIds>pulsar-server-distribution</includeArtifactIds>
                  <excludeTransitive>true</excludeTransitive>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
