<?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.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.13</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>
