#
# 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.
#

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'
    - 'streampark-console/streampark-console-webapp/src/App.vue'
    - 'streampark-console/streampark-console-webapp/src/main.ts'
    - 'streampark-console/streampark-console-webapp/src/locales/helper.ts'
    - 'streampark-console/streampark-console-webapp/src/locales/setupI18n.ts'
    - 'streampark-console/streampark-console-webapp/src/locales/useLocale.ts'
    - 'streampark-console/streampark-console-webapp/types'
    - 'streampark-console/streampark-console-webapp/build'
    - 'streampark-console/streampark-console-webapp/src/components'
    - 'streampark-console/streampark-console-webapp/src/directives'
    - 'streampark-console/streampark-console-webapp/src/logics'
    - 'streampark-console/streampark-console-webapp/src/utils'
    - 'streampark-console/streampark-console-webapp/src/enums'
    - 'streampark-console/streampark-console-webapp/src/design'
    - 'streampark-console/streampark-console-webapp/src/hooks'
    - 'streampark-console/streampark-console-webapp/src/layouts'
    - 'streampark-console/streampark-console-webapp/src/router'
    - 'streampark-console/streampark-console-webapp/src/settings'
    - 'streampark-console/streampark-console-webapp/src/store'
    - 'streampark-console/streampark-console-webapp/src/views/base/error-log'
    - 'streampark-console/streampark-console-webapp/src/views/base/exception'
    - 'streampark-console/streampark-console-webapp/src/views/base/lock'
    - 'streampark-console/streampark-console-webapp/src/views/base/redirect'

  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
