<?xml version="1.0"?>
<!--
   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 xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.1 http://maven.apache.org/xsd/assembly-1.1.1.xsd">
  <!--This 'all' id is not appended to the produced bundle because we do this:
    http://maven.apache.org/plugins/maven-assembly-plugin/faq.html#required-classifiers
  -->
  <formats>
    <format>tar.gz</format>
  </formats>
  <fileSets>
    <fileSet>
      <includes>
        <include>${basedir}/*.txt</include>
      </includes>
      <outputDirectory>share/doc/${artifactId}</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>target/conf</directory>
      <outputDirectory>etc/chukwa</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>contrib/solr</directory>
      <outputDirectory>etc/solr</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>bin</directory>
      <includes>
        <include>chukwa</include>
        <include>dailyRolling.sh</include>
        <include>hourlyRolling.sh</include>
      </includes>
      <outputDirectory>bin</outputDirectory>
      <fileMode>755</fileMode>
    </fileSet>
    <fileSet>
      <directory>bin</directory>
      <includes>
        <include>chukwa-config.sh</include>
      </includes>
      <outputDirectory>libexec</outputDirectory>
      <fileMode>755</fileMode>
    </fileSet>
    <fileSet>
      <directory>bin</directory>
      <includes>
        <include>chukwa-daemon.sh</include>
        <include>chukwa-daemons.sh</include>
        <include>slaves.sh</include>
        <include>start-*.sh</include>
        <include>stop-*.sh</include>
      </includes>
      <outputDirectory>sbin</outputDirectory>
      <fileMode>755</fileMode>
    </fileSet>
    <fileSet>
      <directory>lib</directory>
      <outputDirectory>share/${artifactId}/lib</outputDirectory>
    </fileSet>
    <fileSet>
      <includes>
          <include>VERSION</include>
      </includes>
      <directory>${project.build.directory}</directory>
      <outputDirectory>share/${artifactId}</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>target</directory>
      <outputDirectory>share/chukwa</outputDirectory>
      <includes>
          <include>${artifactId}-${project.version}.jar</include>
          <include>${artifactId}-${project.version}-tests.jar</include>
          <include>${artifactId}-${project.version}-client.jar</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>target</directory>
      <outputDirectory>share/chukwa/webapps</outputDirectory>
      <includes>
          <include>hicc.war</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>target/site</directory>
      <outputDirectory>docs</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>script</directory>
      <outputDirectory>share/${artifactId}/script</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>src/packages</directory>
      <outputDirectory>sbin</outputDirectory>
      <fileMode>755</fileMode>
      <includes>
          <include>update-${artifactId}-env.sh</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <useProjectArtifact>false</useProjectArtifact>
      <outputDirectory>share/${artifactId}/lib</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
</assembly>
