<?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.
-->
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.incubator.openwhisk.release</groupId>
  <artifactId>header-check</artifactId>
  <version>1.0</version>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <version>0.12</version>
        <configuration>
          <licenses>
            <license implementation="org.apache.rat.analysis.license.SimplePatternBasedLicense">
              <licenseFamilyCategory>ALSF</licenseFamilyCategory>
              <licenseFamilyName>Apache License 2.0 Short Form</licenseFamilyName>
              <notes></notes>
              <patterns>
                <pattern>Licensed to the Apache Software Foundation (ASF) under one or more contributor</pattern>
              </patterns>
            </license>
          </licenses>
          <licenseFamilies>
            <licenseFamily implementation="org.apache.rat.license.SimpleLicenseFamily">
              <familyName>Apache License 2.0 Short Form</familyName>
            </licenseFamily>
          </licenseFamilies>
          <excludes>
            <!-- JSON files -->
            <exclude>**/*.json</exclude>
            <exclude>**/tests/dat/apigw/testswaggerdoc*</exclude>
            <exclude>**/SwiftyRequest/Package.resolved</exclude>
            <!-- gradle files -->
            <exclude>**/gradlew**</exclude>
            <!-- configuration files with dot as the prefix -->
            <exclude>**/.**</exclude>
            <!-- template files -->
            <exclude>**/templates/**</exclude>
            <!-- <exclude>**/*.j2.ini</exclude> -->
            <exclude>**/*.j2*</exclude>
            <exclude>**/.github/**</exclude>
            <!-- OpenWhisk auth data -->
            <exclude>**/auth.whisk.system</exclude>
            <exclude>**/auth.guest</exclude>
            <!-- i18n file auto generated -->
            <exclude>**/i18n_resources.go</exclude>
            <!-- NOTICE files -->
            <exclude>**/NOTICE.md</exclude>
            <!-- LICENSE files -->
            <exclude>**/licenses/**</exclude>
            <!-- LICENSE files -->
            <exclude>**/CREDITS.txt</exclude>
            <!-- configuration files -->
            <exclude>**/group_vars/all</exclude>
            <exclude>**/**.env</exclude>
            <exclude>**/**.cfg</exclude>
            <exclude>**/**.ini</exclude>
            <exclude>**/**.properties</exclude>
            <exclude>**/post.lua</exclude>
            <exclude>**/java.xml</exclude>
            <exclude>**/logback.xml</exclude>
            <exclude>**/post.lua</exclude>
            <exclude>**/hosts</exclude>
            <exclude>**/dockerhub.groovy</exclude>
            <!-- None creative docker files -->
            <exclude>openwhisk/actionRuntimes/**/Dockerfile</exclude>
            <exclude>openwhisk/sdk/docker/Dockerfile</exclude>
            <exclude>openwhisk/tests/dat/actions/empty.js</exclude>
          </excludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
