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:
Emil Simeonov
2026-06-19 03:12:04 +02:00
parent a9adb71a08
commit 3d943b57dc
5 changed files with 214 additions and 37 deletions
+68 -2
View File
@@ -70,6 +70,31 @@ class TestCLI:
assert result.exit_code != 0
assert "GITEA_URL must be set" in result.output
@patch("gitea_runner_manager.cli.RunnerManager")
def test_install_with_url_flag(self, mock_manager_class: MagicMock) -> None:
mock_manager = MagicMock()
mock_manager_class.return_value = mock_manager
with patch.dict("os.environ", {"GITEA_REGISTRATION_TOKEN": "tok"}, clear=True):
runner = CliRunner()
result = runner.invoke(
cli,
["install", "host1", "--user", "ubuntu", "--token", "tok", "--url", "https://git.example.com"],
)
assert result.exit_code == 0
mock_manager.install.assert_called_once_with(
host="host1",
user="ubuntu",
key=None,
name=None,
token="tok",
gitea_url="https://git.example.com",
mode="docker",
admin_token=None,
integration_retries=3,
ask_become_pass=True,
)
@patch("gitea_runner_manager.cli.RunnerManager")
def test_install_missing_token(self, mock_manager_class: MagicMock) -> None:
mock_manager = MagicMock()
@@ -349,6 +374,26 @@ class TestCLI:
assert result.exit_code != 0
assert "GITEA_URL must be set" in result.output
@patch("gitea_runner_manager.cli.RunnerManager")
def test_disable_with_url_flag(self, mock_manager_class: MagicMock) -> None:
mock_manager = MagicMock()
mock_manager_class.return_value = mock_manager
with patch.dict("os.environ", {"GITEA_REGISTRATION_TOKEN": "tok"}, clear=True):
runner = CliRunner()
result = runner.invoke(cli, ["disable", "r1", "--token", "tok", "--url", "https://git.example.com"])
assert result.exit_code == 0
mock_manager.disable.assert_called_once_with(
name="r1",
host=None,
user=None,
key=None,
token="tok",
gitea_url="https://git.example.com",
mode=None,
ask_become_pass=True,
)
@patch("gitea_runner_manager.cli.RunnerManager")
def test_disable_error(self, mock_manager_class: MagicMock) -> None:
mock_manager = MagicMock()
@@ -395,8 +440,8 @@ class TestCLI:
token="tok",
gitea_url="https://git.example.com",
mode=None,
ask_become_pass=True,
force=False,
ask_become_pass=True,
)
@patch("gitea_runner_manager.cli.RunnerManager")
@@ -415,8 +460,8 @@ class TestCLI:
token="tok",
gitea_url="https://git.example.com",
mode=None,
ask_become_pass=True,
force=True,
ask_become_pass=True,
)
@patch("gitea_runner_manager.cli.RunnerManager")
@@ -485,6 +530,27 @@ class TestCLI:
assert result.exit_code != 0
assert "GITEA_URL must be set" in result.output
@patch("gitea_runner_manager.cli.RunnerManager")
def test_remove_with_url_flag(self, mock_manager_class: MagicMock) -> None:
mock_manager = MagicMock()
mock_manager_class.return_value = mock_manager
with patch.dict("os.environ", {"GITEA_REGISTRATION_TOKEN": "tok"}, clear=True):
runner = CliRunner()
result = runner.invoke(cli, ["remove", "r1", "--token", "tok", "--url", "https://git.example.com"])
assert result.exit_code == 0
mock_manager.remove.assert_called_once_with(
name="r1",
host=None,
user=None,
key=None,
token="tok",
gitea_url="https://git.example.com",
mode=None,
force=False,
ask_become_pass=True,
)
@patch("gitea_runner_manager.cli.RunnerManager")
def test_remove_error(self, mock_manager_class: MagicMock) -> None:
mock_manager = MagicMock()