45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
|
|
PROJECT_ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def test_compose_is_local_and_does_not_require_nvidia() -> None:
|
|
compose = yaml.safe_load(
|
|
(PROJECT_ROOT / "docker-compose.yml").read_text(encoding="utf-8")
|
|
)
|
|
webui = compose["services"]["webui"]
|
|
|
|
assert webui["ports"] == ["127.0.0.1:8000:8000"]
|
|
assert "deploy" not in webui
|
|
|
|
mlflow = compose["services"]["mlflow"]
|
|
assert mlflow["ports"] == ["127.0.0.1:5000:5000"]
|
|
assert mlflow["volumes"] == ["./mlflow:/mlflow"]
|
|
assert "server" in mlflow["command"]
|
|
assert webui["environment"]["YOLO_WEBUI_MLFLOW_TRACKING_URI"] == "http://mlflow:5000"
|
|
|
|
|
|
def test_docker_dependencies_are_exported_from_lock_file() -> None:
|
|
dockerfile = (PROJECT_ROOT / "Dockerfile").read_text(encoding="utf-8")
|
|
|
|
assert "COPY pyproject.toml uv.lock README.md ./" in dockerfile
|
|
assert "uv export --locked --no-dev" in dockerfile
|
|
assert "--group build" in dockerfile
|
|
assert "--prune ultralytics" in dockerfile
|
|
assert "uv pip install --system --no-deps --no-build-isolation ." in dockerfile
|
|
assert "ULTRALYTICS_SAFE_LOAD=1" in dockerfile
|
|
|
|
|
|
def test_docker_context_excludes_local_training_artifacts() -> None:
|
|
ignored = {
|
|
line.strip()
|
|
for line in (PROJECT_ROOT / ".dockerignore").read_text(encoding="utf-8").splitlines()
|
|
if line.strip() and not line.lstrip().startswith("#")
|
|
}
|
|
|
|
assert {".git", ".venv", "datasets", "models", "runs", "mlruns"} <= ignored
|