sima-cli 2.1.14__tar.gz → 2.1.15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sima_cli-2.1.14/sima_cli.egg-info → sima_cli-2.1.15}/PKG-INFO +1 -1
- {sima_cli-2.1.14 → sima_cli-2.1.15}/pyproject.toml +1 -1
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/__version__.py +1 -1
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/commands.py +18 -3
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/install.py +6 -1
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/utils.py +39 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15/sima_cli.egg-info}/PKG-INFO +1 -1
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_sdk_image_detection.py +56 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/LICENSE +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/MANIFEST.in +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/README.md +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/requirements.txt +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/setup.cfg +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/setup.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/__main__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/app_zoo/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/app_zoo/app.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/app_zoo/commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/auth/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/auth/auth0.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/auth/devportal.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/auth/login.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/cli.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/data/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/data/resources_internal.yaml +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/data/resources_public.yaml +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/deploy_only/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/deploy_only/device/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/deploy_only/device/commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/deploy_only/mpk/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/deploy_only/mpk/commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/discover/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/discover/discover.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/discover/linuxll.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/download/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/download/downloader.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/compatibility.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/github_assets.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/hostdriver.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/metadata_info.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/metadata_installer.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/metadata_validator.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/optiview.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/package_builder.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/palette.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/install/registry.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/mla/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/mla/meminfo.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/model_zoo/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/model_zoo/model.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/network/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/network/network.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/playbooks/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/playbooks/commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/playbooks/manager.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/cmdexec.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/config.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/linux_devkit_network.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/linux_shared_network.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/neat.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/network_doctor.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/preinstall.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/requirements.json +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/script.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/stop.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/sdk/uninstall.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/serial/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/serial/serial.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/storage/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/storage/nvme.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/storage/sdcard.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/bmaptool.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/bootimg.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/cleanlog.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/elxr.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/local.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/netboot.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/query.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/remote.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/update/updater.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/upgrade/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/upgrade/selfupdate.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/api_common.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/artifactory.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/common.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/config.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/config_loader.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/container_registries.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/deprecation.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/device_api.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/disk.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/docker.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/env.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/errors.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/mpk_api.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/net.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/network.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/pcie.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/pkg_update_check.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/serializers.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/services.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/utils/tag.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/vulcan/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/vulcan/artifacts.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli/vulcan/commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli.egg-info/SOURCES.txt +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli.egg-info/dependency_links.txt +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli.egg-info/entry_points.txt +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli.egg-info/requires.txt +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/sima_cli.egg-info/top_level.txt +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/e2e/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/__init__.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_app_zoo.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_appzoo_commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_auth.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_auth0.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_cli.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_cli_stdio.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_cli_update.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_cli_update_rerun.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_deprecation.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_docker_utils.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_download.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_elxr_update.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_firmware.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_generate_cli_markdown_docs.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_install_stub.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_metadata_installer.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_metadata_validator.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_model_zoo.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_netboot.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_package_builder.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_pkg_update_check.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_sdk_linux_shared_network.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_sdk_network_doctor.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_sdk_preinstall.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_sdk_uninstall.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_selfupdate.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_skills_commands.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_skills_manager.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_utils.py +0 -0
- {sima_cli-2.1.14 → sima_cli-2.1.15}/tests/unit/test_vulcan.py +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# sima_cli/__version__.py
|
|
2
|
-
__version__ = "2.1.
|
|
2
|
+
__version__ = "2.1.15"
|
|
@@ -304,8 +304,15 @@ def launch_sdk_tool(tool: str, cmd, ctx, recover_unavailable: bool = False):
|
|
|
304
304
|
is_flag=True,
|
|
305
305
|
help="Allow setup to install a persistent NetworkManager shared-network repair profile without prompting.",
|
|
306
306
|
)
|
|
307
|
+
@click.option(
|
|
308
|
+
"--image",
|
|
309
|
+
"image_selectors",
|
|
310
|
+
multiple=True,
|
|
311
|
+
default=(),
|
|
312
|
+
help="Start only the SDK image matching this repository:tag or tag (e.g. 'ghcr.io/sima-neat/sdk:latest' or 'latest'). Repeatable; skips the selection prompt.",
|
|
313
|
+
)
|
|
307
314
|
@click.pass_context
|
|
308
|
-
def setup(ctx, yes, noninteractive, devkit, no_insight, no_model_sdk, minimal, workspace, persistent_network_profile):
|
|
315
|
+
def setup(ctx, yes, noninteractive, devkit, no_insight, no_model_sdk, minimal, workspace, persistent_network_profile, image_selectors):
|
|
309
316
|
"""Initialize SDK environment and select components to start."""
|
|
310
317
|
devkit_ip = _resolve_devkit_ip(devkit)
|
|
311
318
|
try:
|
|
@@ -318,6 +325,7 @@ def setup(ctx, yes, noninteractive, devkit, no_insight, no_model_sdk, minimal, w
|
|
|
318
325
|
minimal=minimal,
|
|
319
326
|
workspace=workspace,
|
|
320
327
|
persistent_network_profile=persistent_network_profile,
|
|
328
|
+
image_selectors=image_selectors,
|
|
321
329
|
)
|
|
322
330
|
except subprocess.CalledProcessError as e:
|
|
323
331
|
raise click.ClickException(f"SDK setup failed while running: {' '.join(e.cmd)}") from e
|
|
@@ -335,11 +343,18 @@ def setup(ctx, yes, noninteractive, devkit, no_insight, no_model_sdk, minimal, w
|
|
|
335
343
|
is_flag=True,
|
|
336
344
|
help="Skip confirmation before starting the container."
|
|
337
345
|
)
|
|
346
|
+
@click.option(
|
|
347
|
+
"--image",
|
|
348
|
+
"image_selectors",
|
|
349
|
+
multiple=True,
|
|
350
|
+
default=(),
|
|
351
|
+
help="Start only the SDK image matching this repository:tag or tag (e.g. 'ghcr.io/sima-neat/sdk:latest' or 'latest'). Repeatable; skips the selection prompt.",
|
|
352
|
+
)
|
|
338
353
|
@click.pass_context
|
|
339
|
-
def start(ctx, yes, noninteractive):
|
|
354
|
+
def start(ctx, yes, noninteractive, image_selectors):
|
|
340
355
|
"""Select and start one or more SDK containers."""
|
|
341
356
|
try:
|
|
342
|
-
setup_and_start(noninteractive=noninteractive,start_only=True, yes_to_all=yes)
|
|
357
|
+
setup_and_start(noninteractive=noninteractive, start_only=True, yes_to_all=yes, image_selectors=image_selectors)
|
|
343
358
|
except subprocess.CalledProcessError as e:
|
|
344
359
|
raise click.ClickException(f"SDK start failed while running: {' '.join(e.cmd)}") from e
|
|
345
360
|
except RuntimeError as e:
|
|
@@ -37,6 +37,7 @@ from sima_cli.sdk.utils import (
|
|
|
37
37
|
get_workspace,
|
|
38
38
|
get_local_sima_images,
|
|
39
39
|
prompt_image_selection,
|
|
40
|
+
filter_images_by_selector,
|
|
40
41
|
confirm_to_remove_exiting_container,
|
|
41
42
|
sanitize_container_name,
|
|
42
43
|
ensure_simasdkbridge_network,
|
|
@@ -1039,6 +1040,7 @@ def setup_and_start(
|
|
|
1039
1040
|
minimal: bool = False,
|
|
1040
1041
|
workspace: Optional[str] = None,
|
|
1041
1042
|
persistent_network_profile: bool = False,
|
|
1043
|
+
image_selectors=(),
|
|
1042
1044
|
):
|
|
1043
1045
|
"""Main entry for SDK setup and container start."""
|
|
1044
1046
|
|
|
@@ -1050,7 +1052,10 @@ def setup_and_start(
|
|
|
1050
1052
|
syscheck(force_install=yes_to_all, noninteractive=noninteractive)
|
|
1051
1053
|
|
|
1052
1054
|
images = get_local_sima_images()
|
|
1053
|
-
|
|
1055
|
+
if image_selectors:
|
|
1056
|
+
selected_images = filter_images_by_selector(images, image_selectors)
|
|
1057
|
+
else:
|
|
1058
|
+
selected_images = prompt_image_selection(images, noninteractive)
|
|
1054
1059
|
|
|
1055
1060
|
if not start_only:
|
|
1056
1061
|
_reject_if_windows_native_neat_sdk(selected_images, console)
|
|
@@ -2557,6 +2557,45 @@ def prompt_image_selection(images, noninteractive=False):
|
|
|
2557
2557
|
|
|
2558
2558
|
return [s for s in selected if s not in {"__all__", "__cancel__"}]
|
|
2559
2559
|
|
|
2560
|
+
|
|
2561
|
+
def _match_image_selector(images, selector):
|
|
2562
|
+
"""Match one selector against local images: exact ref, then tag, then substring."""
|
|
2563
|
+
exact = [img for img in images if img == selector]
|
|
2564
|
+
if exact:
|
|
2565
|
+
return exact
|
|
2566
|
+
by_tag = [img for img in images if img.rsplit(":", 1)[-1] == selector]
|
|
2567
|
+
if by_tag:
|
|
2568
|
+
return by_tag
|
|
2569
|
+
return [img for img in images if selector in img]
|
|
2570
|
+
|
|
2571
|
+
|
|
2572
|
+
def filter_images_by_selector(images, selectors):
|
|
2573
|
+
"""Resolve explicit --image selectors to local SDK images without prompting."""
|
|
2574
|
+
if not images:
|
|
2575
|
+
console.print("[red]❌ No SiMa.ai SDK images found locally.[/red]")
|
|
2576
|
+
sys.exit(1)
|
|
2577
|
+
|
|
2578
|
+
selected = []
|
|
2579
|
+
for selector in selectors:
|
|
2580
|
+
matches = _match_image_selector(images, selector)
|
|
2581
|
+
if not matches:
|
|
2582
|
+
available = "\n".join(f" • {img}" for img in images)
|
|
2583
|
+
console.print(
|
|
2584
|
+
f"[red]❌ No local SDK image matches '--image {selector}'.[/red]\n"
|
|
2585
|
+
f"[dim]Available SDK images:[/dim]\n{available}"
|
|
2586
|
+
)
|
|
2587
|
+
sys.exit(1)
|
|
2588
|
+
selected.extend(matches)
|
|
2589
|
+
|
|
2590
|
+
result = []
|
|
2591
|
+
for img in selected:
|
|
2592
|
+
if img not in result:
|
|
2593
|
+
result.append(img)
|
|
2594
|
+
|
|
2595
|
+
console.print(f"[dim]Explicit image selection: starting {', '.join(result)}.[/dim]")
|
|
2596
|
+
return result
|
|
2597
|
+
|
|
2598
|
+
|
|
2560
2599
|
def confirm_to_remove_exiting_container(image, yes_to_all=False):
|
|
2561
2600
|
"""Start a container for the given SDK image."""
|
|
2562
2601
|
container_name = image.split("/")[-1].replace(":", "_")
|
|
@@ -2288,6 +2288,62 @@ table ip6 nm-shared-enx6c1ff720d573 {
|
|
|
2288
2288
|
self.assertTrue(start_container.call_args.kwargs["minimal"])
|
|
2289
2289
|
self.assertTrue(start_container.call_args.kwargs["no_insight"])
|
|
2290
2290
|
|
|
2291
|
+
def test_filter_images_by_selector_matches_ref_tag_and_substring(self):
|
|
2292
|
+
from sima_cli.sdk.utils import filter_images_by_selector
|
|
2293
|
+
images = ["ghcr.io/sima-neat/sdk:latest", "ghcr.io/sima-neat/sdk:v2.1.2"]
|
|
2294
|
+
self.assertEqual(
|
|
2295
|
+
filter_images_by_selector(images, ("ghcr.io/sima-neat/sdk:latest",)),
|
|
2296
|
+
["ghcr.io/sima-neat/sdk:latest"],
|
|
2297
|
+
)
|
|
2298
|
+
self.assertEqual(
|
|
2299
|
+
filter_images_by_selector(images, ("v2.1.2",)),
|
|
2300
|
+
["ghcr.io/sima-neat/sdk:v2.1.2"],
|
|
2301
|
+
)
|
|
2302
|
+
self.assertEqual(
|
|
2303
|
+
filter_images_by_selector(images, ("latest",)),
|
|
2304
|
+
["ghcr.io/sima-neat/sdk:latest"],
|
|
2305
|
+
)
|
|
2306
|
+
|
|
2307
|
+
def test_filter_images_by_selector_exits_on_no_match(self):
|
|
2308
|
+
from sima_cli.sdk.utils import filter_images_by_selector
|
|
2309
|
+
with self.assertRaises(SystemExit):
|
|
2310
|
+
filter_images_by_selector(["ghcr.io/sima-neat/sdk:latest"], ("nope",))
|
|
2311
|
+
|
|
2312
|
+
def test_setup_image_selector_bypasses_prompt_and_starts_only_that_image(self):
|
|
2313
|
+
images = ["ghcr.io/sima-neat/sdk:latest", "ghcr.io/sima-neat/sdk:v2.1.2"]
|
|
2314
|
+
with patch("sima_cli.sdk.install.ensure_simasdkbridge_network"), \
|
|
2315
|
+
patch("sima_cli.sdk.install.syscheck"), \
|
|
2316
|
+
patch("sima_cli.sdk.install.get_local_sima_images", return_value=images), \
|
|
2317
|
+
patch("sima_cli.sdk.install.prompt_image_selection") as prompt, \
|
|
2318
|
+
patch("sima_cli.sdk.install.ensure_colima_resources_for_neat_sdk"), \
|
|
2319
|
+
patch("sima_cli.sdk.install.get_container_status", return_value={}), \
|
|
2320
|
+
patch("sima_cli.sdk.install.get_workspace", return_value="/tmp/workspace"), \
|
|
2321
|
+
patch("sima_cli.sdk.install._setup_devkit_share", return_value=None), \
|
|
2322
|
+
patch("sima_cli.sdk.install.confirm_to_remove_exiting_container", return_value=None), \
|
|
2323
|
+
patch("sima_cli.sdk.install.start_docker_container") as start_container:
|
|
2324
|
+
setup_and_start(
|
|
2325
|
+
no_model_sdk=True,
|
|
2326
|
+
yes_to_all=True,
|
|
2327
|
+
noninteractive=True,
|
|
2328
|
+
image_selectors=("ghcr.io/sima-neat/sdk:latest",),
|
|
2329
|
+
)
|
|
2330
|
+
|
|
2331
|
+
prompt.assert_not_called()
|
|
2332
|
+
start_container.assert_called_once()
|
|
2333
|
+
self.assertEqual(start_container.call_args.kwargs["image"], "ghcr.io/sima-neat/sdk:latest")
|
|
2334
|
+
|
|
2335
|
+
def test_sdk_setup_image_option_is_forwarded(self):
|
|
2336
|
+
runner = CliRunner()
|
|
2337
|
+
with patch("sima_cli.sdk.commands.check_and_start_docker"), \
|
|
2338
|
+
patch("sima_cli.sdk.commands.setup_and_start") as setup_start:
|
|
2339
|
+
result = runner.invoke(sdk, ["setup", "--image", "ghcr.io/sima-neat/sdk:latest", "-y", "-n"])
|
|
2340
|
+
|
|
2341
|
+
self.assertEqual(result.exit_code, 0, result.output)
|
|
2342
|
+
self.assertEqual(
|
|
2343
|
+
setup_start.call_args.kwargs["image_selectors"],
|
|
2344
|
+
("ghcr.io/sima-neat/sdk:latest",),
|
|
2345
|
+
)
|
|
2346
|
+
|
|
2291
2347
|
def test_setup_warns_for_snap_docker_with_neat_sdk(self):
|
|
2292
2348
|
image = "ghcr.io/sima-neat/sdk:latest"
|
|
2293
2349
|
with patch("sima_cli.sdk.install.ensure_simasdkbridge_network"), \
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|