[build-system] requires = ["hatchling"] build-backend = "hatchling.build" [project] name = "sshctl" version = "0.1.2" description = "SSH configuration management toolkit" requires-python = ">=3.13" license = {text = "MIT"} authors = [{name = "Amir Husayn Panahifar", email = "ahp@panahifar.ir"}] dependencies = [ "click>=8.1", "typer>=0.12", "rich>=13.0", "structlog>=24.0", "pydantic>=2.0", "pydantic-settings>=2.0", "pyyaml>=6.0", ] [project.scripts] sshctl = "sshctl.cli.app:serve" [project.optional-dependencies] dev = [ "pytest>=8.0", "pytest-cov>=5.0", "pytest-asyncio>=0.24", "ruff>=0.4", "mypy>=1.8", "pre-commit>=3.6", "types-PyYAML>=6.0", ] [project.urls] Homepage = "https://src.panahifar.ir/ahp/sshctl" Repository = "https://src.panahifar.ir/ahp/sshctl.git" Changelog = "https://src.panahifar.ir/ahp/sshctl/src/branch/main/CHANGELOG.md" [tool.hatch.build.targets.wheel] packages = ["src/sshctl"] [tool.ruff] target-version = "py313" line-length = 100 [tool.ruff.lint] select = ["E", "F", "I", "N", "W", "UP", "B", "SIM", "ARG", "PTH", "ERA"] [tool.ruff.lint.per-file-ignores] "src/sshctl/cli/app.py" = ["ARG001"] [tool.ruff.format] quote-style = "double" [tool.mypy] strict = true python_version = "3.13" check_untyped_defs = true disallow_any_unimported = true no_implicit_reexport = true warn_unused_ignores = true [tool.pytest.ini_options] asyncio_mode = "auto" testpaths = ["tests"] addopts = [ "--cov=sshctl", "--cov-report=term-missing", "--cov-report=xml:coverage.xml", "--cov-fail-under=45", ] [tool.coverage.run] source_pkgs = ["sshctl"] parallel = true [tool.coverage.paths] source = ["src/sshctl"] [tool.coverage.report] exclude_lines = [ "pragma: no cover", "if __name__ == .__main__.:", "raise AssertionError", "raise NotImplementedError", "if 0:", "@overload", ] [tool.coverage.html] directory = "htmlcov"