# Copyright 2013 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# See https://github.com/actions/labeler/blob/main/README.md for docs.
# Use git ls-files ':(glob)<pattern>' to see the list of matching files.

'a: accessibility':
  - changed-files:
    - any-glob-to-any-file:
      - '**/accessibility/*'
      - '**/*accessibility*'
      - '**/semantics/*'
      - '**/*semantics*'

'a: animation':
  - changed-files:
    - any-glob-to-any-file:
      - '**/animation/*'
      - '**/*animation*'

'a: desktop':
  - changed-files:
    - any-glob-to-any-file:
      - '**/linux/**/*'
      - '**/macos/**/*'
      - '**/windows/**/*'
      - engine/src/flutter/shell/platform/darwin/common/**/*

'a: internationalization':
  - changed-files:
    - any-glob-to-any-file:
      - packages/flutter_localizations/**/*

'a: tests':
  - changed-files:
    - any-glob-to-any-file:
      - packages/flutter_driver/**/*
      - packages/flutter_goldens/**/*
      - packages/flutter_test/**/*
      - packages/integration_test/**/*

'a: text input':
  - changed-files:
    - all-globs-to-any-file:
      - '**/*[tT]ext*'
      - '!**/*[cC]ontext*'
      - '!**/*[tT]exture*'

'd: api docs':
  - changed-files:
    - any-glob-to-any-file:
      - packages/flutter/examples/api/**/*

'd: docs/':
  - changed-files:
    - any-glob-to-any-file:
      - docs/**/*

'd: examples':
  - changed-files:
    - any-glob-to-any-file:
      - examples/**/*
      - packages/flutter/examples/**/*

'e: embedder':
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/embedder

'e: impeller':
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/impeller/**/*

flutter-gpu:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/lib/gpu/**/*
      - engine/src/flutter/testing/dart/gpu_test*

engine:
  - changed-files:
    - any-glob-to-any-file:
      - DEPS
      - engine/**/*
      - docs/engine/**/*

'f: cupertino':
  - changed-files:
    - any-glob-to-any-file:
      - '**/cupertino/*'
      - '**/*cupertino*'
      - docs/libraries/cupertino/**/*

'f: focus':
  - changed-files:
    - any-glob-to-any-file:
      - '**/focus/*'
      - '**/*focus*'

'f: gestures':
  - changed-files:
    - any-glob-to-any-file:
      - '**/gestures/*'
      - '**/*gestures*'

'p: material_ui':
  - changed-files:
    - any-glob-to-any-file:
      - '**/material/*'
      - '**/*material*'
      - docs/libraries/material/**/*

'f: routes':
  - changed-files:
    - any-glob-to-any-file:
      - '**/navigator/*'
      - '**/*navigator*'
      - '**/route/*'
      - '**/*route*'

'f: scrolling':
  - changed-files:
    - any-glob-to-any-file:
      - '**/*scroll*'
      - '**/scroll/*'
      - '**/*sliver*'
      - '**/sliver/*'
      - '**/*viewport*'
      - '**/viewport/*'

framework:
  - changed-files:
    - any-glob-to-any-file:
      - packages/flutter/**/*
      - packages/flutter_driver/**/*
      - packages/flutter_goldens/**/*
      - packages/flutter_localizations/**/*
      - packages/flutter_test/**/*
      - packages/integration_test/**/*
      - docs/about/**/*
      - docs/contributing/**/*
      - docs/libraries/**/*

'f: integration_test':
  - changed-files:
    - any-glob-to-any-file:
      - packages/integration_test/**/*

package:
  - changed-files:
    - any-glob-to-any-file:
      - docs/ecosystem/**/*

platform-android:
  - changed-files:
    - any-glob-to-any-file:
      - docs/platform/android/**/*
      - engine/src/flutter/shell/platform/android/**/*
      - packages/flutter_tools/*android*
      - packages/flutter_tools/gradle/**/*

platform-ios:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/darwin/common/**/*
      - engine/src/flutter/shell/platform/darwin/ios/**/*
      - packages/flutter_tools/lib/src/ios/**/*

platform-fuchsia:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/fuchsia/**/*

