<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you 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.
-->
<assembly>
    <id>distro</id>
    <formats>
        <format>dir</format>
        <format>tar.gz</format>
    </formats>
    <includeBaseDirectory>true</includeBaseDirectory>
    <baseDirectory>oozie-${project.version}</baseDirectory>
    <fileSets>
        <!-- Oozie configuration files -->
        <fileSet>
            <directory>${basedir}/../core/src/main/conf/</directory>
            <outputDirectory>/conf</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>
        <!-- Distro files, readme, licenses, etc -->
        <fileSet>
            <directory>${basedir}/../</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>license.txt</include>
                <include>notice.txt</include>
                <include>readme.txt</include>
                <include>release-log.txt</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${basedir}/src/main/bin</directory>
            <outputDirectory>/bin</outputDirectory>
            <includes>          
                <include>*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
        <!-- Client -->
        <fileSet>
            <directory>${basedir}/../client/target/oozie-client-${project.version}-client/oozie-client-${project.version}/bin</directory>
            <outputDirectory>/bin</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>${basedir}/../client/target/oozie-client-${project.version}-client/oozie-client-${project.version}/lib</directory>
            <outputDirectory>/lib</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
        </fileSet>
        <!-- Embedded Tomcat -->
        <fileSet>
            <directory>${basedir}/target/tomcat/oozie-server</directory>
            <outputDirectory>/oozie-server</outputDirectory>
            <excludes>
                <exclude>bin/*.sh</exclude>
            </excludes>
        </fileSet>
        <fileSet>
            <directory>${basedir}/target/tomcat/oozie-server/bin</directory>
            <outputDirectory>/oozie-server/bin</outputDirectory>
            <includes>
                <include>*.sh</include>
            </includes>
            <fileMode>0555</fileMode>
        </fileSet>
    </fileSets>
    <files>
        <!-- Oozie configuration files -->
        <file>
            <source>${basedir}/../core/src/main/resources/oozie-default.xml</source>
            <outputDirectory>/conf</outputDirectory>
        </file>
        <!-- Oozie core jar -->
        <file>
            <source>${basedir}/../core/target/oozie-core-${project.version}.jar</source>
            <outputDirectory>/oozie-core</outputDirectory>
        </file>
        <!-- Oozie core test jar -->
        <file>
            <source>${basedir}/../core/target/oozie-core-${project.version}-tests.jar</source>
            <outputDirectory>/oozie-core</outputDirectory>
        </file>
        <!-- Oozie war -->
        <file>
            <source>${basedir}/../webapp/target/oozie-webapp-${project.version}.war</source>
            <outputDirectory>/</outputDirectory>
            <destName>oozie.war</destName>
        </file>
        <!-- Oozie Documentation -->
        <file>
            <source>${basedir}/../docs/target/oozie-docs-${project.version}-docs.zip</source>
            <outputDirectory>/</outputDirectory>
            <destName>docs.zip</destName>
        </file>
        <!-- Oozie Client TAR.GZ  -->
        <file>
            <source>${basedir}/../client/target/oozie-client-${project.version}-client.tar.gz</source>
            <outputDirectory>/</outputDirectory>
            <destName>oozie-client-${project.version}.tar.gz</destName>
        </file>
        <!-- Oozie examples TAR.GZ  -->
        <file>
            <source>${basedir}/../examples/target/oozie-examples-${project.version}-examples.tar.gz</source>
            <outputDirectory>/</outputDirectory>
            <destName>oozie-examples.tar.gz</destName>
        </file>
        <!-- Oozie sharelib TAR.GZ  -->
        <file>
            <source>${basedir}/../sharelib/target/oozie-sharelib-${project.version}-sharelib.tar.gz</source>
            <outputDirectory>/</outputDirectory>
            <destName>oozie-sharelib-${project.version}.tar.gz</destName>
            <fileMode>0444</fileMode>
        </file>
    </files>
</assembly>
