<!--
  ============LICENSE_START=======================================================
  ONAP
  ================================================================================
  Copyright (C) 2019 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=========================================================
  -->

<!-- Defines how we build the .zip file which is our distribution. -->

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">

    <id>feature-lifecycle</id>

    <formats>
        <format>zip</format>
    </formats>

    <includeBaseDirectory>false</includeBaseDirectory>

    <fileSets>
        <fileSet>
            <directory>target</directory>
            <outputDirectory>lib/feature</outputDirectory>
            <includes>
                <include>feature-lifecycle-${project.version}.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>target/assembly/lib</directory>
            <outputDirectory>lib/dependencies</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>src/main/feature/config</directory>
            <outputDirectory>config</outputDirectory>
            <fileMode>0644</fileMode>
            <excludes/>
        </fileSet>
        <fileSet>
            <directory>src/main/feature/bin</directory>
            <outputDirectory>bin</outputDirectory>
            <fileMode>0755</fileMode>
            <excludes/>
        </fileSet>
        <fileSet>
            <directory>src/main/feature/install</directory>
            <outputDirectory>install</outputDirectory>
            <fileMode>0755</fileMode>
            <excludes/>
        </fileSet>
    </fileSets>

</assembly>