platform-linux:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/linux/**/*
      - packages/flutter_tools/lib/src/linux/**/*

platform-macos:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/src/flutter/shell/platform/darwin/common/**/*
      - engine/src/flutter/shell/platform/darwin/macos/**/*
      - packages/flutter_tools/lib/src/macos/**/*

platform-web:
  - changed-files:
    - any-glob-to-any-file:
      - '**/web_sdk/**/*'
      - engine/src/flutter/lib/web_ui/**/*
      - packages/flutter_web_plugins

platform-windows:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/windows/**/*
      - packages/flutter_tools/lib/src/windows/**/*

'customer: gallery':
  - changed-files:
    - any-glob-to-any-file:
      - examples/flutter_gallery/**/*

'c: tech-debt':
  - changed-files:
    - any-glob-to-any-file:
      - '**/fix_data.yaml'
      - '**/*.expect'
      - '**/*test_fixes*'
'c: contributor-productivity':
  - changed-files:
    - any-glob-to-any-file:
      - docs/contributing/**/*

# Keep this synced with CODEOWNERS.
team-android:
  - changed-files:
    - any-glob-to-any-file:
      - docs/platform/android/**/*
      - engine/src/flutter/shell/platform/android/**/*
      - packages/flutter_tools/**/*android*
      - packages/flutter_tools/**/*gradle*

team-ecosystem:
  - changed-files:
    - any-glob-to-any-file:
      - docs/ecosystem/**/*

team-engine:
  - changed-files:
    - any-glob-to-any-file:
      - docs/engine/**/*

team-fluttergpu:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/lib/gpu/**/*
      - engine/src/flutter/testing/dart/gpu_test*
      - docs/fluttergpu/**/*

team-infra:
  - changed-files:
    - any-glob-to-any-file:
      - docs/infra/**/*
      - docs/releases/**/*

# Keep this synced with CODEOWNERS.
team-ios:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/darwin/common/**/*
      - engine/src/flutter/shell/platform/darwin/ios/framework/**/*
      - dev/integration_tests/*ios*/**/*
      - dev/integration_tests/*macos*/**/*
      - dev/integration_tests/*darwin*/**/*
      - packages/flutter_tools/**/ios/*
      - packages/flutter_tools/**/macos/*
      - packages/flutter_tools/**/*xcode*
      - packages/flutter_tools/**/*darwin*
      - packages/flutter_tools/**/*swift*
      - packages/flutter_tools/**/*pod*
      - packages/flutter_tools/**/*ios*
      - packages/flutter_tools/**/*macos*

# Keep this synced with CODEOWNERS.
team-linux:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/linux/**/*
      - packages/flutter_tools/**/linux/*
      - packages/flutter_tools/**/*linux*

# Keep this synced with CODEOWNERS.
team-macos:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/darwin/common/**/*
      - engine/src/flutter/shell/platform/darwin/macos/**/*
      - dev/integration_tests/*macos*/**/*
      - dev/integration_tests/*darwin*/**/*
      - packages/flutter_tools/**/macos/*
      - packages/flutter_tools/**/*xcode*
      - packages/flutter_tools/**/*darwin*
      - packages/flutter_tools/**/*swift*
      - packages/flutter_tools/**/*pod*
      - packages/flutter_tools/**/*macos*

# Keep this synced with CODEOWNERS.
team-windows:
  - changed-files:
    - any-glob-to-any-file:
      - engine/src/flutter/shell/platform/windows/**/*
      - packages/flutter_tools/**/windows/*
      - packages/flutter_tools/**/*windows*

team-tool:
  - changed-files:
    - any-glob-to-any-file:
      - docs/tool/**/*

team-web:
  - changed-files:
    - any-glob-to-any-file:
      - dev/**/*web*
      - dev/**/*web*/**/*
      - docs/platforms/web/**/*
      - engine/src/flutter/lib/web_ui/**/*
      - engine/src/flutter/web_sdk/**/*

tool:
  - changed-files:
    - any-glob-to-any-file:
      - packages/flutter_tools/**/*
      - packages/fuchsia_remote_debug_protocol/**/*
      - docs/tool/**/*
