<!-- ============LICENSE_START======================================================= 
	Copyright (C) 2019 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.svnfm</groupId>
		<artifactId>packages</artifactId>
		<version>1.0.0-SNAPSHOT</version>
	</parent>

	<packaging>pom</packaging>
	<artifactId>docker</artifactId>
	<name>Docker Images</name>
	<description>Docker Images</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<svnfm.project.version>${project.version}</svnfm.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['svnfm.project.version'];
								def versionArray;
								if
								(
								project.properties['svnfm.project.version'] != null ) {
								versionArray =
								project.properties['svnfm.project.version'].split('-');
								}

								if (
								project.properties['svnfm.project.version'].endsWith("-SNAPSHOT")
								)
								{
								project.properties['project.docker.latesttag.version']=versionArray[0]
								+ "-SNAPSHOT-latest";
								} else {
								project.properties['project.docker.latesttag.version']=versionArray[0]
								+ "-STAGING-latest";
								}

								println 'New tag for docker: ' +
								project.properties['project.docker.latesttag.version'];
							</source>
						</configuration>
					</execution>
				</executions>
			</plugin>

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

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

					<images>
						<image>
							<name>onap/svnfm/simulator</name>
							<build>
								<cleanup>try</cleanup>
								<dockerFile>Dockerfile</dockerFile>
								<tags>
									<tag>${project.version}</tag>
									<tag>${project.version}-${maven.build.timestamp}</tag>
									<tag>${project.docker.latesttag.version}</tag>
								</tags>
								<assembly>
									<inline>
										<dependencySets>
											<dependencySet>
												<includes>
													<include>org.onap.svnfm:simulator</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>
						<configuration>
							<image>onap/svnfm/simulator</image>
						</configuration>
					</execution>
				</executions>
			</plugin>

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