chore(web): scaffold operations/ and web/ packages + [web] extra (W0)
This commit is contained in:
@@ -27,6 +27,14 @@ dev = [
|
|||||||
"mypy>=1.10",
|
"mypy>=1.10",
|
||||||
"types-paramiko",
|
"types-paramiko",
|
||||||
]
|
]
|
||||||
|
web = [
|
||||||
|
"fastapi>=0.115",
|
||||||
|
"uvicorn[standard]>=0.30",
|
||||||
|
"jinja2>=3.1",
|
||||||
|
"authlib>=1.3",
|
||||||
|
"itsdangerous>=2.2",
|
||||||
|
"httpx>=0.27",
|
||||||
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
ci-orchestrator = "ci_orchestrator.__main__:cli"
|
ci-orchestrator = "ci_orchestrator.__main__:cli"
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
"""Pure operations layer shared by the CLI and the web UI.
|
||||||
|
|
||||||
|
No ``click``, no ``print``, no presentation I/O — every function here
|
||||||
|
returns a dataclass and is safe to import from either a CLI command
|
||||||
|
wrapper or a web route.
|
||||||
|
"""
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
"""Web UI package: FastAPI app, auth, and routes for VM/host management.
|
||||||
|
|
||||||
|
Depends on the optional ``[web]`` extra; the CLI core stays dep-light.
|
||||||
|
"""
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
"""Scaffold smoke test for the W0 packages: operations/ and web/.
|
||||||
|
|
||||||
|
Just proves both packages import cleanly. No logic lives here yet.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import ci_orchestrator.operations as operations
|
||||||
|
import ci_orchestrator.web as web
|
||||||
|
|
||||||
|
|
||||||
|
def test_operations_package_imports() -> None:
|
||||||
|
assert operations is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_web_package_imports() -> None:
|
||||||
|
assert web is not None
|
||||||
Reference in New Issue
Block a user