<!--

    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/ASSEMBLY/2.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
  <id>bin</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <includeBaseDirectory>true</includeBaseDirectory>
  <moduleSets>
    <moduleSet>
      <useAllReactorProjects>true</useAllReactorProjects>
    </moduleSet>
  </moduleSets>
  <fileSets>
    <fileSet>
      <directory>${basedir}/../../conf</directory>
      <lineEnding>unix</lineEnding>
    </fileSet>
    <fileSet>
      <directory>${basedir}/../../bin</directory>
      <lineEnding>unix</lineEnding>
      <fileMode>755</fileMode>
    </fileSet>
    <fileSet>
      <directory>${basedir}/licenses</directory>
    </fileSet>
    <!-- created `instances/deps` directory -->
    <fileSet>
      <directory>.</directory>
      <outputDirectory>instances/deps</outputDirectory>
      <excludes>
        <exclude>*/**</exclude>
      </excludes>
    </fileSet>
    <fileSet>
      <directory>${basedir}/../../pulsar-functions/instance/target/python-instance</directory>
      <outputDirectory>instances/python-instance</outputDirectory>
    </fileSet>
    <fileSet>
      <directory>${basedir}/../../pulsar-functions/python-examples</directory>
      <outputDirectory>examples/python-examples</outputDirectory>
    </fileSet>
  </fileSets>
  <files>
    <file>
      <source>${basedir}/src/assemble/README.bin.txt</source>
      <destName>README</destName>
      <outputDirectory>.</outputDirectory>
      <fileMode>644</fileMode>
    </file>
    <file>
      <source>${basedir}/src/assemble/LICENSE.bin.txt</source>
      <destName>LICENSE</destName>
      <outputDirectory>.</outputDirectory>
      <fileMode>644</fileMode>
    </file>
    <file>
      <source>${basedir}/src/assemble/NOTICE.bin.txt</source>
      <destName>NOTICE</destName>
      <outputDirectory>.</outputDirectory>
      <fileMode>644</fileMode>
    </file>
    <file>
      <source>${basedir}/../../pulsar-functions/runtime-all/target/java-instance.jar</source>
      <destName>java-instance.jar</destName>
      <outputDirectory>instances</outputDirectory>
    </file>
    <file>
      <source>${basedir}/../../pulsar-functions/java-examples/target/pulsar-functions-api-examples.jar</source>
      <destName>api-examples.jar</destName>
      <outputDirectory>examples</outputDirectory>
    </file>
    <file>
      <source>${basedir}/../../pulsar-functions/java-examples/src/main/resources/example-function-config.yaml</source>
      <destName>example-function-config.yaml</destName>
      <outputDirectory>examples</outputDirectory>
    </file>
    <file>
      <source>${basedir}/../../pulsar-functions/java-examples/src/main/resources/example-window-function-config.yaml</source>
      <destName>example-window-function-config.yaml</destName>
      <outputDirectory>examples</outputDirectory>
    </file>
    <file>
      <source>${basedir}/../../pulsar-functions/java-examples/src/main/resources/example-stateful-function-config.yaml</source>
      <destName>example-stateful-function-config.yaml</destName>
      <outputDirectory>examples</outputDirectory>
    </file>
  </files>
  <dependencySets>
    <dependencySet>
      <outputDirectory>lib</outputDirectory>
      <unpack>false</unpack>
      <scope>compile</scope>
      <useProjectArtifact>false</useProjectArtifact>
      <!-- Include 'groupId' in the dependencies Jar names to better identify
           the provenance of the jar -->
      <outputFileNameMapping>${artifact.groupId}-${artifact.artifactId}-${artifact.version}${dashClassifier?}.${artifact.extension}</outputFileNameMapping>

      <excludes>
        <exclude>org.apache.pulsar:pulsar-functions-runtime-all</exclude>

        <exclude>org.projectlombok:lombok</exclude>

        <!-- prevent adding pulsar-functions-api-examples in lib -->
        <exclude>org.apache.pulsar:pulsar-functions-api-examples</exclude>
        <!-- prevent adding any distribution .tar.gz files in lib -->
        <exclude>*:tar.gz</exclude>
      </excludes>
    </dependencySet>
  </dependencySets>
</assembly>
