<!--
  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>bin</id>
  <formats>
    <format>tar.gz</format>
  </formats>

  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <useProjectArtifact>true</useProjectArtifact>
      <useTransitiveDependencies>false</useTransitiveDependencies>
      <includes>
        <include>${groupId}:${artifactId}:*</include>
      </includes>
    </dependencySet>
  </dependencySets>

  <fileSets>
    <fileSet>
      <directory>./</directory>
      <outputDirectory>.</outputDirectory>
      <includes>
        <include>LICENSE</include>
        <include>NOTICE</include>
        <include>README.md</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>src/main/assembly/contents/</directory>
      <outputDirectory>.</outputDirectory>
      <excludes>
        <exclude>**/bin/fluo-yarn</exclude>
      </excludes>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>src/main/assembly/contents/bin/fluo-yarn</source>
      <outputDirectory>bin</outputDirectory>
      <filtered>true</filtered>
    </file>
  </files>
</assembly>
