Rename Castle -> Wild PC across the repo
Repo-side rename only (Phases 1-3 of the migration plan); the live box (~/.castle, systemd units, /data/castle, domains) is a separate cutover. - Slug `castle` -> `wildpc`: CLI command, module names (wildpc_core/cli/api), dist names, entry point `wildpc = wildpc_cli.main:main`. - Identifiers: CastleConfig/NATSClient/DirError/MDNS -> Wildpc*. - Env/constants: CASTLE_* -> WILDPC_*; ~/.castle -> ~/.wildpc, castle.yaml -> wildpc.yaml, /data/castle -> /data/wildpc. - Systemd UNIT_PREFIX castle- -> wildpc-; own programs castle-api/gateway/etc. - Display prose "Castle" -> "Wild PC" in docs, agent-guide files, README, frontend. - Package dirs and bootstrap yaml renamed via git mv; lockfiles regenerated; redundant nested uv.lock files dropped (workspace root lock is authoritative). Tests: core 273, cli 47, wildpc-api 120 all pass. Frontend type-checks + builds. Fixed a stale test fixture (secret_env_path kind arg) broken pre-rename.
This commit is contained in:
@@ -5,9 +5,9 @@ from __future__ import annotations
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from castle_core import deploy as deploy_mod
|
||||
from castle_core.deploy import _desired_unit_files, _prune_orphans
|
||||
from castle_core.registry import Deployment, NodeConfig, NodeRegistry
|
||||
from wildpc_core import deploy as deploy_mod
|
||||
from wildpc_core.deploy import _desired_unit_files, _prune_orphans
|
||||
from wildpc_core.registry import Deployment, NodeConfig, NodeRegistry
|
||||
|
||||
|
||||
def _svc(managed: bool = True, schedule: str | None = None) -> Deployment:
|
||||
@@ -23,7 +23,7 @@ def _svc(managed: bool = True, schedule: str | None = None) -> Deployment:
|
||||
|
||||
|
||||
def _registry(**deployed: Deployment) -> NodeRegistry:
|
||||
reg = NodeRegistry(node=NodeConfig(castle_root="/x", gateway_port=9000))
|
||||
reg = NodeRegistry(node=NodeConfig(wildpc_root="/x", gateway_port=9000))
|
||||
for name, d in deployed.items():
|
||||
d.name = name
|
||||
reg.put(d)
|
||||
@@ -38,11 +38,11 @@ def _touch(d: Path, *names: str) -> None:
|
||||
class TestDesiredUnitFiles:
|
||||
def test_managed_service_yields_service_file(self) -> None:
|
||||
reg = _registry(foo=_svc())
|
||||
assert _desired_unit_files(reg) == {"castle-foo.service"}
|
||||
assert _desired_unit_files(reg) == {"wildpc-foo.service"}
|
||||
|
||||
def test_scheduled_job_yields_service_and_timer(self) -> None:
|
||||
reg = _registry(job=_svc(schedule="0 2 * * *"))
|
||||
assert _desired_unit_files(reg) == {"castle-job-job.service", "castle-job-job.timer"}
|
||||
assert _desired_unit_files(reg) == {"wildpc-job-job.service", "wildpc-job-job.timer"}
|
||||
|
||||
def test_unmanaged_excluded(self) -> None:
|
||||
reg = _registry(foo=_svc(managed=False))
|
||||
@@ -54,7 +54,7 @@ class TestPruneOrphans:
|
||||
units = tmp_path / "systemd"
|
||||
units.mkdir()
|
||||
# keep-me is in the registry; gone is not; gone.timer is also orphaned
|
||||
_touch(units, "castle-keep.service", "castle-gone.service", "castle-gone.timer")
|
||||
_touch(units, "wildpc-keep.service", "wildpc-gone.service", "wildpc-gone.timer")
|
||||
reg = _registry(keep=_svc())
|
||||
msgs: list[str] = []
|
||||
with (
|
||||
@@ -62,17 +62,17 @@ class TestPruneOrphans:
|
||||
patch.object(deploy_mod.subprocess, "run") as mock_run,
|
||||
):
|
||||
_prune_orphans(reg, msgs)
|
||||
assert (units / "castle-keep.service").exists()
|
||||
assert not (units / "castle-gone.service").exists()
|
||||
assert not (units / "castle-gone.timer").exists()
|
||||
assert (units / "wildpc-keep.service").exists()
|
||||
assert not (units / "wildpc-gone.service").exists()
|
||||
assert not (units / "wildpc-gone.timer").exists()
|
||||
# stop + disable were invoked for each removed unit
|
||||
assert mock_run.call_count >= 2
|
||||
assert any("castle-gone.service" in m for m in msgs)
|
||||
assert any("wildpc-gone.service" in m for m in msgs)
|
||||
|
||||
def test_unscheduled_job_drops_stale_timer_keeps_service(self, tmp_path: Path) -> None:
|
||||
units = tmp_path / "systemd"
|
||||
units.mkdir()
|
||||
_touch(units, "castle-job.service", "castle-job.timer")
|
||||
_touch(units, "wildpc-job.service", "wildpc-job.timer")
|
||||
# job is still managed but no longer scheduled → its timer is now an orphan
|
||||
reg = _registry(job=_svc(schedule=None))
|
||||
with (
|
||||
@@ -80,17 +80,17 @@ class TestPruneOrphans:
|
||||
patch.object(deploy_mod.subprocess, "run"),
|
||||
):
|
||||
_prune_orphans(reg, [])
|
||||
assert (units / "castle-job.service").exists()
|
||||
assert not (units / "castle-job.timer").exists()
|
||||
assert (units / "wildpc-job.service").exists()
|
||||
assert not (units / "wildpc-job.timer").exists()
|
||||
|
||||
def test_demoted_to_unmanaged_is_pruned(self, tmp_path: Path) -> None:
|
||||
units = tmp_path / "systemd"
|
||||
units.mkdir()
|
||||
_touch(units, "castle-foo.service")
|
||||
_touch(units, "wildpc-foo.service")
|
||||
reg = _registry(foo=_svc(managed=False)) # still in registry but unmanaged
|
||||
with (
|
||||
patch.object(deploy_mod, "SYSTEMD_USER_DIR", units),
|
||||
patch.object(deploy_mod.subprocess, "run"),
|
||||
):
|
||||
_prune_orphans(reg, [])
|
||||
assert not (units / "castle-foo.service").exists()
|
||||
assert not (units / "wildpc-foo.service").exists()
|
||||
|
||||
Reference in New Issue
Block a user