GRM-54: Integrate tea Gitea CLI for API interactions (#68)

This commit is contained in:
2026-06-22 07:04:58 +00:00
parent b8ab4f854b
commit 28e61aa166
17 changed files with 1319 additions and 265 deletions
+27 -4
View File
@@ -5,6 +5,7 @@ Handles installation of:
- actionlint (workflow YAML linter)
- git-cliff (changelog generator)
- act_runner (Gitea Actions local runner, optional)
- tea (Gitea CLI — official command-line tool for Gitea API operations)
Each tool is installed to ``~/.local/bin`` if not already on PATH.
Idempotent: skips tools that are already available.
@@ -36,6 +37,8 @@ GIT_CLIFF_VERSION = "2.13.0"
ACT_RUNNER_VERSION = "0.2.11"
TEA_VERSION = "0.14.1"
def _arch() -> str:
"""Return the architecture string used by release assets."""
@@ -144,7 +147,19 @@ def install_act_runner() -> bool:
return True
TOOL_NAMES = ["actionlint", "git-cliff", "act_runner"]
def install_tea() -> bool:
"""Install tea (Gitea CLI) if not already present. Returns True if installed/skipped."""
if _is_installed("tea"):
click.echo("tea: already installed")
return True
arch = _arch()
url = f"https://dl.gitea.com/tea/{TEA_VERSION}/tea-{TEA_VERSION}-linux-{arch}"
dest = _download_binary(url, "tea")
click.echo(f"tea: installed to {dest}")
return True
TOOL_NAMES = ["actionlint", "git-cliff", "act_runner", "tea"]
def _install_tool(name: str) -> bool:
@@ -155,6 +170,8 @@ def _install_tool(name: str) -> bool:
return install_git_cliff()
if name == "act_runner":
return install_act_runner()
if name == "tea":
return install_tea()
raise click.ClickException(f"Unknown tool: {name}")
@@ -166,15 +183,21 @@ def list_tools() -> None:
@click.command()
@click.option("--tool", type=click.Choice(TOOL_NAMES), help="Install a specific tool.")
@click.option(
"--tool",
"tools",
multiple=True,
type=click.Choice(TOOL_NAMES),
help="Install specific tool(s). Can be repeated.",
)
@click.option("--list", "list_status", is_flag=True, help="List tool installation status.")
def main(tool: str | None, list_status: bool) -> None:
def main(tools: tuple[str, ...], list_status: bool) -> None:
"""Install CI/CD development tools to ~/.local/bin."""
if list_status:
list_tools()
return
tools_to_install = [tool] if tool else TOOL_NAMES
tools_to_install = list(tools) if tools else TOOL_NAMES
failed: list[str] = []
for name in tools_to_install:
try: