Files
computer-playbook/cli/administration/deploy/development/profile.py
T

72 lines
2.7 KiB
Python

"""Runtime-context helpers for the dev/CI compose stack."""
from __future__ import annotations
import os
def _declared(name: str) -> bool | None:
"""Explicit capability declaration, or None when it is left to the default."""
raw = (os.environ.get(name) or "").strip()
if raw == "true":
return True
if raw == "false":
return False
return None
class Profile:
"""Runtime identity and the capability decisions derived from it."""
def is_ci(self) -> bool:
"""True when any standard CI signal is set."""
return (
os.environ.get("GITHUB_ACTIONS") == "true"
or os.environ.get("INFINITO_RUNNING_ON_GITHUB") == "true"
or os.environ.get("CI") == "true"
)
def runs_on_github(self) -> bool:
"""True on a real GitHub runner; act and generic CI are not that."""
return os.environ.get("INFINITO_RUNNING_ON_GITHUB") == "true"
def cache_stack_enabled(self) -> bool:
"""True iff the pull-through cache stack should be loaded."""
declared = _declared("INFINITO_CACHE_STACK")
return (not self.is_ci()) if declared is None else declared
def gpu_reservable(self) -> bool:
"""True iff the docker daemon registers an NVIDIA runtime."""
return (os.environ.get("INFINITO_GPU_COUNT") or "0").strip() not in ("", "0")
def image_mirror_enabled(self) -> bool:
"""True iff image references should be rewritten to the GHCR mirror."""
declared = _declared("INFINITO_GHCR_MIRROR")
return self.runs_on_github() if declared is None else declared
def docker_root_ephemeral(self) -> bool:
"""True iff the docker data root may be wiped when the stack goes down."""
return self.runs_on_github()
def instance(self) -> int:
"""Slot index of this checkout; 0 is the primary one.
Bookkeeping only: the compose layering below keys off the concrete
resources a worktree was handed, never off this number, so a stray
slot cannot make compose demand a value nobody set.
"""
raw = (os.environ.get("INFINITO_INSTANCE") or "0").strip()
return int(raw) if raw.isdigit() else 0
def shared_git_dir(self) -> str:
"""Path of the checkout's shared .git directory, empty when it owns one."""
return (os.environ.get("INFINITO_GIT_COMMON_DIR") or "").strip()
def shared_cache_network(self) -> str:
"""Docker network of a cache stack owned elsewhere, empty when unset."""
return (os.environ.get("INFINITO_CACHE_NETWORK") or "").strip()
def owns_cache_stack(self) -> bool:
"""True iff this instance runs the cache stack rather than sharing it."""
return self.cache_stack_enabled() and not self.shared_cache_network()