# 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]
ApacheIBMLicenseHeader.txt
ASFLicenseHeader.txt
ASFLicenseHeaderBash.txt
ASFLicenseHeaderHash.txt
ASFLicenseHeaderLua.txt
ASFMinifiedLicenseHashHeader.txt
ASFMinifiedLicenseHeader.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
*.go=has_block_license, no_trailing_spaces, eol_at_eof
*.gradle=no_tabs, no_trailing_spaces, eol_at_eof
*.java=has_block_license, no_tabs, no_trailing_spaces, eol_at_eof
*.js=no_tabs, no_trailing_spaces, eol_at_eof
*.lua=has_block_license
*.md=no_tabs, eol_at_eof
*.py=no_tabs, no_trailing_spaces, eol_at_eof
*.scala=has_block_license, no_tabs, no_trailing_spaces, eol_at_eof
build.xml=no_tabs, no_trailing_spaces, eol_at_eof
deploy.xml=no_tabs, no_trailing_spaces, eol_at_eof

# List of paths (inclusive of subdirectories) to exlude from code scanning
[Excludes]
# General exclusions
.tox
.git
.bin

# OpenWhisk binary artifact exclusion
bin

# 'vendor' and cache directory create by gograble build tool
.gogradle
vendor

# Jenkins/test generated reports
tests/build/reports

# incubator-openwhisk-client-go, autogenerated Go files
wski18n

# exclude intentionally excluded subset of scancode function tests
scancode/tests/exclude

# The following repos. have so far been identified as having scanning errors
# and will be excluded until their owners have completed updates to add Travis
# support, run scancode and become compliant.
openwhisk-debugger
openwhisk-vscode
openwhisk-devtools
openwhisk-sample-matos
openwhisk-GitHubSlackBot
openwhisk-tutorial
openwhisk-playground
openwhisk-workshop
openwhisk-xcode

[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 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]
