<?xml version="1.0" encoding="UTF-8"?>
<!--
    Copyright 2017 Huawei Technologies Co., Ltd.

    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.
 -->
<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>
    <properties>
        <groovy-maven-plugin.version>2.0</groovy-maven-plugin.version>
        <gmaven-plugin.version>1.5</gmaven-plugin.version>
    </properties>

    <parent>
        <groupId>org.onap.vnfsdk.validation</groupId>
        <artifactId>validation</artifactId>
        <version>1.2.20-SNAPSHOT</version>
    </parent>

    <artifactId>csarvalidation-deployment</artifactId>
    <name>csarvalidation/deployment</name>
    <packaging>pom</packaging>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.gmaven</groupId>
                    <artifactId>groovy-maven-plugin</artifactId>
                    <version>${groovy-maven-plugin.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>gmaven-plugin</artifactId>
                <version>${gmaven-plugin.version}</version>
                <executions>
                    <execution>
                        <id>CSAR validator</id>
                        <phase>package</phase>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <configuration>
                            <source>
                                System.out.println("******** Going to make release zip ********")

                                deployFolder = "${project.build.directory}/deployoutput"
                                deployUnzip = "${project.build.directory}/deployunzip"
                                outfileName = "csarvalidator-${project.version}.zip"

                                ant.delete(dir: "${deployFolder}")
                                ant.mkdir(dir: "${deployFolder}")

                                ant.delete(dir: "${deployUnzip}")
                                ant.mkdir(dir: "${deployUnzip}")

                                ant.copy(todir: "${deployUnzip}/") {
                                fileset(dir: "${project.build.directory}/../../csarvalidation/target/lib")
                                }

                                ant.zip(destfile: "${deployFolder}/${outfileName}") {
                                fileset(dir: "${deployUnzip}")
                                }

                                System.out.println("******** completed. ************")
                            </source>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
             <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-artifacts</id>
                        <phase>package</phase>
                        <goals>
                            <goal>attach-artifact</goal>
                        </goals>
                        <configuration>
                            <artifacts>
                                <artifact>
                                    <file>${project.build.directory}/deployoutput/csarvalidator-${project.version}.zip</file>
                                    <type>zip</type>
                                </artifact>
                            </artifacts>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
