<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2021 Nordix Foundation.
  ================================================================================
  Licensed 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.

  SPDX-License-Identifier: Apache-2.0
  ============LICENSE_END=========================================================
-->

<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.onap.policy.clamp</groupId>
        <artifactId>clamp-packages</artifactId>
        <version>6.3.0-SNAPSHOT</version>
    </parent>

    <packaging>pom</packaging>
    <artifactId>policy-clamp-docker</artifactId>
    <name>${project.artifactId}</name>
    <description>Policy clamp docker image</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <dist.project.version>${project.version}</dist.project.version>
        <docker.skip>false</docker.skip>
        <docker.skip.build>false</docker.skip.build>
        <docker.skip.push>false</docker.skip.push>
        <docker.pull.registry>nexus3.onap.org:10001</docker.pull.registry>
        <docker.push.registry>nexus3.onap.org:10003</docker.push.registry>
        <maven.build.timestamp.format>yyyyMMdd'T'HHmm</maven.build.timestamp.format>
    </properties>

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.groovy.maven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>1.0</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source>
                                println 'Project version: ' + project.properties['dist.project.version']
                                if (project.properties['dist.project.version'] != null) {
                                    def versionArray = project.properties['dist.project.version'].split('-')
                                    def minMaxVersionArray = versionArray[0].tokenize('.')
                                    if (project.properties['dist.project.version'].endsWith("-SNAPSHOT")) {
                                        project.properties['project.docker.latest.minmax.tag.version'] =
                                            minMaxVersionArray[0] + "." + minMaxVersionArray[1] + "-SNAPSHOT-latest"
                                    } else {
                                        project.properties['project.docker.latest.minmax.tag.version'] =
                                            minMaxVersionArray[0] + "." + minMaxVersionArray[1] + "-STAGING-latest"
                                    }
                                    println 'New tag for docker: ' + project.properties['project.docker.latest.minmax.tag.version']
                                }
                            </source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>io.fabric8</groupId>
                <artifactId>docker-maven-plugin</artifactId>

                <configuration>
                    <verbose>true</verbose>
                    <apiVersion>1.23</apiVersion>
                    <pullRegistry>${docker.pull.registry}</pullRegistry>
                    <pushRegistry>${docker.push.registry}</pushRegistry>

                    <images>
                        <image>
                            <name>onap/policy-clamp-runtime-acm</name>
                            <build>
                                <cleanup>try</cleanup>
                                <dockerFile>AcmRuntimeDockerfile</dockerFile>
                                <tags>
                                    <tag>${project.version}</tag>
                                    <tag>${project.version}-${maven.build.timestamp}</tag>
                                    <tag>${project.docker.latest.minmax.tag.version}</tag>
                                </tags>
                                <assembly>
                                    <inline>
                                        <dependencySets>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp:policy-clamp-tarball</include>
                                                </includes>
                                                <outputDirectory>/lib</outputDirectory>
                                                <outputFileNameMapping>policy-clamp-runtime-acm.tar.gz</outputFileNameMapping>
                                            </dependencySet>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp:policy-clamp-runtime-acm</include>
                                                </includes>
                                                <outputFileNameMapping>app.jar</outputFileNameMapping>
                                            </dependencySet>
                                        </dependencySets>
                                    </inline>
                                </assembly>
                            </build>
                        </image>
                        <image>
                            <name>onap/policy-clamp-ac-pf-ppnt</name>
                            <alias>onap-policy-clamp-ac-pf-ppnt</alias>
                            <build>
                                <cleanup>try</cleanup>
                                <dockerFile>PolicyParticipantDockerfile</dockerFile>
                                <tags>
                                    <tag>${project.version}</tag>
                                    <tag>${project.version}-${maven.build.timestamp}</tag>
                                    <tag>${project.docker.latest.minmax.tag.version}</tag>
                                </tags>
                                <assembly>
                                    <inline>
                                        <dependencySets>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp:policy-clamp-tarball</include>
                                                </includes>
                                                <outputDirectory>/lib</outputDirectory>
                                                <outputFileNameMapping>policy-participant.tar.gz</outputFileNameMapping>
                                            </dependencySet>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp.participant:policy-clamp-participant-impl-policy</include>
                                                </includes>
                                                <outputFileNameMapping>app.jar</outputFileNameMapping>
                                            </dependencySet>
                                        </dependencySets>
                                    </inline>
                                </assembly>
                            </build>
                        </image>
                        <image>
                            <name>onap/policy-clamp-ac-k8s-ppnt</name>
                            <alias>onap-policy-clamp-ac-k8s-ppnt</alias>
                            <build>
                                <cleanup>try</cleanup>
                                <dockerFile>KubernetesParticipantDockerfile</dockerFile>
                                <tags>
                                    <tag>${project.version}</tag>
                                    <tag>${project.version}-${maven.build.timestamp}</tag>
                                    <tag>${project.docker.latest.minmax.tag.version}</tag>
                                </tags>
                                <assembly>
                                    <inline>
                                        <dependencySets>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp:policy-clamp-tarball</include>
                                                </includes>
                                                <outputDirectory>/lib</outputDirectory>
                                                <outputFileNameMapping>kubernetes-participant.tar.gz</outputFileNameMapping>
                                            </dependencySet>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp.participant:policy-clamp-participant-impl-kubernetes</include>
                                                </includes>
                                                <outputFileNameMapping>app.jar</outputFileNameMapping>
                                            </dependencySet>
                                        </dependencySets>
                                    </inline>
                                </assembly>
                            </build>
                        </image>
                        <image>
                            <name>onap/policy-clamp-ac-http-ppnt</name>
                            <alias>onap-policy-clamp-ac-http-ppnt</alias>
                            <build>
                                <cleanup>try</cleanup>
                                <dockerFile>HttpParticipantDockerfile</dockerFile>
                                <tags>
                                    <tag>${project.version}</tag>
                                    <tag>${project.version}-${maven.build.timestamp}</tag>
                                    <tag>${project.docker.latest.minmax.tag.version}</tag>
                                </tags>
                                <assembly>
                                    <inline>
                                        <dependencySets>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp:policy-clamp-tarball</include>
                                                </includes>
                                                <outputDirectory>/lib</outputDirectory>
                                                <outputFileNameMapping>http-participant.tar.gz</outputFileNameMapping>
                                            </dependencySet>
                                            <dependencySet>
                                                <includes>
                                                    <include>org.onap.policy.clamp.participant:policy-clamp-participant-impl-http</include>
                                                </includes>
                                                <outputFileNameMapping>app.jar</outputFileNameMapping>
                                            </dependencySet>
                                        </dependencySets>
                                    </inline>
                                </assembly>
                            </build>
                        </image>
                    </images>
                </configuration>

                <executions>
                    <execution>
                        <id>clean-images</id>
                        <phase>pre-clean</phase>
                        <goals>
                            <goal>remove</goal>
                        </goals>
                        <configuration>
                            <removeAll>true</removeAll>
                        </configuration>
                    </execution>

                    <execution>
                        <id>generate-images</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>

                    <execution>
                        <id>push-images</id>
                        <phase>deploy</phase>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.onap.policy.clamp</groupId>
            <artifactId>policy-clamp-tarball</artifactId>
            <version>${project.version}</version>
            <classifier>tarball</classifier>
            <type>tar.gz</type>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.clamp.participant</groupId>
            <artifactId>policy-clamp-participant-impl-policy</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.clamp.participant</groupId>
            <artifactId>policy-clamp-participant-impl-kubernetes</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.clamp.participant</groupId>
            <artifactId>policy-clamp-participant-impl-http</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>
