# Licensed to the Apache Software Foundation (ASF) under one or more contributor
# license agreements; and to You under the Apache License, Version 2.0.

# scanCode.py configuration file

# List of filenames containing the text of valid license (headers)
# These files SHOULD be in the same directory path where scanCode.py
# resides.
[Licenses]
ASFLicenseHeader.txt
ASFLicenseHeaderBash.txt
ASFLicenseHeaderHash.txt
ASFLicenseHeaderLua.txt

# Filters (path/filename) with wildcards and associated scan checks
# that are to be run against them.  The checks are actual valid
# function names found in scanCode.py.
[Includes]
*=is_not_symlink, regex_check
*.conf=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.go=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.gradle=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.groovy=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.html=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.java=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.js=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.ts=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.cs=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.php=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.lua=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.md=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.properties=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.py=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.rb=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.rs=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.ru=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.scala=has_block_license, no_tabs, no_trailing_spaces, eol_at_eof, regex_check
*.sh=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.swift=no_tabs, has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.tmpl=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.toml=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.yaml=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
*.yml=has_block_license, no_trailing_spaces, eol_at_eof, regex_check
Cargo.lock=has_block_license, no_trailing_spaces, eol_at_eof
*Dockerfile*=has_block_license, no_trailing_spaces
*Makefile*=has_block_license, no_trailing_spaces, eol_at_eof
*Gemfile*=has_block_license, no_trailing_spaces, eol_at_eof

# Sanity check files not required to have ASF headers because either they
# are excluded or are not packaged with the Apache source release.
*.cfg=regex_check
*.ini=regex_check
*.j2=regex_check
*.json=regex_check
*.txt=regex_check
*.xml=regex_check

# List of paths (inclusive of subdirectories) to exclude from code scanning
[Excludes]
incubator/

# General tooling & binary file exclusions
.bin
.dockerignore
.eslintrc.*
.git
.gitattributes
.github
.gitignore
.gradle
.idea
.jshintrc
.pydevproject
.rat-excludes
.tox

# Exclude Apache standard legal files
CREDITS.txt
DISCLAIMER.txt
LICENSE*.txt
NOTICE.txt

# Exclude cache and 'vendor' directories created by the `gogradle` build tool
.gogradle
vendor

# apache/openwhisk: exclude empty test (empty.js), and symbolic links (wskadmin, wskdev)
bin/wskadmin
bin/wskdev
tests/dat/actions/empty.js

# apache/openwhisk-apigateway: test dependency exclusions
tests/fakengx.lua
tests/fakeredis.lua

# apache/openwhisk-client-go, apache/openwhisk-wskdeploy Go Lang. autogenerated i18n files
specification/images
wski18n/i18n_resources.go

# apache/openwhisk-runtime-nodejs
node_modules

# Exclude scancode tests that test for bad license headers AND
# Exclude compat.py, gitwildmatch.py, pathspec.py, pattern.py and util.py are mozilla licensed files
scancode/tests/exclude
scancode/lib/compat.py
scancode/lib/gitwildmatch.py
scancode/lib/pathspec.py
scancode/lib/pattern.py
scancode/lib/util.py

[Options]
# Not all code files allow licenses to appear starting at the first character
# of the file. This option tells the scan to allow licenses to appear starting
# within the first 'x' characters of each code file (as provided by this option's
# value).
LICENSE_SLACK_LENGTH=500

# List of regular expressions for forbidden strings, e.g. \w+@company.com
[Regex]
