mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 19:01:54 +00:00
3529 invalid comments in 528 files, grandfathered in while the linter only saw the working-tree diff. Removal ran through the linter's own collectors, so detection and deletion cannot drift: a comment whose opener line is blank before it and whose closer line is blank after it loses all its lines, anything else loses only the comment region, and a line left holding a bare delimiter goes with it. Five files keep their comments behind a nocheck marker instead. Four are upstream configs whose inline docs are upstream's own (mautrix, systemd journald, nextcloud-oidc-login, MediaWiki). In littlejs the commented-out entries ARE the deactivation mechanism for an example tile, so deleting them would delete configuration. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
66 lines
2.3 KiB
Python
66 lines
2.3 KiB
Python
"""Data types for the development inventory matrix.
|
|
|
|
`DevInventorySpec` is the value type `build_dev_inventory` consumes —
|
|
it carries everything `infinito administration inventory provision`
|
|
needs to materialise one development inventory folder. `PlanEntry` is
|
|
the per-round tuple `plan_dev_inventory_matrix` emits and the deploy
|
|
wrapper iterates.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
if TYPE_CHECKING:
|
|
from collections.abc import Mapping
|
|
|
|
PlanEntry = tuple[int, str, dict[str, int], tuple[str, ...], tuple[str, ...]]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class DevInventorySpec:
|
|
"""Everything `infinito administration inventory provision` needs to
|
|
materialise one development inventory folder.
|
|
|
|
`extra_vars` wins over the implicit `STORAGE_CONSTRAINED` / `RUNTIME`
|
|
overrides so callers (and tests) keep the documented "user-provided
|
|
vars always win" behaviour without re-implementing the merge.
|
|
|
|
`active_variants` is the per-app variant index for the round this
|
|
folder represents. Apps absent from the mapping (or with an out-of-
|
|
range index) fall back to variant 0. The resolved variant payload
|
|
for every app in `include` is baked into the inventory as an
|
|
`applications.<app>` override, so the deploy stage no longer needs
|
|
a runtime variant selector — the inventory itself is variant-resolved.
|
|
"""
|
|
|
|
inventory_dir: str
|
|
include: tuple[str, ...]
|
|
storage_constrained: bool
|
|
runtime: str
|
|
extra_vars: Mapping[str, Any] | None = None
|
|
services_disabled: str = ""
|
|
active_variants: Mapping[str, int] | None = None
|
|
|
|
def __post_init__(self) -> None:
|
|
if not self.include:
|
|
raise ValueError("DevInventorySpec.include must not be empty")
|
|
if not isinstance(self.include, tuple):
|
|
object.__setattr__(self, "include", tuple(self.include))
|
|
|
|
def overrides(self) -> dict[str, Any]:
|
|
merged: dict[str, Any] = {
|
|
"STORAGE_CONSTRAINED": bool(self.storage_constrained),
|
|
"RUNTIME": self.runtime,
|
|
}
|
|
if self.extra_vars:
|
|
merged.update(self.extra_vars)
|
|
return merged
|
|
|
|
def variant_selectors(self) -> dict[str, int]:
|
|
return dict(self.active_variants or {})
|
|
|
|
def inventory_root(self) -> str:
|
|
return str(self.inventory_dir).rstrip("/")
|