<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2018 Ericsson. All rights reserved.
   Modifications Copyright (C) 2019-2020 Bell Canada.
   Modifications Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
   Modifications Copyright (C) 2022 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.apex-pdp.packages</groupId>
        <artifactId>apex-packages</artifactId>
        <version>2.8.0-SNAPSHOT</version>
    </parent>

    <artifactId>apex-pdp-docker</artifactId>
    <packaging>pom</packaging>
    <name>Policy APEX PDP - Docker build</name>
    <description>ONAP Policy APEX PDP Docker Build</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.contextDir>${project.basedir}/src/main/docker</docker.contextDir>
        <maven.build.timestamp.format>yyyyMMdd'T'HHmm</maven.build.timestamp.format>
    </properties>

    <build>
        <finalName>${project.artifactId}-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source>https://github.com/onap/policy-docker/raw/master/utils/groovy/docker-tag.groovy</source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <plugin>
                <groupId>io.github.git-commit-id</groupId>
                <artifactId>git-commit-id-maven-plugin</artifactId>
                <version>5.0.0</version>
                <executions>
                    <execution>
                        <id>get-the-git-infos</id>
                        <goals>
                            <goal>revision</goal>
                        </goals>
                        <phase>initialize</phase>
                    </execution>
                </executions>
                <configuration>
                    <skipPoms>false</skipPoms>
                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
                    <includeOnlyProperties>
                        <includeOnlyProperty>^git.build.(time|version)$</includeOnlyProperty>
                        <includeOnlyProperty>^git.commit.id.abbrev$</includeOnlyProperty>
                    </includeOnlyProperties>
                    <commitIdGenerationMode>full</commitIdGenerationMode>
                </configuration>
            </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-apex-pdp</name>
                            <build>
                                <cleanup>try</cleanup>
                                <dockerFile>${dockerFile}</dockerFile>
                                <contextDir>${docker.contextDir}</contextDir>
                                <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.apex-pdp.packages:apex-pdp-package-full</include>
                                                </includes>
                                                <outputDirectory>.</outputDirectory>
                                                <outputFileNameMapping>apex-pdp-package-full.tar.gz</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>
                        <configuration>
                            <image>onap/policy-apex-pdp</image>
                        </configuration>
                    </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>${project.groupId}</groupId>
            <artifactId>apex-pdp-package-full</artifactId>
            <version>${project.version}</version>
            <type>tar.gz</type>
        </dependency>
    </dependencies>
</project>
