GRM-7: feat: integrate AnsibleExecutor and i18n into CLI and RunnerManager

This commit is contained in:
Emil Simeonov
2026-06-18 20:17:07 +02:00
parent 564c12e782
commit 047ee05fa1
4 changed files with 201 additions and 149 deletions
+20 -24
View File
@@ -8,55 +8,55 @@ import click
from dotenv import load_dotenv # pyright: ignore[reportMissingImports,reportUnknownVariableType]
from .exceptions import GRMError
from .i18n import _
from .runner_manager import RunnerManager
load_dotenv(override=True)
@click.group()
@click.group(help=_("Gitea Runner Manager — manage Gitea Actions runners."))
@click.version_option(version="0.1.0")
def cli() -> None:
"""Gitea Runner Manager — manage Gitea Actions runners."""
pass
@cli.command()
@cli.command(help=_("Install and configure a Gitea Runner on a remote host."))
@click.argument("host")
@click.option(
"--user",
"-u",
default=lambda: os.getenv("GITEA_RUNNER_USER", os.getlogin()),
help="SSH user",
help=_("SSH user"),
)
@click.option("--key", "-k", default=lambda: os.getenv("GITEA_RUNNER_KEY"), help="Path to SSH private key")
@click.option("--name", "-n", help="Runner name (default: host)")
@click.option("--key", "-k", default=lambda: os.getenv("GITEA_RUNNER_KEY"), help=_("Path to SSH private key"))
@click.option("--name", "-n", help=_("Gitea Runner name (default: host)"))
@click.option(
"--token",
"-t",
default=lambda: os.getenv("GITEA_REGISTRATION_TOKEN"),
help="Registration token (env: GITEA_REGISTRATION_TOKEN)",
help=_("Registration token (env: GITEA_REGISTRATION_TOKEN)"),
)
@click.option(
"--mode",
"-m",
type=click.Choice(["docker", "binary"]),
default="docker",
help="Runner deployment mode (default: docker)",
help=_("Gitea Runner deployment mode (default: docker)"),
)
@click.option(
"--admin-token",
"-a",
default=lambda: os.getenv("GITEA_ADMIN_TOKEN"),
help="Gitea admin API token for integration test (env: GITEA_ADMIN_TOKEN)",
help=_("Gitea admin API token for integration test (env: GITEA_ADMIN_TOKEN)"),
)
@click.option(
"--integration-retries",
"-r",
type=int,
default=lambda: int(os.getenv("GITEA_INTEGRATION_RETRIES", "3")),
help="Integration test API retries (default: 3, env: GITEA_INTEGRATION_RETRIES)",
help=_("Integration test API retries (default: 3, env: GITEA_INTEGRATION_RETRIES)"),
)
@click.option("--ask-become-pass", is_flag=True, help="Prompt for sudo password")
@click.option("--ask-become-pass", is_flag=True, help=_("Prompt for sudo password"))
def install(
host: str,
user: str,
@@ -68,12 +68,9 @@ def install(
integration_retries: int,
ask_become_pass: bool,
) -> None:
"""Install and configure a runner on a remote host."""
gitea_url = os.getenv("GITEA_URL", "")
if not gitea_url:
raise click.ClickException("GITEA_URL must be set")
if not token:
raise click.ClickException("GITEA_REGISTRATION_TOKEN must be set (or pass --token)")
raise click.ClickException(_("GITEA_URL must be set (or pass --url)"))
manager = RunnerManager()
try:
manager.install(
@@ -89,27 +86,27 @@ def install(
ask_become_pass=ask_become_pass,
)
except GRMError as e:
raise click.ClickException(str(e)) from e
raise click.ClickException(_("Installation failed: {error}", error=e)) from e
@cli.command()
@cli.command(help=_("Update the Gitea Runner binary on a remote host."))
@click.argument("host")
@click.option(
"--user",
"-u",
default=lambda: os.getenv("GITEA_RUNNER_USER", os.getlogin()),
help="SSH user",
help=_("SSH user"),
)
@click.option("--key", "-k", default=lambda: os.getenv("GITEA_RUNNER_KEY"), help="Path to SSH private key")
@click.option("--version", "-v", help="Specific gitea_runner version")
@click.option("--key", "-k", default=lambda: os.getenv("GITEA_RUNNER_KEY"), help=_("Path to SSH private key"))
@click.option("--version", "-v", help=_("Specific Gitea Runner version"))
@click.option(
"--mode",
"-m",
type=click.Choice(["docker", "binary"]),
default="docker",
help="Runner deployment mode (default: docker)",
help=_("Gitea Runner deployment mode (default: docker)"),
)
@click.option("--ask-become-pass", is_flag=True, help="Prompt for sudo password")
@click.option("--ask-become-pass", is_flag=True, help=_("Prompt for sudo password"))
def update(
host: str,
user: str,
@@ -118,7 +115,6 @@ def update(
mode: str,
ask_become_pass: bool,
) -> None:
"""Update the gitea_runner binary on a remote host."""
manager = RunnerManager()
try:
manager.update(
@@ -130,4 +126,4 @@ def update(
ask_become_pass=ask_become_pass,
)
except GRMError as e:
raise click.ClickException(str(e)) from e
raise click.ClickException(_("Update failed: {error}", error=e)) from e