GRM-19: refactor: resolve_runner returns gitea_url, add --url CLI option, force remove improvements, code quality fixes
- _resolve_runner now returns gitea_url from registry so disable/remove can reuse the URL stored at install time without requiring env vars. - Added --url option to install, disable, and remove CLI commands. - remove(force=True) no longer requires gitea_url or token. - Moved _parse_status outside the for loop in list_runners. - Updated all translations and tests to match.
This commit is contained in:
@@ -186,34 +186,51 @@ class TestRunnerManager:
|
||||
|
||||
def test_resolve_runner_from_registry(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "10.0.0.1", "user": "ubuntu", "key": "/key", "mode": "docker"}
|
||||
mock_registry.get.return_value = {
|
||||
"host": "10.0.0.1",
|
||||
"user": "ubuntu",
|
||||
"key": "/key",
|
||||
"mode": "docker",
|
||||
"gitea_url": "https://git.example.com",
|
||||
}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
host, user, key, mode = manager._resolve_runner("r1")
|
||||
host, user, key, mode, gitea_url = manager._resolve_runner("r1")
|
||||
assert host == "10.0.0.1"
|
||||
assert user == "ubuntu"
|
||||
assert key == "/key"
|
||||
assert mode == "docker"
|
||||
assert gitea_url == "https://git.example.com"
|
||||
mock_registry.get.assert_called_once_with("r1")
|
||||
|
||||
def test_resolve_runner_explicit_host_user(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = None
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
host, user, key, mode = manager._resolve_runner("r1", host="10.0.0.2", user="root")
|
||||
host, user, key, mode, gitea_url = manager._resolve_runner("r1", host="10.0.0.2", user="root")
|
||||
assert host == "10.0.0.2"
|
||||
assert user == "root"
|
||||
assert key is None
|
||||
assert mode == "docker"
|
||||
assert gitea_url == ""
|
||||
|
||||
def test_resolve_runner_override(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "10.0.0.1", "user": "ubuntu", "key": "/key", "mode": "docker"}
|
||||
mock_registry.get.return_value = {
|
||||
"host": "10.0.0.1",
|
||||
"user": "ubuntu",
|
||||
"key": "/key",
|
||||
"mode": "docker",
|
||||
"gitea_url": "https://git.example.com",
|
||||
}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
host, user, key, mode = manager._resolve_runner("r1", host="10.0.0.2", user="root", key="/new", mode="binary")
|
||||
host, user, key, mode, gitea_url = manager._resolve_runner(
|
||||
"r1", host="10.0.0.2", user="root", key="/new", mode="binary"
|
||||
)
|
||||
assert host == "10.0.0.2"
|
||||
assert user == "root"
|
||||
assert key == "/new"
|
||||
assert mode == "binary"
|
||||
assert gitea_url == "https://git.example.com"
|
||||
|
||||
def test_resolve_runner_not_found(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
@@ -293,7 +310,13 @@ class TestRunnerManager:
|
||||
|
||||
def test_disable(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "host", "user": "user", "key": None, "mode": "docker"}
|
||||
mock_registry.get.return_value = {
|
||||
"host": "host",
|
||||
"user": "user",
|
||||
"key": None,
|
||||
"mode": "docker",
|
||||
"gitea_url": "",
|
||||
}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
mock_executor = MagicMock()
|
||||
manager._executor = mock_executor
|
||||
@@ -308,6 +331,24 @@ class TestRunnerManager:
|
||||
assert "runner_mode=docker" in cmd_str
|
||||
assert "Disabling Gitea Runner r1 on host" in mock_executor.run.call_args.kwargs["description"]
|
||||
|
||||
def test_disable_uses_registry_gitea_url(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {
|
||||
"host": "host",
|
||||
"user": "user",
|
||||
"key": None,
|
||||
"mode": "docker",
|
||||
"gitea_url": "https://registry.example.com",
|
||||
}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
mock_executor = MagicMock()
|
||||
manager._executor = mock_executor
|
||||
|
||||
manager.disable("r1", token="tok")
|
||||
cmd = mock_executor.run.call_args.args[0]
|
||||
cmd_str = " ".join(cmd)
|
||||
assert "gitea_url=https://registry.example.com" in cmd_str
|
||||
|
||||
def test_disable_missing_token(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "host", "user": "user"}
|
||||
@@ -339,7 +380,13 @@ class TestRunnerManager:
|
||||
|
||||
def test_remove(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "host", "user": "user", "key": None, "mode": "docker"}
|
||||
mock_registry.get.return_value = {
|
||||
"host": "host",
|
||||
"user": "user",
|
||||
"key": None,
|
||||
"mode": "docker",
|
||||
"gitea_url": "",
|
||||
}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
mock_executor = MagicMock()
|
||||
manager._executor = mock_executor
|
||||
@@ -383,7 +430,13 @@ class TestRunnerManager:
|
||||
|
||||
def test_remove_force_skips_playbook(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "host", "user": "user", "key": None, "mode": "docker"}
|
||||
mock_registry.get.return_value = {
|
||||
"host": "host",
|
||||
"user": "user",
|
||||
"key": None,
|
||||
"mode": "docker",
|
||||
"gitea_url": "",
|
||||
}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
mock_executor = MagicMock()
|
||||
manager._executor = mock_executor
|
||||
@@ -392,6 +445,18 @@ class TestRunnerManager:
|
||||
mock_executor.run.assert_not_called()
|
||||
mock_registry.remove.assert_called_once_with("r1")
|
||||
|
||||
def test_remove_force_without_token_or_url(self) -> None:
|
||||
"""Force removal should not require token or gitea_url."""
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.get.return_value = {"host": "host", "user": "user"}
|
||||
manager = RunnerManager(registry=mock_registry)
|
||||
mock_executor = MagicMock()
|
||||
manager._executor = mock_executor
|
||||
|
||||
manager.remove("r1", force=True)
|
||||
mock_executor.run.assert_not_called()
|
||||
mock_registry.remove.assert_called_once_with("r1")
|
||||
|
||||
def test_list_runners_docker(self) -> None:
|
||||
mock_registry = MagicMock()
|
||||
mock_registry.list.return_value = {
|
||||
|
||||
Reference in New Issue
Block a user