-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
157 lines (141 loc) · 4.8 KB
/
pyproject.toml
File metadata and controls
157 lines (141 loc) · 4.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
[build-system]
requires = ["hatchling>=1.27"]
build-backend = "hatchling.build"
[project]
name = "shimkit"
version = "0.19.0"
description = "A toolkit of developer utilities — Java version manager, shell upgrader, and more. Python tools, shimmed by bash."
readme = "README.md"
license = { file = "LICENSE" }
authors = [{ name = "Simtabi LLC", email = "opensource@simtabi.com" }]
maintainers = [{ name = "Imani Manyara", email = "imani@simtabi.com" }]
keywords = ["cli", "java", "jdk", "openjdk", "shell", "developer-tools", "homebrew", "version-manager"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: MacOS",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Software Development",
"Topic :: System :: Installation/Setup",
"Topic :: Utilities",
]
requires-python = ">=3.10"
dependencies = [
"typer>=0.15",
"rich>=13.9",
"questionary>=2.0",
"pydantic>=2.10",
"pydantic-settings>=2.7",
# Used by shimkit.core.version for SemVer-aware constraint checks.
# Already a transitive of pydantic, but make it explicit so a future
# pydantic that drops it doesn't silently break us.
"packaging>=23.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3",
"pytest-mock>=3.14",
"pytest-cov>=6.0",
"ruff>=0.9",
"mypy>=1.13",
"bandit>=1.7",
"pip-audit>=2.7",
# Tools' optional-extra deps land in [dev] so tests exercise them
# in CI. Production users still install per-tool extras explicitly
# (uv tool install 'shimkit[adguard]', etc.).
"ruamel.yaml>=0.18",
"requests>=2.32",
"psutil>=6.0",
"docker>=7.1",
"dnspython>=2.7",
]
# Per-tool optional extras. The base `shimkit` install is intentionally
# lean; users add the extras they need. `extra-tools` is the umbrella.
dns = ["dnspython>=2.7"]
adguard = ["ruamel.yaml>=0.18", "requests>=2.32", "psutil>=6.0"]
docker-clean = ["docker>=7.1"]
extra-tools = [
"dnspython>=2.7",
"ruamel.yaml>=0.18",
"requests>=2.32",
"psutil>=6.0",
"docker>=7.1",
]
[project.scripts]
shimkit = "shimkit.cli:app"
[project.urls]
Homepage = "https://opensource.simtabi.com/shimkit"
Documentation = "https://opensource.simtabi.com/documentation/shimkit"
Repository = "https://github.com/simtabi/shimkit"
Issues = "https://github.com/simtabi/shimkit/issues"
Changelog = "https://github.com/simtabi/shimkit/blob/main/CHANGELOG.md"
[tool.hatch.build.targets.wheel]
packages = ["src/shimkit"]
[tool.hatch.build.targets.wheel.force-include]
"src/shimkit/config/defaults.json" = "shimkit/config/defaults.json"
"src/shimkit/py.typed" = "shimkit/py.typed"
[tool.hatch.build.targets.sdist]
include = ["src/shimkit", "tests", "config", "installer", "README.md", "LICENSE", "CHANGELOG.md"]
[tool.pytest.ini_options]
minversion = "8.0"
testpaths = ["tests"]
addopts = "-ra --strict-markers --strict-config"
# Surface real warnings as errors, but tolerate third-party deprecation
# noise so future Python / library releases don't flake CI.
filterwarnings = [
"error",
"ignore::DeprecationWarning",
"ignore::PendingDeprecationWarning",
]
[tool.ruff]
line-length = 100
target-version = "py310"
src = ["src", "tests"]
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP", "B", "SIM", "RUF"]
ignore = ["E501"]
[tool.ruff.lint.flake8-bugbear]
# Typer uses callable defaults in function signatures as its public API.
# B008 would otherwise flag every command we declare.
extend-immutable-calls = ["typer.Argument", "typer.Option"]
[tool.ruff.lint.per-file-ignores]
# Test stubs use throwaway classes to mock pydantic models; RUF012 (mutable
# class-attribute defaults need ClassVar) is real-code advice that doesn't
# apply to dataclass-style test fakes.
"tests/*" = ["RUF012"]
[tool.ruff.lint.isort]
# CI installs shimkit editably via `pip install -e ".[dev]"`, after which
# ruff's first-party heuristic can flip-flop on whether `shimkit` is the
# source tree or the installed package. Pin it explicitly.
known-first-party = ["shimkit"]
[tool.mypy]
python_version = "3.10"
strict = true
files = ["src/shimkit"]
plugins = ["pydantic.mypy"]
# Modules pulled in by per-tool optional extras. mypy strict otherwise
# refuses to type-check a tree where the extras aren't installed (which
# is the default CI situation — CI installs `[dev]`, not `[extra-tools]`).
[[tool.mypy.overrides]]
module = [
"docker",
"docker.*",
"dns",
"dns.*",
"psutil",
"requests",
"ruamel",
"ruamel.*",
]
ignore_missing_imports = true
[tool.pydantic-mypy]
init_forbid_extra = true
init_typed = true
warn_required_dynamic_aliases = true