<!--

    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.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
  <id>source-release</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <fileSets>
    <fileSet>
      <directory>${pinot.root}</directory>
      <excludes>
        <exclude>**/target/**</exclude>
        <exclude>**/*.iml</exclude>
        <exclude>**/*.ipr</exclude>
        <exclude>**/*.iws</exclude>
        <exclude>**/*.log</exclude>
        <exclude>**/.idea/**</exclude>
        <exclude>thirdeye/**</exclude>
        <exclude>**/.travis/**</exclude>
        <exclude>.codecov*</exclude>
        <exclude>.gitignore</exclude>
        <exclude>contrib/**</exclude>

        <!-- Do not include temp files created by maven-release-plugin -->
        <exclude>**/*.releaseBackup</exclude>
        <exclude>release.properties</exclude>

        <!-- Do not include build files from docs -->
        <exclude>docs/_build/**</exclude>

        <!-- Do not include docker, kubernetes, website related files -->
        <exclude>kubernetes/**</exclude>
        <exclude>docker/**</exclude>
        <exclude>website/**</exclude>
      </excludes>
    </fileSet>
  </fileSets>
</assembly>
