# Copyright (c) 2020 Project CHIP Authors
#
# Licensed 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.

############################################################
#  Top Level Labels
############################################################
repo:
    - ./*

############################################################
#  Examples
############################################################
examples:
    - examples/*
    - examples/**/*

############################################################
#  Documentation
############################################################
documentation:
    - docs/*
    - docs/**/*
    - "*.md"

############################################################
#  Tools + Development Items
############################################################
scripts:
    - scripts/*
    - scripts/**/*

integrations:
    - integrations/*
    - integrations/**/*

docker:
    - integrations/docker/*
    - integrations/docker/**/*

vscode:
    - .vscode/*
    - .vscode/**/*
    - .devcontainer/*
    - .devcontainer/**/*

gn:
    - build/*
    - build/**/*
    - build_overrides/*
    - build_overrides/**/*
    - .gn
    - "*.gn"
    - "*.gni"

github:
    - .github
    - .github/*
    - .github/**/*

workflows:
    - .github/workflows/*
    - .github/workflows/**/*

tools:
    - src/tools/*
    - src/tools/**/*
    - tools/*
    - tools/**/*
    - examples/chip-tool/*
    - examples/chip-tool/**/*

############################################################
#  Tests
############################################################
tests:
    - src/python_testing/*
    - src/python_testing/**/*
    - src/app/tests/*
    - src/app/tests/**/*

test driver:
    - src/test_driver/*
    - src/test_driver/**/*

############################################################
#  Source Code
############################################################
qr code:
    - src/qrcode/*
    - src/qrcode/**/*
    - src/qrcodetool/*
    - src/qrcodetool/**/*

lwip:
    - src/lwip/*
    - src/lwip/**/*

inet:
    - src/inet/*
    - src/inet/**/*

config:
    - config/*
    - config/**/*

lib:
    - src/lib/*
    - src/lib/**/*

core:
    - src/lib/core/*
    - src/lib/core/**/*

protocols:
    - src/lib/protocols/*
    - src/lib/protocols/**/*
    - src/protocols/*
    - src/protocols/**/*

messaging:
    - src/messaging/*
    - src/messaging/**/*

shell:
    - src/lib/shell/*
    - src/lib/shell/**/*

support:
    - src/lib/support/*
    - src/lib/support/**/*

crypto:
    - src/crypto/*
    - src/crypto/**/*

controller:
    - src/controller/*
    - src/controller/**/*

ble:
    - src/ble/*
    - src/ble/**/*

app:
    - src/app/*
    - src/app/**/*

icd:
    - src/app/icd/*
    - src/app/icd/**/*

transport:
    - src/transport/*
    - src/transport/**/*

system:
    - src/system/*
    - src/system/**/*

setup payload:
    - src/setup_payload/*
    - src/setup_payload/**/*

############################################################
#  Platforms
############################################################
platform:
    - src/platform/*
    - src/platform/**/*
    - config/tizen/chip-gn/platform/*
    - config/tizen/chip-gn/platform/**/*
    - examples/platform/*
    - examples/platform/**/*
    - scripts/tools/memory/platform/*
    - scripts/tools/memory/platform/**/*
    - src/include/platform/*
    - src/include/platform/**/*
    - src/lib/dnssd/platform/*
    - src/lib/dnssd/platform/**/*

darwin:
    - src/platform/Darwin/*
    - src/platform/Darwin/**/*
    - src/darwin/*
    - src/darwin/**/*
    - examples/darwin-framework-tool/*
    - examples/darwin-framework-tool/**/*

silabs:
    - src/platform/silabs/*
    - src/platform/silabs/**/*

esp32:
    - src/platform/ESP32/*
    - src/platform/ESP32/**/*

freeRTOS:
    - src/platform/FreeRTOS/*
    - src/platform/FreeRTOS/**/*

k32w:
    - src/platform/K32W/*
    - src/platform/K32W/**/*

linux:
    - src/platform/Linux/*
    - src/platform/Linux/**/*

nrf connect:
    - src/platform/nrfconnect/*
    - src/platform/nrfconnect/**/*

openthread:
    - src/platform/openthread/*
    - src/platform/openthread/**/*

zephyr:
    - src/platform/Zephyr/*
    - src/platform/Zephyr/**/*

telink:
    - src/platform/telink/*
    - src/platform/telink/**/*

tizen:
    - src/platform/Tizen/*
    - src/platform/Tizen/**/*
