Tussilago/config/checks.py

59 lines
1.5 KiB
Python

from __future__ import annotations
import shutil
from typing import TYPE_CHECKING
from django.conf import settings
from django.core.checks import Tags
from django.core.checks import Warning as DjangoWarning
from django.core.checks import register
if TYPE_CHECKING:
from django.core.checks import CheckMessage
REQUIRED_DEV_COMMANDS: tuple[str, ...] = (
"uname",
"curl",
"basename",
"grep",
"sort",
"tail",
"wget",
"unsquashfs",
"ssh-keygen",
"sudo",
"chown",
"truncate",
"mkfs.ext4",
"e2fsck",
)
@register(Tags.compatibility)
def check_required_dev_commands(*_: object, **__: object) -> list[CheckMessage]:
"""Warn in dev-like runtime when host tooling for init script is missing.
Returns:
A list of CheckMessage objects representing any issues found.
"""
if not (settings.DEBUG or getattr(settings, "TESTING", False)):
return []
missing_commands: list[str] = [
command for command in REQUIRED_DEV_COMMANDS if shutil.which(command) is None
]
if not missing_commands:
return []
return [
DjangoWarning(
"Missing host commands used by get_rootfs.bash.",
hint=(
"Dev-only tooling missing: "
f"{', '.join(missing_commands)}. "
"These are required for local VM/rootfs setup during development, not production runtime."
),
id="tussilago.W001",
),
]