---
components:
  appsec:
    - ddtrace/appsec/*
    - ddtrace/settings/asm.py
  appsec_iast:
    - ddtrace/appsec/iast/*
  urllib:
    - ddtrace/contrib/internal/urllib/*
  webbrowser:
    - ddtrace/contrib/internal/webbrowser/*
  ai_guard:
    - ddtrace/appsec/ai_guard/*
suites:
  appsec:
    parallelism: 4
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/*
    pattern: appsec$
    retry: 2
    runner: riot
    snapshot: true
  appsec_iast_default:
    parallelism: 6
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/iast/*
    retry: 2
    runner: riot
    timeout: 30m
  appsec_iast_memcheck:
    env:
      CI_DEBUG_TRACE: 'true'
    parallelism: 4
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/iast/*
      - tests/appsec/iast_memcheck/*
    retry: 2
    runner: riot
    timeout: 30m
  appsec_iast_native:
    parallelism: 6
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
    retry: 2
    runner: riot
  iast_aggregated_leak_testing:
    parallelism: 3
    paths:
      - '@appsec_iast'
      - tests/appsec/iast_aggregated_memcheck/*
    runner: hatch
    timeout: 50m
  appsec_iast_packages:
    paths:
      - '@appsec_iast'
      - tests/appsec/iast_packages/*
    runner: riot
    timeout: 50m
  iast_tdd_propagation:
    parallelism: 5
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/iast_tdd_propagation/*
    retry: 2
    runner: riot
    snapshot: true
  appsec_integrations_pygoat:
    parallelism: 3
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/integrations/pygoat_tests/*
      - tests/snapshots/tests.appsec.*
    retry: 2
    runner: riot
    snapshot: true
  appsec_integrations_packages:
    env:
      TEST_POSTGRES_HOST: postgres
      TEST_MYSQL_HOST: mysql
    parallelism: 6
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/iast/*
      - tests/appsec/integrations/packages_tests/*
    retry: 2
    runner: riot
    services:
      - postgres
      - mysql
  appsec_integrations_langchain:
    parallelism: 15
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/iast/*
      - tests/appsec/integrations/langchain_tests/*
    retry: 2
    runner: riot
  appsec_integrations_flask:
    parallelism: 17
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/integrations/flask_tests/*
    retry: 2
    runner: riot
    services:
      - testagent
    timeout: 40m
  appsec_integrations_django:
    parallelism: 22
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/integrations/django_tests/*
    retry: 2
    runner: riot
    services:
      - testagent
    timeout: 30m
  appsec_integrations_fastapi:
    parallelism: 21
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@remoteconfig'
      - tests/appsec/integrations/fastapi_tests/*
    retry: 2
    runner: riot
    services:
      - testagent
  appsec_threats_django:
    parallelism: 12
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@asgi'
      - '@wsgi'
      - '@django'
      - '@remoteconfig'
      - tests/appsec/*
      - tests/appsec/contrib_appsec/*
    retry: 2
    runner: riot
  appsec_threats_fastapi:
    parallelism: 9
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@asgi'
      - '@wsgi'
      - '@fastapi'
      - '@starlette'
      - '@remoteconfig'
      - tests/appsec/*
      - tests/appsec/contrib_appsec/*
    retry: 2
    runner: riot
  appsec_threats_flask:
    parallelism: 10
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@appsec'
      - '@appsec_iast'
      - '@asgi'
      - '@wsgi'
      - '@flask'
      - '@remoteconfig'
      - tests/appsec/*
      - tests/appsec/contrib_appsec/*
    retry: 2
    runner: riot
  urllib:
    paths:
      - '@bootstrap'
      - '@core'
      - '@contrib'
      - '@tracing'
      - '@urllib'
      - tests/appsec/iast/taint_sinks/test_ssrf.py
    runner: riot
    skip: true  # TODO: No environment available
  webbrowser:
    paths:
      - '@bootstrap'
      - '@core'
      - '@contrib'
      - '@tracing'
      - '@webbrowser'
      - tests/appsec/iast/taint_sinks/test_ssrf.py
    runner: riot
    skip: true  # TODO: No environment available
  ai_guard_api:
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@ai_guard'
      - tests/appsec/ai_guard/api/*
    retry: 2
    runner: riot
  ai_guard_langchain:
    paths:
      - '@bootstrap'
      - '@core'
      - '@tracing'
      - '@ai_guard'
      - tests/appsec/ai_guard/langchain/*
    retry: 2
    runner: riot
    services:
      - testagent