Skip to content

Commit d097ba5

Browse files
committed
commodore tool command group
1 parent cd6575b commit d097ba5

5 files changed

Lines changed: 414 additions & 29 deletions

File tree

commodore/cli/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
from reclass_rs import Reclass
1010

1111
from dotenv import load_dotenv, find_dotenv
12-
from commodore import __git_version__, __version__
12+
13+
from commodore import __git_version__, __version__, tools
1314
from commodore.config import Config
1415
from commodore.version import version_info
1516

@@ -20,6 +21,7 @@
2021
from .inventory import inventory_group
2122
from .package import package_group
2223
from .oidc import commodore_fetch_token, commodore_login
24+
from .tool import tool_group
2325

2426

2527
def _version():
@@ -75,6 +77,7 @@ def commodore(ctx, working_dir, verbose, request_timeout):
7577
commodore.add_command(component_group)
7678
commodore.add_command(inventory_group)
7779
commodore.add_command(package_group)
80+
commodore.add_command(tool_group)
7881
commodore.add_command(commodore_login)
7982
commodore.add_command(commodore_fetch_token)
8083
commodore.add_command(commodore_version)
@@ -83,6 +86,7 @@ def commodore(ctx, working_dir, verbose, request_timeout):
8386
def main():
8487
multiprocessing.set_start_method("spawn")
8588
Reclass.set_thread_count(0)
89+
tools.setup_path()
8690

8791
load_dotenv(dotenv_path=find_dotenv(usecwd=True))
8892
commodore.main(

commodore/cli/tool.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
from typing import Optional
2+
3+
import click
4+
5+
import commodore.cli.options as options
6+
7+
from commodore import tools
8+
from commodore.config import Config
9+
10+
11+
@click.group(
12+
name="tool",
13+
short_help="Manage required external tools",
14+
)
15+
@options.verbosity
16+
@options.pass_config
17+
@options.github_token
18+
def tool_group(config: Config, verbose: int, github_token: str):
19+
config.update_verbosity(verbose)
20+
config.managed_tools = tools.load_state()
21+
config.github_token = github_token
22+
23+
24+
@tool_group.command(name="list", short_help="List external tools")
25+
@options.verbosity
26+
@options.pass_config
27+
@options.github_token
28+
@click.option(
29+
"--version-check/--skip-version-check",
30+
" / -V",
31+
default=True,
32+
help="Query GitHub API to get latest version",
33+
)
34+
def tool_list(config: Config, verbose: int, github_token: str, version_check: bool):
35+
config.update_verbosity(verbose)
36+
config.github_token = github_token
37+
tools.list_tools(config, version_check)
38+
39+
40+
@tool_group.command(name="install", short_help="Install external tools")
41+
@options.verbosity
42+
@options.pass_config
43+
@options.github_token
44+
@click.option(
45+
"--version",
46+
default=None,
47+
metavar="VERSION",
48+
help="A custom version to install for the requested tool (by default the latest version is installed)",
49+
)
50+
@click.argument("tool")
51+
def tool_install(
52+
config: Config, verbose: int, tool: str, version: Optional[str], github_token: str
53+
):
54+
config.update_verbosity(verbose)
55+
config.github_token = github_token
56+
tools.install_tool(config, tool, version)
57+
58+
59+
@tool_group.command(name="upgrade", short_help="Upgrade external tools")
60+
@options.verbosity
61+
@options.github_token
62+
@options.pass_config
63+
@click.option(
64+
"--version",
65+
default=None,
66+
metavar="VERSION",
67+
help="A custom version to install for the requested tool (by default the latest version is installed)",
68+
)
69+
@click.argument("tool")
70+
def tool_upgrade(
71+
config: Config, verbose: int, tool: str, version: Optional[str], github_token: str
72+
):
73+
config.update_verbosity(verbose)
74+
config.github_token = github_token
75+
tools.upgrade_tool(config, tool, version)

commodore/config.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class Config:
101101
_dynamic_facts: dict[str, Any]
102102
_github_token: Optional[str]
103103
_request_timeout: int
104+
_managed_tools: dict[str, str]
104105

105106
oidc_client: Optional[str]
106107
oidc_discovery_url: Optional[str]
@@ -141,6 +142,7 @@ def __init__(
141142
self._dynamic_facts = {}
142143
self._github_token = None
143144
self._request_timeout = 5
145+
self._managed_tools = {}
144146

145147
@property
146148
def verbose(self):
@@ -316,6 +318,14 @@ def request_timeout(self) -> int:
316318
def request_timeout(self, timeout: int):
317319
self._request_timeout = timeout
318320

321+
@property
322+
def managed_tools(self) -> dict[str, str]:
323+
return self._managed_tools
324+
325+
@managed_tools.setter
326+
def managed_tools(self, managed_tools: dict[str, str]):
327+
self._managed_tools = managed_tools
328+
319329
@property
320330
def inventory(self):
321331
return self._inventory

0 commit comments

Comments
 (0)