<?xml version='1.0' encoding='UTF-8'?>
<!--
  ~ 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>source-release</id>
  <formats>
    <format>tar.gz</format>
  </formats>
  <fileSets>
    <!-- main project directory structure -->
    <fileSet>
      <directory>.</directory>
      <outputDirectory/>
      <useDefaultExcludes>true</useDefaultExcludes>
      <excludes>
        <!-- build output -->
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/).*${project.build.directory}.*]
        </exclude>

        <!-- NOTE: Most of the following excludes should not be required
          if the standard release process is followed. This is because the release
          plugin checks out project sources into a location like target/checkout, then
          runs the build from there. The result is a source-release archive that comes
          from a pretty clean directory structure. HOWEVER, if the release plugin is
          configured to run extra goals or generate a project website, it's definitely
          possible that some of these files will be present. So, it's safer to exclude
          them. -->

        <!-- IDEs -->
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?maven-eclipse\.xml]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.project]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.classpath]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iws]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.idea(/.*)?]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?out(/.*)?]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.ipr]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?[^/]*\.iml]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.settings(/.*)?]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.externalToolBuilders(/.*)?]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.deployables(/.*)?]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.wtpmodules(/.*)?]
        </exclude>

        <!-- Gradle -->

        <exclude>.gradle/**</exclude>
        <exclude>build/**</exclude>
        <exclude>shaded/*/build/**</exclude>
        <exclude>*/build/**</exclude>

        <!-- scm -->
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?\.gitignore(/.*)?]
        </exclude>

        <exclude>**/.buildpath</exclude>
        <exclude>**/sandbox/**</exclude>

        <!-- misc -->
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?cobertura\.ser]
        </exclude>

        <!-- release-plugin temp files -->
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?pom\.xml\.releaseBackup]
        </exclude>
        <exclude>%regex[(?!((?!${project.build.directory}/)[^/]+/)*src/)(.*/)?release\.properties]
        </exclude>
      </excludes>
    </fileSet>
    <!-- LICENSE, NOTICE, DEPENDENCIES, git.properties, etc. calculated at build time -->
    <fileSet>
      <directory>${project.build.directory}/maven-shared-archive-resources/META-INF
      </directory>
      <outputDirectory/>
    </fileSet>
    <fileSet>
      <directory>${project.build.directory}</directory>
      <includes>
        <include>git.properties</include>
      </includes>
      <outputDirectory/>
    </fileSet>
  </fileSets>
</assembly>
