[build-system]
requires = ["setuptools>=80.9.0"]
build-backend = "setuptools.build_meta"

[project]
name = "jira_cli"
version = "0.1.0"
description = "A CLI tool for managing Jira resources and configurations."
readme = "README.md"
requires-python = ">=3.14"
dependencies = [
    "boto3>=1.42.74",
    "datadog-lambda>=8.123.0",
    "ddtrace>=4.6.4",
    "pydantic-settings>=2.14.2",
    "requests>=2.32.5",
    "sentry-sdk>=2.56.0",
    "typer>=0.24.1",
    "types-boto3>=1.42.74",
    "types-requests>=2.32.4.20260324",
]

[dependency-groups]
dev = [
    "isort>=7.0.0",
    "mypy>=1.19.1",
    "pytest-cov>=7.1.0",
    "pytest-html>=4.2.0",
    "pytest>=9.0.2",
    "ruff>=0.14.11",
    "yamllint~=1.37",
]

integration = [
    {include-group = "dev"},
]

[project.scripts]
jira-cli = "dev:app"

[tool.setuptools]
py-modules = ["dev", "config"]

[tool.setuptools.packages.find]
where = ["."]
include = ["jira_client*"]

[tool.pytest.ini_options]
pythonpath = [".", ".."]
markers = [
    "unit: fast, isolated unit tests",
    "integration: end-to-end handler tests with mocked AWS/HTTP",
]

[tool.ruff]
line-length = 88
indent-width = 4
src = ["jira_client"]

[tool.ruff.lint]
select = [
    "A",
    "D",
    "E",
    "F",
    "I",
    "Q",
    "W",
]
ignore = [
    # missing-blank-line-after-last-section
    "D413",
    # incorrect-blank-line-before-class, conflicts with D211
    "D203",
    # multi-line-summary-second-line, conflicts with D212
    "D213",
    # line-too-long, the formatter makes a best-effort at wrapping lines
    "E501",
]

[tool.ruff.lint.isort]
combine-as-imports = true
forced-separate = ["tests"]

[tool.ruff.lint.flake8-quotes]
inline-quotes = "single"

[tool.ruff.format]
quote-style = "single"

[tool.mypy]
python_version = "3.14"
check_untyped_defs = true
disallow_untyped_defs = true
ignore_missing_imports = true
exclude = ["(^|/)\\.venv/"]
plugins = [ "pydantic.mypy" ]
explicit_package_bases = true

[[tool.uv.index]]
name = "theorchard"
url = "https://pypi.theorchard.io/pypi/"
