Add reusable GIS run mode and AI runtime opt-in
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-07-05 00:25:12 +02:00
parent f4f83c0e80
commit 8b09bee84a
23 changed files with 262 additions and 15 deletions
+31 -2
View File
@@ -8,7 +8,7 @@ def test_backend_dockerfile_copies_package_sources_before_pip_install() -> None:
dockerfile = ROOT / "backend" / "Dockerfile"
lines = dockerfile.read_text(encoding="utf-8").splitlines()
pip_install_index = lines.index('RUN pip install --no-cache-dir ".[gis]"')
pip_install_index = lines.index('RUN extras=".[gis]" \\')
preceding = "\n".join(lines[:pip_install_index])
assert "COPY pyproject.toml README.md /app/" in preceding
@@ -18,7 +18,9 @@ def test_backend_dockerfile_copies_package_sources_before_pip_install() -> None:
def test_backend_dockerfile_installs_approved_gis_runtime_stack() -> None:
dockerfile = (ROOT / "backend" / "Dockerfile").read_text(encoding="utf-8")
assert 'RUN pip install --no-cache-dir ".[gis]"' in dockerfile
assert "ARG GEOINTEL_INSTALL_AI=false" in dockerfile
assert 'extras=".[gis]"' in dockerfile
assert 'extras=".[gis,ai]"' in dockerfile
assert "RUN python scripts/gis_import_smoke.py" in dockerfile
assert "gdal-bin" in dockerfile
assert "libgdal-dev" in dockerfile
@@ -37,6 +39,16 @@ def test_backend_pyproject_exposes_gis_optional_dependency_group() -> None:
assert '"ultralytics>=8.3,<9"' not in pyproject.split("gis = [", 1)[1].split("]", 1)[0]
def test_all_in_one_dockerfile_can_opt_into_ai_dependencies_without_base_install() -> None:
dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
assert "ARG GEOINTEL_INSTALL_AI=false" in dockerfile
assert 'extras=".[gis]"' in dockerfile
assert 'extras=".[gis,ai]"' in dockerfile
assert "python scripts/gis_import_smoke.py" in dockerfile
assert "yolo_preflight.py" in dockerfile
def test_compose_does_not_require_missing_root_env_file() -> None:
compose = (ROOT / "docker-compose.yml").read_text(encoding="utf-8")
@@ -60,6 +72,7 @@ def test_compose_exposes_frontend_on_configurable_host_port_with_cors_origin() -
def test_env_example_uses_runtime_env_names_read_by_backend_and_frontend() -> None:
env_example = (ROOT / ".env.example").read_text(encoding="utf-8")
assert "GEOINTEL_INSTALL_AI=false" in env_example
assert "YOLO_ENABLED=false" in env_example
assert "YOLO_MODEL_PATH=" in env_example
assert "YOLO_MAX_TILES=100" in env_example
@@ -182,3 +195,19 @@ def test_gis_import_smoke_script_checks_runtime_imports() -> None:
def test_backend_docker_context_contains_gis_import_smoke_script() -> None:
assert (ROOT / "backend" / "scripts" / "gis_import_smoke.py").exists()
def test_unraid_deploy_passes_ai_build_arg_and_yolo_runtime_env() -> None:
deploy_ps1 = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8")
deploy_sh = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8")
assert "--build-arg GEOINTEL_INSTALL_AI=${GEOINTEL_INSTALL_AI:-false}" in deploy_sh
assert "--build-arg GEOINTEL_INSTALL_AI='$InstallAi'" in deploy_ps1
assert "[string]$InstallAi" in deploy_ps1
assert 'YOLO_ENABLED="${YOLO_ENABLED:-false}"' in run_script
assert '-e YOLO_ENABLED="$YOLO_ENABLED"' in run_script
assert '-e YOLO_MODEL_PATH="$YOLO_MODEL_PATH"' in run_script
assert '-e YOLO_MAX_TILES="$YOLO_MAX_TILES"' in run_script
assert "-v \"${GEOINTEL_MODELS_PATH}:/app/models\"" in run_script