# Note: these patterns are applied to single files or directories, not full paths
# coverage/* will ignore any coverage dir, but airflow/www/static/coverage/* will match nothing

.git-blame-ignore-revs
.github/*
.gitignore
.gitattributes
.gitrepo
.airflow_db_initialised
.airflowignore
.babelrc
.coverage
.coveragerc
.codecov.yml
.codespellignorelines
.eslintignore
.eslintrc
.prettierignore
.prettierrc
.rat-excludes
.stylelintignore
.stylelintrc
requirements
requirements.txt
.*log
.travis.yml
.*pyc
.*lock
dist
build
airflow.egg-info
apache_airflow.egg-info
.idea
metastore_db
.*sql
.*svg
.*csv
.*md5
.*zip
.*lock
unittests.cfg
logs
.bash_aliases
venv
files
airflow.iml
.gitmodules
scripts/ci/installed_providers.txt

# Generated doc files
.*html
_build/*
_static/*
_images/*
.buildinfo
searchindex.js
_api/*

# the word list for checking spellings
spelling_wordlist.txt

# Apache Rat does not detect BSD-2 clause properly
# it is compatible according to http://www.apache.org/legal/resolved.html#category-a
kerberos_auth.py
airflow_api_auth_backend_kerberos_auth_py.html
licenses/*
parallel.js
underscore.js
jquery.dataTables.min.js
jqClock.min.js
dagre-d3.min.js
d3.v3.min.js
ace.js
node_modules/*
.*json
coverage/*
git_version
flake8_diff.sh
coverage*.xml
_sources/*

robots.txt
rat-results.txt
apache-airflow-.*\+source.tar.gz.*
apache-airflow-.*\+bin.tar.gz.*
PULL_REQUEST_TEMPLATE.md
PROVIDER_CHANGES*.md
manifests/*
redirects.txt

# Locally mounted files
.*egg-info/*
.bash_history
.bash_aliases
.inputrc

# the example notebook is ASF 2 licensed but RAT cannot read this
input_notebook.ipynb

# .git might be a file in case of worktree
.git
tmp

# Vendored-in code
.*_vendor

# generated doc-only-changes.txt
.latest-doc-only-change.txt

# generated provider_packages
provider_packages

# Chart ignored files
chart/.gitignore
chart/values.schema.json
chart/Chart.lock
chart/values_schema.schema.json

# Generated autocomplete files
./dev/breeze/autocomplete/*

# Newsfragments are snippets that will be, eventually, consumed into RELEASE_NOTES
newsfragments/*

# Warning file generated
warnings.txt

# Dev stuff
tests/*
scripts/*
images/*
dev/*
chart/*.iml

# Sha files
.*sha256
