Repository navigation
Expand file tree
/
Copy pathpyproject.toml
More file actions
117 lines (102 loc) · 3.26 KB
/
Copy pathpyproject.toml
File metadata and controls
117 lines (102 loc) · 3.26 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
[project]
name = "cloudfall"
version = "0.7.0"
description = "The operator's record for self-hosted servers run by an AI agent: Ansible executes, Cloudfall gates, verifies and keeps the receipts"
readme = "README.md"
license = "AGPL-3.0-or-later"
license-files = ["LICENSE"]
requires-python = ">=3.14"
keywords = ["ai-agents", "ansible", "mcp", "self-hosted", "devops", "sre", "debian", "hetzner", "audit-log", "paas-alternative"]
classifiers = [
"Development Status :: 4 - Beta",
"Environment :: Console",
"Intended Audience :: System Administrators",
"Operating System :: POSIX :: Linux",
"Programming Language :: Python :: 3.14",
"Topic :: System :: Installation/Setup",
"Topic :: System :: Systems Administration",
"Typing :: Typed",
]
dependencies = [
"ansible-core>=2.21,<2.22",
"jsonschema[format]>=4.23,<5",
"pyyaml>=6,<7",
"treaty==1.0.0rc38",
]
[project.urls]
Homepage = "https://cloudfall.dev"
Repository = "https://github.com/cloudfall-dev/cloudfall"
Changelog = "https://github.com/cloudfall-dev/cloudfall/blob/main/CHANGELOG.md"
Issues = "https://github.com/cloudfall-dev/cloudfall/issues"
[project.optional-dependencies]
mcp = [
"mcp>=2,<3",
]
[project.scripts]
cloudfall = "cloudfall.cli:run"
cloudfall-engine = "cloudfall_engine.cli:run"
[build-system]
requires = ["hatchling>=1.27"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["sdk/src/cloudfall", "engine/src/cloudfall_engine"]
# Installed wheels carry the schema catalog and the Ansible engine as package
# data so a fleet repository needs nothing from this checkout; see
# cloudfall.resources for how defaults resolve.
# The sdist carries what builds and tests the package, not the repo's tooling,
# evaluations or website.
[tool.hatch.build.targets.sdist]
exclude = [
"/.github",
"/.agents",
"/.claude",
"/uv.lock",
"/evaluations",
"/site",
"/tmp",
"/dist",
]
[tool.hatch.build.targets.wheel.force-include]
"config/schemas" = "cloudfall/_bundled/schemas"
"engine/ansible" = "cloudfall_engine/_bundled/ansible"
[dependency-groups]
dev = [
"ansible-lint>=26,<27",
"mcp>=2,<3",
"mypy>=1.13",
"pytest>=8",
"ruff>=0.8",
"types-jsonschema>=4.23",
"types-pyyaml>=6",
]
[tool.pytest.ini_options]
testpaths = ["sdk/tests", "engine/tests"]
[tool.ruff]
line-length = 88
target-version = "py314"
# Standalone example applications are their own projects, not part of the
# package's lint domain.
extend-exclude = ["examples"]
[tool.ruff.lint]
select = ["ALL"]
ignore = [
"COM812",
"D203",
"D213",
]
# treaty's Arg, Flag, and Out are dataclass field specifiers, like field().
[tool.ruff.lint.flake8-bugbear]
extend-immutable-calls = ["treaty.Arg", "treaty.Flag", "treaty.Out"]
[tool.ruff.lint.per-file-ignores]
"**/tests/**" = ["D103", "INP001", "PLR2004", "S101"]
# Evaluation scripts run standalone, never imported as a package.
"evaluations/**" = ["INP001"]
[tool.mypy]
python_version = "3.14"
strict = true
files = ["sdk/src", "sdk/tests", "engine/src", "engine/tests"]
# ansible-core ships no type information. Only cloudfall.ansible_api imports
# it, and it converts what it reads into typed value objects at that edge.
[[tool.mypy.overrides]]
module = ["ansible.*"]
ignore_missing_imports = true