<!--
  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>
        <!-- Tools -->
        <fileSet>
            <directory>${basedir}/../tools/target/oozie-tools-${project.version}-tools/oozie-tools-${project.version}/bin</directory>
            <outputDirectory>/bin</outputDirectory>
            <includes>
                <include>*</include>
            </includes>
            <fileMode>0755</fileMode>
        </fileSet>
        <fileSet>
            <directory>${basedir}/../tools/target/oozie-tools-${project.version}-tools/oozie-tools-${project.version}/libtools</directory>
            <outputDirectory>/libtools</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>
        <!--  Oozie Login Server Example war and jar -->
         <fileSet>
            <directory>${basedir}/../login/target</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>oozie-login.war</include>
                <include>oozie-login.jar</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>
            <destName>oozie-default.xml.reference</destName>
        </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}.tar.gz</source>
            <outputDirectory>/</outputDirectory>
            <fileMode>0444</fileMode>
        </file>
    </files>
</assembly>
