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