[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "devx" dynamic = ["version"] description = "Reusable development and CI/CD tools for oblachno-oss projects" readme = "README.md" license = {text = "GPL-3.0"} requires-python = ">=3.12" classifiers = [ "Programming Language :: Python :: 3", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", ] dependencies = [ "requests>=2.34.2", "python-dotenv>=1.2.2", "click>=8.4.1", ] [project.scripts] devx = "devx.cli:cli" [tool.setuptools.dynamic] version = {attr = "devx.__version__"} [project.optional-dependencies] # Minimal deps for CI scripts that only need click/dotenv/requests ci = [ "pytest>=9.1.0", "pytest-cov>=7.1.0", ] # Lint and type-checking tools (quality job) lint = [ "ruff>=0.15.17", "pyright>=1.1.410", "bandit>=1.8.2", "pip-audit>=2.10", "pre-commit>=4.6.0", ] # Molecule testing (optional — for projects with Ansible roles) molecule = [ "molecule>=26.4.0", "molecule-docker>=2.1.0", "ansible-lint>=26.4.0", "ansible>=14.0.0", ] # Full dev environment (local development) dev = [ "devx[ci,lint]", "build>=1.3.0", "twine>=6.2.0", ] [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] devx = ["translations.json"] [tool.pytest.ini_options] testpaths = ["tests"] pythonpath = ["src"] addopts = "--cov=src/devx --cov-report=term-missing --cov-fail-under=100" markers = [ "integration: marks tests as integration tests (not counted in coverage)", ] [tool.ruff] target-version = "py312" line-length = 120 [tool.ruff.lint] select = ["E", "F", "I", "W", "UP", "B", "C4", "SIM"] ignore = ["SIM117"] [tool.ruff.format] quote-style = "double" indent-style = "space" [tool.pyright] include = ["src"] pythonVersion = "3.12" strict = ["src/devx/config.py", "src/devx/exceptions.py", "src/devx/i18n.py", "src/devx/api_clients.py", "src/devx/gitea_cli.py"]