<?xml version="1.0" encoding="UTF-8"?>
<!--* ============LICENSE_START==================================================== 
    * =========================================================================== 
    * org.onap.aaf 
    * Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. 
    * =========================================================================== 
    * 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. 
    * ============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.aaf.cadi.sidecar</groupId>
		<artifactId>sidecar</artifactId>
		<version>2.1.16-SNAPSHOT</version>
	</parent>

	<artifactId>tproxy-config</artifactId>
	<packaging>jar</packaging>

	<name>Sidecar tproxy-config</name>
	<description>ONAP AAF InitContainer For Pluggable Security</description>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<version.io.fabric8.fabric8-maven-plugin>3.5.32</version.io.fabric8.fabric8-maven-plugin>
		<docker.location>${project.basedir}/target/${project.artifactId}-${project.version}-build</docker.location>
		<!-- <skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo> -->
	</properties>

	<build>
		<plugins>
			<plugin>
				<groupId>com.mycila</groupId>
				<artifactId>license-maven-plugin</artifactId>
				<configuration>
					<header>License.txt</header>
					<includes>
						<include>src/main/bin/**</include>
						<include>src/docker/bin/**</include>
						<include>pom.xml</include>
					</includes>
					<skipExistingHeaders>true</skipExistingHeaders>
				</configuration>
				<executions>
					<execution>
						<goals>
							<!-- Set goal from "check" to "format" to auto update license headers -->
							<goal>check</goal>
						</goals>
						<phase>validate</phase>
					</execution>
				</executions>
			</plugin>
			
			<plugin>
                		<artifactId>maven-assembly-plugin</artifactId>
                		<configuration>
                    			<descriptors>
                        			<descriptor>src/main/assembly/descriptor.xml</descriptor>
                    			</descriptors>
                		</configuration>
                		<executions>
                    			<execution>
                        			<id>make-assembly</id>
                        			<phase>package</phase>
                        			<goals>
                            				<goal>single</goal>
                        			</goals>
                    			</execution>
                		</executions>
            		</plugin>

			<!--<plugin>
                               	<groupId>io.fabric8</groupId>
                        	<artifactId>docker-maven-plugin</artifactId>
                        	<version>0.28.0</version>
                       		<configuration>
                            		<verbose>true</verbose>
                            		<apiVersion>${docker.apiVersion}</apiVersion>
		                 	<pullRegistry>${docker.pull.registry}</pullRegistry>
                            		<pushRegistry>${docker.push.registry}</pushRegistry>
                                	<images>
                                		<image>
                                    			<name>${docker.push.registry}/onap/${project.artifactId}</name>
                                    			<build>
                                        			<cleanup>try</cleanup>
                                       				<dockerFileDir>${project.basedir}/src/main/docker</dockerFileDir>
                                        			<tags>
                                            				<tag>latest</tag>
                                        			</tags>
                                       				<assembly>
                                            				<inline>
                                                				<fileSets>
                                                    					<fileSet>
                                                        					<directory>${docker.location}</directory>
                                                        					<outputDirectory>/${project.artifactId}</outputDirectory>
                                                    					</fileSet>
                                                				</fileSets>
                                            				</inline>
                                        			</assembly>
                                    			</build>
                                		</image>
                            		</images>
                        	</configuration>
				<executions>
                             		<execution>
                                 		<id>generate-images</id>
						<phase>install</phase>
                             		</execution>
                             		<execution>
                                 		<id>push-images</id>
                                 		<phase>deploy</phase>
                                 		<goals>
                                     			<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>
</project>
