#
# 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
#
#    https://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.
#

header:
  license:
    spdx-id: Apache-2.0
    copyright-owner: Apache Software Foundation

  paths-ignore:
    - 'dist'
    - 'licenses'
    - '**/*.md'
    - 'LICENSE'
    - 'NOTICE'
    - '**/*.json'
    - '**/*.iml'
    - '**/*.ini'
    - '**/*.svg'
    - '.gitattributes'
    - '**/.gitignore'
    - '**/.gitkeep'
    - 'dist-material/release-docs'
    - 'mvnw.cmd'
    - '.mvn'
    - '**/known-dependencies.txt'
    - '**/LICENSE'
    - '**/NOTICE'
    - "DISCLAIMER"
    - '**/*.MD'
    - '**/*.ftl'
    - '**/*.tpl'
    - '**/*.pl'
    - '**/*.dict'
    - '**/*.awk'
    - '**/*.php'
    - "**/*.lock"
    - "**/*.svg"
    - '.prettierrc'
    - '.browserslistrc'
    - '.editorconfig'
    - '.helmignore'
    - '**/target/**'
    - '**/*.ini'
    - '**/*.crt'
    - '**/*.pem'
    - 'ssh_config'
    - 'workers'

  comment: on-failure

dependency:
  files:
    - pom.xml
    - package.json
  licenses:
    - name: asm:asm
      license: BSD-2.0
    - name: com.carrotsearch:hppc
      license: Apache-2.0
    - name: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml
      license: Apache-2.0
    - name: com.fasterxml.jackson.datatype:jackson-datatype-jsr310
      license: Apache-2.0
    - name: com.github.docker-java:docker-java-api
      license: Apache-2.0
    - name: com.github.docker-java:docker-java-core
      license: Apache-2.0
    - name: com.github.docker-java:docker-java-transport
      license: Apache-2.0
    - name: com.github.docker-java:docker-java-transport-httpclient5
      license: Apache-2.0
    - name: com.github.xiaoymin:knife4j-annotations
      license: Apache-2.0
    - name: com.github.xiaoymin:knife4j-core
      license: Apache-2.0
    - name: com.github.xiaoymin:knife4j-spring
      license: Apache-2.0
    - name: com.github.xiaoymin:knife4j-spring-boot-autoconfigure
      license: Apache-2.0
    - name: com.github.xiaoymin:knife4j-spring-ui
      license: Apache-2.0
    - name: io.swagger.core.v3:swagger-annotations
      license: Apache-2.0
    - name: io.swagger.core.v3:swagger-models
      license: Apache-2.0
    - name: io.swagger:swagger-annotations
      license: Apache-2.0
    - name: io.swagger:swagger-models
      license: Apache-2.0
    - name: com.google.code.gson:gson
      license: Apache-2.0
    - name: com.google.guava:listenablefuture
      license: Apache-2.0
    - name: com.squareup.moshi:moshi
      license: Apache-2.0
    - name: com.squareup.okhttp3:logging-interceptor
      license: Apache-2.0
    - name: com.squareup.okhttp3:okhttp
      license: Apache-2.0
    - name: com.squareup.okhttp:okhttp
      license: Apache-2.0
    - name: com.squareup.okio:okio
      license: Apache-2.0
    - name: com.squareup.retrofit2:converter-moshi
      license: Apache-2.0
    - name: com.squareup.retrofit2:retrofit
      license: Apache-2.0
    - name: com.yammer.metrics:metrics-core
      license: Apache-2.0
    - name: net.bytebuddy:byte-buddy
      license: Apache-2.0
    - name: org.apache.httpcomponents:httpcore
      license: Apache-2.0
    - name: org.codehaus.plexus:plexus-component-annotations
      license: Apache-2.0
    - name: org.codehaus.plexus:plexus-interpolation
      license: Apache-2.0
    - name: org.sonatype.plexus:plexus-cipher
      license: Apache-2.0
    - name: org.sonatype.plexus:plexus-sec-dispatcher
      license: Apache-2.0
    - name: com.sun.jersey.contribs:jersey-guice
      license: CDDL 1.1
    - name: com.thoughtworks.paranamer:paranamer
      license: BSD
    - name: javax.servlet.jsp:jsp-api
      license: CDDL
    - name: javax.servlet:servlet-api
      license: CDDL
    - name: org.eclipse.jgit:org.eclipse.jgit
      license: New BSD License
    - name: org.eclipse.jgit:org.eclipse.jgit.ssh.jsch
      license: New BSD License
    - name: org.jacoco:org.jacoco.agent
      license: Eclipse Public License 2.0
    - name: org.slf4j:slf4j-api
      license: MIT License
