sima-cli 2.1.17__tar.gz → 2.1.19__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.17/sima_cli.egg-info → sima_cli-2.1.19}/PKG-INFO +35 -2
- {sima_cli-2.1.17 → sima_cli-2.1.19}/README.md +32 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/pyproject.toml +3 -2
- {sima_cli-2.1.17 → sima_cli-2.1.19}/requirements.txt +2 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19}/setup.py +2 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/__version__.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/cli.py +157 -24
- sima_cli-2.1.19/sima_cli/cloudex/__init__.py +5 -0
- sima_cli-2.1.19/sima_cli/cloudex/client.py +880 -0
- sima_cli-2.1.19/sima_cli/cloudex/commands.py +422 -0
- sima_cli-2.1.19/sima_cli/cloudex/installer.py +196 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/deploy_only/device/commands.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/discover/discover.py +91 -9
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/download/downloader.py +90 -33
- sima_cli-2.1.19/sima_cli/download/parallel.py +164 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/metadata_installer.py +5 -2
- sima_cli-2.1.19/sima_cli/mla/meminfo.py +274 -0
- sima_cli-2.1.19/sima_cli/models/client.py +891 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/models/commands.py +127 -18
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/models/rendering.py +213 -32
- sima_cli-2.1.19/sima_cli/network/network.py +636 -0
- sima_cli-2.1.19/sima_cli/peripherals/__init__.py +5 -0
- sima_cli-2.1.19/sima_cli/peripherals/commands.py +208 -0
- sima_cli-2.1.19/sima_cli/peripherals/model.py +426 -0
- sima_cli-2.1.19/sima_cli/peripherals/sentinel.py +145 -0
- sima_cli-2.1.19/sima_cli/sdk/browser_ca.py +53 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/commands.py +85 -5
- sima_cli-2.1.19/sima_cli/sdk/container_registry.py +385 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/install.py +136 -17
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/neat.py +130 -21
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/network_doctor.py +141 -17
- sima_cli-2.1.19/sima_cli/sdk/preinstall.py +1759 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/utils.py +453 -64
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/vscode_extensions.py +15 -13
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/ab_state.py +32 -12
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/emmc.py +34 -2
- sima_cli-2.1.19/sima_cli/update/host.py +231 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/netboot.py +749 -41
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/netboot_artifacts.py +103 -14
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/netboot_device.py +128 -17
- sima_cli-2.1.19/sima_cli/update/overlay.py +348 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/rootfs.py +5 -11
- sima_cli-2.1.19/sima_cli/update/swap.py +81 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/swu.py +259 -14
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/swu_artifacts.py +5 -5
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/uboot_environment.py +62 -24
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/updater.py +71 -16
- sima_cli-2.1.19/sima_cli/utils/streaming.py +84 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/vulcan/artifacts.py +31 -18
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/vulcan/commands.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19/sima_cli.egg-info}/PKG-INFO +35 -2
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli.egg-info/SOURCES.txt +41 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli.egg-info/requires.txt +6 -1
- sima_cli-2.1.19/tests/unit/peripherals_fixtures.py +131 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_ab_overlay.py +7 -8
- sima_cli-2.1.19/tests/unit/test_artifact_parallel_integration.py +174 -0
- sima_cli-2.1.19/tests/unit/test_cli_update.py +150 -0
- sima_cli-2.1.19/tests/unit/test_cloudex_client.py +647 -0
- sima_cli-2.1.19/tests/unit/test_cloudex_commands.py +370 -0
- sima_cli-2.1.19/tests/unit/test_cloudex_installer.py +185 -0
- sima_cli-2.1.19/tests/unit/test_code_ui_readiness.py +81 -0
- sima_cli-2.1.19/tests/unit/test_device_discovery_cloudex.py +113 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_download.py +1 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_emmc.py +87 -3
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_generate_cli_markdown_docs.py +10 -8
- sima_cli-2.1.19/tests/unit/test_host_update.py +254 -0
- sima_cli-2.1.19/tests/unit/test_install_force.py +39 -0
- sima_cli-2.1.19/tests/unit/test_localized_docs_links.py +23 -0
- sima_cli-2.1.19/tests/unit/test_mla_meminfo.py +159 -0
- sima_cli-2.1.19/tests/unit/test_model_deployments.py +794 -0
- sima_cli-2.1.19/tests/unit/test_models.py +1248 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_netboot.py +6 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_netboot_autoflash.py +36 -4
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_netboot_device.py +247 -19
- sima_cli-2.1.19/tests/unit/test_netboot_images.py +344 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_netboot_mirror.py +11 -6
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_netboot_trootctl.py +5 -1
- sima_cli-2.1.19/tests/unit/test_network_custom_static.py +271 -0
- sima_cli-2.1.19/tests/unit/test_network_safety.py +152 -0
- sima_cli-2.1.19/tests/unit/test_overlay.py +309 -0
- sima_cli-2.1.19/tests/unit/test_parallel_downloads.py +131 -0
- sima_cli-2.1.19/tests/unit/test_peripherals_commands.py +293 -0
- sima_cli-2.1.19/tests/unit/test_peripherals_contract.py +96 -0
- sima_cli-2.1.19/tests/unit/test_peripherals_model.py +219 -0
- sima_cli-2.1.19/tests/unit/test_peripherals_sentinel.py +127 -0
- sima_cli-2.1.19/tests/unit/test_sdk_browser_ca.py +119 -0
- sima_cli-2.1.19/tests/unit/test_sdk_container_registry.py +544 -0
- sima_cli-2.1.19/tests/unit/test_sdk_host_key_trust.py +128 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_sdk_image_detection.py +547 -16
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_sdk_model_compiler.py +1 -1
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_sdk_network_doctor.py +181 -1
- sima_cli-2.1.19/tests/unit/test_sdk_preinstall.py +1325 -0
- sima_cli-2.1.19/tests/unit/test_slot_swap.py +145 -0
- sima_cli-2.1.19/tests/unit/test_streaming_downloads.py +296 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_swu.py +413 -35
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_swu_mirror.py +21 -2
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_uboot_environment.py +72 -2
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_update_staging.py +11 -4
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_vscode_extension_pins.py +81 -25
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_vulcan.py +3 -0
- sima_cli-2.1.17/sima_cli/mla/meminfo.py +0 -47
- sima_cli-2.1.17/sima_cli/models/client.py +0 -372
- sima_cli-2.1.17/sima_cli/network/network.py +0 -307
- sima_cli-2.1.17/sima_cli/sdk/preinstall.py +0 -597
- sima_cli-2.1.17/tests/unit/test_cli_update.py +0 -76
- sima_cli-2.1.17/tests/unit/test_models.py +0 -632
- sima_cli-2.1.17/tests/unit/test_sdk_preinstall.py +0 -286
- {sima_cli-2.1.17 → sima_cli-2.1.19}/LICENSE +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/MANIFEST.in +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/setup.cfg +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/__main__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/app_zoo/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/app_zoo/app.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/app_zoo/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/auth/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/auth/auth0.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/auth/devportal.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/auth/login.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/data/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/data/resources_internal.yaml +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/data/resources_public.yaml +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/deploy_only/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/deploy_only/device/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/deploy_only/mpk/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/deploy_only/mpk/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/discover/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/discover/linuxll.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/download/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/compatibility.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/github_assets.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/hostdriver.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/metadata_info.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/metadata_validator.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/optiview.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/package_builder.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/palette.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/install/registry.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/mla/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/model_zoo/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/model_zoo/model.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/models/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/network/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/playbooks/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/playbooks/commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/playbooks/manager.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/cmdexec.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/config.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/docker_staging.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/linux_devkit_network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/linux_shared_network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/model_compiler.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/requirements.json +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/script.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/stop.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/sdk/uninstall.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/serial/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/serial/serial.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/storage/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/storage/nvme.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/storage/sdcard.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/bmaptool.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/bootimg.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/cleanlog.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/elxr.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/fast_upload.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/local.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/query.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/remote.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/staging.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/swu_certificate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/update/swu_target.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/upgrade/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/upgrade/selfupdate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/api_common.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/artifactory.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/common.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/config.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/config_loader.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/container_registries.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/deprecation.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/device_api.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/disk.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/docker.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/env.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/errors.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/mpk_api.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/net.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/pcie.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/pkg_update_check.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/serializers.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/services.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/utils/tag.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli/vulcan/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli.egg-info/dependency_links.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli.egg-info/entry_points.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/sima_cli.egg-info/top_level.txt +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/e2e/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/__init__.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_app_zoo.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_appzoo_commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_auth.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_auth0.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_bootimg_defaults.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_bootimg_recovery.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_cli.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_cli_stdio.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_cli_update_rerun.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_container_registries.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_deprecation.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_docker_utils.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_elxr_update.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_fast_upload.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_firmware.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_firmware_creation_order.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_firmware_layout.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_firmware_selector.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_install_stub.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_metadata_installer.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_metadata_validator.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_model_zoo.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_modelzoo_commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_netboot_ip_recovery.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_package_builder.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_palette_image_discovery.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_pcie.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_pkg_update_check.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_sdk_linux_shared_network.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_sdk_uninstall.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_selfupdate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_skills_commands.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_skills_manager.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_swu_certificate.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_swu_errors.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_swu_target.py +0 -0
- {sima_cli-2.1.17 → sima_cli-2.1.19}/tests/unit/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sima-cli
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.19
|
|
4
4
|
Summary: CLI tool for SiMa Developer Portal to download models, firmware, and apps.
|
|
5
5
|
Home-page: https://community.sima.ai/
|
|
6
6
|
Author: SiMa.ai
|
|
@@ -27,7 +27,8 @@ Requires-Dist: rich==14.0.0
|
|
|
27
27
|
Requires-Dist: InquirerPy==0.3.4
|
|
28
28
|
Requires-Dist: tftpy==0.8.6
|
|
29
29
|
Requires-Dist: psutil==7.0.0
|
|
30
|
-
Requires-Dist: huggingface-hub<
|
|
30
|
+
Requires-Dist: huggingface-hub<3.0,>=2.2.0; python_version >= "3.10"
|
|
31
|
+
Requires-Dist: huggingface-hub<2.0,>=0.34.0; python_version < "3.10"
|
|
31
32
|
Requires-Dist: tabulate==0.9.0
|
|
32
33
|
Dynamic: author
|
|
33
34
|
Dynamic: license-file
|
|
@@ -148,6 +149,20 @@ sima-cli --internal login
|
|
|
148
149
|
SIMA_CLI_INTERNAL=1 sima-cli install -v 2.1.2 tools/model-compiler/amd64
|
|
149
150
|
```
|
|
150
151
|
|
|
152
|
+
Full-system SWU updates prefer RAM-backed `/tmp` when available memory can
|
|
153
|
+
hold both the bundle and its extraction, plus a reserve of at least 512 MiB
|
|
154
|
+
or 10% of total RAM (whichever is larger). Otherwise they stage in `/data`,
|
|
155
|
+
with NVMe as a further fallback if `/data` lacks space. RAM staging is temporary;
|
|
156
|
+
interrupted updates retained there do not survive a reboot.
|
|
157
|
+
|
|
158
|
+
Public-mirror downloads, `models download`, and `neat artifacts` split files
|
|
159
|
+
of at least 64 MiB into four byte ranges when supported by the server. Models
|
|
160
|
+
and Neat artifacts share a limit of four active download connections across
|
|
161
|
+
files and ranges, including single-connection fallbacks. Ranges must match the
|
|
162
|
+
expected size and an object validator or the expected SHA-256 before the file is published. Models retain signed-URL refresh and
|
|
163
|
+
cancellation handling. Existing public-mirror partial downloads continue
|
|
164
|
+
sequentially; servers without range support use a single connection.
|
|
165
|
+
|
|
151
166
|
## Common Workflows
|
|
152
167
|
|
|
153
168
|
Set up SDK containers:
|
|
@@ -157,6 +172,14 @@ sima-cli sdk setup
|
|
|
157
172
|
sima-cli sdk neat
|
|
158
173
|
```
|
|
159
174
|
|
|
175
|
+
When pairing with `sdk setup --devkit`, a new DevKit host key is automatically
|
|
176
|
+
recorded in the SDK user's `~/.ssh/known_hosts`, including during unattended
|
|
177
|
+
setup or after SDK container recreation. Subsequent pairing preserves saved
|
|
178
|
+
keys and rejects a changed key at the same address and SSH port. After a device
|
|
179
|
+
reimage or key rotation, verify the replacement fingerprint before explicitly
|
|
180
|
+
updating that entry. For environments requiring verified trust before the first
|
|
181
|
+
connection, provision verified host keys in the SDK user's `known_hosts`.
|
|
182
|
+
|
|
160
183
|
Install Model Compiler from package metadata:
|
|
161
184
|
|
|
162
185
|
```bash
|
|
@@ -238,3 +261,13 @@ For command-specific prerequisites, see the generated [command reference](docs/s
|
|
|
238
261
|
## Support
|
|
239
262
|
|
|
240
263
|
For issues and feature requests, use the sima-cli GitHub repository or contact the SiMa.ai development team.
|
|
264
|
+
|
|
265
|
+
### Remote browser certificate help
|
|
266
|
+
|
|
267
|
+
SDK setup stages a verified public mkcert CA certificate alongside the SDK HTTPS
|
|
268
|
+
certificate. SDK images with browser certificate help can offer that file for
|
|
269
|
+
download on the sign-in page, with instructions for the browser computer.
|
|
270
|
+
Only the public certificate is staged; the mkcert private key stays on the host.
|
|
271
|
+
If the issuing CA cannot be verified, including a plain self-signed fallback,
|
|
272
|
+
no CA download is published. Re-running setup refreshes the staged file even
|
|
273
|
+
when the existing HTTPS certificate does not need to be reissued.
|
|
@@ -113,6 +113,20 @@ sima-cli --internal login
|
|
|
113
113
|
SIMA_CLI_INTERNAL=1 sima-cli install -v 2.1.2 tools/model-compiler/amd64
|
|
114
114
|
```
|
|
115
115
|
|
|
116
|
+
Full-system SWU updates prefer RAM-backed `/tmp` when available memory can
|
|
117
|
+
hold both the bundle and its extraction, plus a reserve of at least 512 MiB
|
|
118
|
+
or 10% of total RAM (whichever is larger). Otherwise they stage in `/data`,
|
|
119
|
+
with NVMe as a further fallback if `/data` lacks space. RAM staging is temporary;
|
|
120
|
+
interrupted updates retained there do not survive a reboot.
|
|
121
|
+
|
|
122
|
+
Public-mirror downloads, `models download`, and `neat artifacts` split files
|
|
123
|
+
of at least 64 MiB into four byte ranges when supported by the server. Models
|
|
124
|
+
and Neat artifacts share a limit of four active download connections across
|
|
125
|
+
files and ranges, including single-connection fallbacks. Ranges must match the
|
|
126
|
+
expected size and an object validator or the expected SHA-256 before the file is published. Models retain signed-URL refresh and
|
|
127
|
+
cancellation handling. Existing public-mirror partial downloads continue
|
|
128
|
+
sequentially; servers without range support use a single connection.
|
|
129
|
+
|
|
116
130
|
## Common Workflows
|
|
117
131
|
|
|
118
132
|
Set up SDK containers:
|
|
@@ -122,6 +136,14 @@ sima-cli sdk setup
|
|
|
122
136
|
sima-cli sdk neat
|
|
123
137
|
```
|
|
124
138
|
|
|
139
|
+
When pairing with `sdk setup --devkit`, a new DevKit host key is automatically
|
|
140
|
+
recorded in the SDK user's `~/.ssh/known_hosts`, including during unattended
|
|
141
|
+
setup or after SDK container recreation. Subsequent pairing preserves saved
|
|
142
|
+
keys and rejects a changed key at the same address and SSH port. After a device
|
|
143
|
+
reimage or key rotation, verify the replacement fingerprint before explicitly
|
|
144
|
+
updating that entry. For environments requiring verified trust before the first
|
|
145
|
+
connection, provision verified host keys in the SDK user's `known_hosts`.
|
|
146
|
+
|
|
125
147
|
Install Model Compiler from package metadata:
|
|
126
148
|
|
|
127
149
|
```bash
|
|
@@ -203,3 +225,13 @@ For command-specific prerequisites, see the generated [command reference](docs/s
|
|
|
203
225
|
## Support
|
|
204
226
|
|
|
205
227
|
For issues and feature requests, use the sima-cli GitHub repository or contact the SiMa.ai development team.
|
|
228
|
+
|
|
229
|
+
### Remote browser certificate help
|
|
230
|
+
|
|
231
|
+
SDK setup stages a verified public mkcert CA certificate alongside the SDK HTTPS
|
|
232
|
+
certificate. SDK images with browser certificate help can offer that file for
|
|
233
|
+
download on the sign-in page, with instructions for the browser computer.
|
|
234
|
+
Only the public certificate is staged; the mkcert private key stays on the host.
|
|
235
|
+
If the issuing CA cannot be verified, including a plain self-signed fallback,
|
|
236
|
+
no CA download is published. Re-running setup refreshes the staged file even
|
|
237
|
+
when the existing HTTPS certificate does not need to be reissued.
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sima-cli"
|
|
7
|
-
version = "2.1.
|
|
7
|
+
version = "2.1.19"
|
|
8
8
|
description = "CLI tool for SiMa Developer Portal to download models, firmware, and apps."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
|
@@ -33,7 +33,8 @@ dependencies = [
|
|
|
33
33
|
"InquirerPy==0.3.4",
|
|
34
34
|
"tftpy==0.8.6",
|
|
35
35
|
"psutil==7.0.0",
|
|
36
|
-
"huggingface-hub>=
|
|
36
|
+
"huggingface-hub>=2.2.0,<3.0; python_version >= '3.10'",
|
|
37
|
+
"huggingface-hub>=0.34.0,<2.0; python_version < '3.10'",
|
|
37
38
|
"tabulate==0.9.0"
|
|
38
39
|
]
|
|
39
40
|
|
|
@@ -23,7 +23,8 @@ setup(
|
|
|
23
23
|
"InquirerPy>=0.3.4,<0.4",
|
|
24
24
|
"tftpy>=0.8.6,<0.9",
|
|
25
25
|
"psutil>=7.0.0,<8.0",
|
|
26
|
-
"huggingface-hub>=
|
|
26
|
+
"huggingface-hub>=2.2.0,<3.0; python_version >= '3.10'",
|
|
27
|
+
"huggingface-hub>=0.34.0,<2.0; python_version < '3.10'",
|
|
27
28
|
"rich>=13.7,<14.0"
|
|
28
29
|
],
|
|
29
30
|
entry_points={
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# sima_cli/__version__.py
|
|
2
|
-
__version__ = "2.1.
|
|
2
|
+
__version__ = "2.1.19"
|
|
@@ -2,17 +2,19 @@ import os
|
|
|
2
2
|
import shutil
|
|
3
3
|
import sys
|
|
4
4
|
from contextlib import nullcontext, redirect_stdout
|
|
5
|
+
from pathlib import Path
|
|
5
6
|
import click
|
|
6
7
|
from rich.console import Console
|
|
7
8
|
from rich.panel import Panel
|
|
8
9
|
from rich.text import Text
|
|
9
10
|
from sima_cli.utils.env import get_environment_type
|
|
10
11
|
from sima_cli.update.updater import perform_update
|
|
12
|
+
from sima_cli.update.host import install_host_package
|
|
11
13
|
from sima_cli.update.swu import handle_update
|
|
12
14
|
from sima_cli.model_zoo.model import list_models, download_model, describe_model
|
|
13
15
|
from sima_cli.app_zoo.app import list_apps, download_app, describe_app
|
|
14
16
|
from sima_cli.utils.config_loader import internal_resource_exists
|
|
15
|
-
from sima_cli.mla.meminfo import monitor_simaai_mem_chart
|
|
17
|
+
from sima_cli.mla.meminfo import MemoryTelemetryError, monitor_simaai_mem_chart
|
|
16
18
|
from sima_cli.__version__ import __version__
|
|
17
19
|
from sima_cli.utils.config import CONFIG_PATH
|
|
18
20
|
from sima_cli.install.optiview import install_optiview
|
|
@@ -40,6 +42,8 @@ from sima_cli.upgrade.selfupdate import register_selfupdate_command
|
|
|
40
42
|
from sima_cli.playbooks import register_playbook_commands
|
|
41
43
|
from sima_cli.vulcan import register_vulcan_commands
|
|
42
44
|
from sima_cli.models import register_models_commands
|
|
45
|
+
from sima_cli.peripherals import register_peripherals_commands
|
|
46
|
+
from sima_cli.cloudex import register_cloudex_commands
|
|
43
47
|
from sima_cli.vulcan.commands import (
|
|
44
48
|
ENV_METAVAR,
|
|
45
49
|
_environment_shortcut_options,
|
|
@@ -102,6 +106,13 @@ def _rerun_current_command() -> None:
|
|
|
102
106
|
os.execvpe(sys.executable, cmd, env)
|
|
103
107
|
|
|
104
108
|
|
|
109
|
+
# Command groups whose stdout is a machine-readable document: root diagnostics go to stderr for them.
|
|
110
|
+
QUIET_STDOUT_SUBCOMMANDS = ("models", "peripherals")
|
|
111
|
+
# Command groups that only read the DevKit they run on: no PyPI update check and no Artifactory
|
|
112
|
+
# gate before them, so they work offline and never prompt or exit early.
|
|
113
|
+
LOCAL_ONLY_SUBCOMMANDS = ("peripherals",)
|
|
114
|
+
|
|
115
|
+
|
|
105
116
|
def _initialize_main_context(ctx, internal, yes):
|
|
106
117
|
_configure_stdio_errors()
|
|
107
118
|
auto_accept_update = yes or _update_auto_confirm_requested(sys.argv)
|
|
@@ -109,7 +120,8 @@ def _initialize_main_context(ctx, internal, yes):
|
|
|
109
120
|
if auto_accept_update:
|
|
110
121
|
os.environ["SIMA_CLI_AUTO_ACCEPT_UPDATE"] = "1"
|
|
111
122
|
try:
|
|
112
|
-
if
|
|
123
|
+
if (ctx.invoked_subcommand not in LOCAL_ONLY_SUBCOMMANDS
|
|
124
|
+
and check_for_update('sima-cli') and _should_rerun_after_update(sys.argv)):
|
|
113
125
|
_rerun_current_command()
|
|
114
126
|
finally:
|
|
115
127
|
if auto_accept_update:
|
|
@@ -125,14 +137,15 @@ def _initialize_main_context(ctx, internal, yes):
|
|
|
125
137
|
if not internal:
|
|
126
138
|
internal = os.getenv("SIMA_CLI_INTERNAL", "0") in ("1", "true", "yes")
|
|
127
139
|
|
|
128
|
-
|
|
140
|
+
local_only = ctx.invoked_subcommand in LOCAL_ONLY_SUBCOMMANDS
|
|
141
|
+
defer_artifactory_access = local_only or ctx.invoked_subcommand == "update" or ctx.meta.get("daily_netboot", False)
|
|
129
142
|
if internal and not internal_resource_exists() and not defer_artifactory_access:
|
|
130
143
|
click.echo("❌ You have specified -i or --internal argument to access internal resources, but you do not have an internal resource map configured.")
|
|
131
144
|
click.echo("Refer to the confluence page to find out how to configure internal resource map.")
|
|
132
145
|
exit(0)
|
|
133
146
|
|
|
134
147
|
internal_reachable = True
|
|
135
|
-
if internal:
|
|
148
|
+
if internal and not local_only:
|
|
136
149
|
internal_reachable = check_artifactory_reachability()
|
|
137
150
|
|
|
138
151
|
if internal and not internal_reachable and not defer_artifactory_access and not _allows_external_prerelease_fallback(sys.argv):
|
|
@@ -167,7 +180,7 @@ class InspectionAwareGroup(click.Group):
|
|
|
167
180
|
_command_name_from_argv(['sima-cli'] + options) == 'bootimg'
|
|
168
181
|
and any(arg in ('--netboot', '-n', '--autoflash', '-a') for arg in options)
|
|
169
182
|
)
|
|
170
|
-
if _command_name_from_argv(['sima-cli'] + options) == 'update' and '--inspect' in options:
|
|
183
|
+
if _command_name_from_argv(['sima-cli'] + options) == 'update' and any(arg in ('--inspect', '--swap') for arg in options):
|
|
171
184
|
ctx.meta['update_inspect'] = True
|
|
172
185
|
return super().parse_args(ctx, args)
|
|
173
186
|
|
|
@@ -188,18 +201,18 @@ def main(ctx, internal, yes):
|
|
|
188
201
|
internal = internal or os.getenv("SIMA_CLI_INTERNAL", "0") in ("1", "true", "yes")
|
|
189
202
|
if internal:
|
|
190
203
|
Console(stderr=True).print(Panel(
|
|
191
|
-
"Pre-release software may be unstable. Use at your own risk.",
|
|
192
|
-
title="Pre-release software", border_style="yellow",
|
|
204
|
+
Text("Pre-release software may be unstable. Use at your own risk.", style="yellow"),
|
|
205
|
+
title="Pre-release software", border_style="yellow", width=72,
|
|
193
206
|
))
|
|
194
207
|
if ctx.meta.get('update_inspect'):
|
|
195
208
|
ctx.ensure_object(dict)
|
|
196
209
|
ctx.obj.update(internal=internal, yes=yes)
|
|
197
210
|
return
|
|
198
|
-
# Model Registry JSON must remain parseable on stdout. Route root-level
|
|
199
|
-
# update and environment diagnostics to stderr for
|
|
211
|
+
# Model Registry and peripherals JSON must remain parseable on stdout. Route root-level
|
|
212
|
+
# update and environment diagnostics to stderr for these command groups.
|
|
200
213
|
output_context = (
|
|
201
214
|
redirect_stdout(sys.stderr)
|
|
202
|
-
if ctx.invoked_subcommand
|
|
215
|
+
if ctx.invoked_subcommand in QUIET_STDOUT_SUBCOMMANDS
|
|
203
216
|
else nullcontext()
|
|
204
217
|
)
|
|
205
218
|
with output_context:
|
|
@@ -213,6 +226,8 @@ register_sdk_commands(main)
|
|
|
213
226
|
register_playbook_commands(main)
|
|
214
227
|
register_vulcan_commands(main)
|
|
215
228
|
register_models_commands(main)
|
|
229
|
+
register_peripherals_commands(main)
|
|
230
|
+
register_cloudex_commands(main)
|
|
216
231
|
|
|
217
232
|
|
|
218
233
|
# ----------------------
|
|
@@ -314,7 +329,7 @@ def download(ctx, url, dest):
|
|
|
314
329
|
@click.option(
|
|
315
330
|
"-y", "--yes",
|
|
316
331
|
is_flag=True,
|
|
317
|
-
help="Assume yes for update confirmation prompts."
|
|
332
|
+
help="Assume yes for update confirmation prompts and select the newest matching full-system build."
|
|
318
333
|
)
|
|
319
334
|
@click.option(
|
|
320
335
|
"-p", "--passwd",
|
|
@@ -348,15 +363,17 @@ def download(ctx, url, dest):
|
|
|
348
363
|
"--dryrun",
|
|
349
364
|
is_flag=True,
|
|
350
365
|
default=False,
|
|
351
|
-
help="For eLxr
|
|
366
|
+
help="For eLxr, preview an update or slot swap without installing, switching slots, or rebooting."
|
|
352
367
|
)
|
|
353
|
-
@click.option("--inspect", "inspect_state", is_flag=True, help="Show eLxr 3.0+ A/B
|
|
368
|
+
@click.option("--inspect", "inspect_state", is_flag=True, help="Show eLxr 3.0+ A/B slots and overlay customizations without updating (local or --ip).")
|
|
369
|
+
@click.option("--swap", is_flag=True, help="Select the available inactive eLxr 3.0+ slot for next boot; use --reboot to restart now.")
|
|
370
|
+
@click.option("--verbose", is_flag=True, help="Show detailed overlay file categories during eLxr 3.0+ inspection or update.")
|
|
354
371
|
@click.option("--signing-cert", metavar="URL_OR_FILE", help="SWUpdate PEM verification certificate: HTTP(S) URL or local file. Defaults to the certificate for the selected channel when configured (eLxr 3.0+).")
|
|
355
|
-
@click.option("--reboot", is_flag=True, help="Reboot after successful eLxr 3.0+ installation; verify remote boot health.")
|
|
372
|
+
@click.option("--reboot", is_flag=True, help="Reboot after successful eLxr 3.0+ installation or slot selection; verify remote boot health.")
|
|
356
373
|
@click.pass_context
|
|
357
|
-
def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force, troot_only, dryrun, inspect_state, reboot, signing_cert):
|
|
374
|
+
def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force, troot_only, dryrun, inspect_state, verbose, reboot, signing_cert, swap):
|
|
358
375
|
"""
|
|
359
|
-
Update
|
|
376
|
+
Update a SiMa DevKit, remote device, or Linux PCIe host.
|
|
360
377
|
|
|
361
378
|
This command downloads and applies system software updates across
|
|
362
379
|
different SiMa environments (Modalix, MLSoC/Davinci, headless images,
|
|
@@ -365,6 +382,15 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
365
382
|
|
|
366
383
|
eLxr 3.0+ uses signed full-system SWU bundles. Use --inspect for A/B
|
|
367
384
|
state, --ip for remote updates, and --reboot to reboot after installation.
|
|
385
|
+
|
|
386
|
+
Use --swap to select the valid inactive slot without downloading an update.
|
|
387
|
+
The current and target versions are shown before confirmation; --yes skips
|
|
388
|
+
confirmation. Reboot separately to apply, or add --reboot to restart now.
|
|
389
|
+
Shared data and overlay customizations persist and can override files in
|
|
390
|
+
the selected version. Blank, invalid, pending, and unknown states are refused.
|
|
391
|
+
|
|
392
|
+
Examples: sima-cli update --swap; sima-cli update --ip 192.168.6.5 --swap --reboot
|
|
393
|
+
|
|
368
394
|
The verification certificate is downloaded for the selected channel when configured; use
|
|
369
395
|
--signing-cert URL_OR_FILE for an image signed with your own certificate.
|
|
370
396
|
Developer-portal version lookup for 3.0 is not available yet.
|
|
@@ -397,6 +423,9 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
397
423
|
|
|
398
424
|
• Remote updates require an accessible IP address (``--ip``)
|
|
399
425
|
|
|
426
|
+
• PCIe host updates require Linux and ``-i/--internal``; omit the
|
|
427
|
+
version to choose from the available daily platform builds
|
|
428
|
+
|
|
400
429
|
Typical Use Cases:
|
|
401
430
|
|
|
402
431
|
• Updating a SiMa DevKit to the latest GA release
|
|
@@ -407,6 +436,8 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
407
436
|
|
|
408
437
|
• Running updates from both the device itself or a host PC
|
|
409
438
|
|
|
439
|
+
• Installing a daily PCIe host package on a Linux development host
|
|
440
|
+
|
|
410
441
|
\b
|
|
411
442
|
Examples:
|
|
412
443
|
|
|
@@ -438,6 +469,14 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
438
469
|
|
|
439
470
|
sima-cli -i update -y
|
|
440
471
|
|
|
472
|
+
# Select and install a PCIe host package from the daily build catalog (Linux only)
|
|
473
|
+
|
|
474
|
+
sima-cli -i update
|
|
475
|
+
|
|
476
|
+
# Or install a specific indexed daily platform build
|
|
477
|
+
|
|
478
|
+
sima-cli -i update -v 3.0.0_daily_develop_B1774
|
|
479
|
+
|
|
441
480
|
# Update legacy eLxr (<3.0) from the public pre-release mirror without prompts
|
|
442
481
|
|
|
443
482
|
sima-cli -y update -f -y
|
|
@@ -453,7 +492,34 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
453
492
|
"""
|
|
454
493
|
# Prioritize explicit --version option over positional argument
|
|
455
494
|
version_or_url = version_option or version_or_url
|
|
495
|
+
env_type, env_subtype = get_environment_type()
|
|
496
|
+
internal = ctx.obj.get("internal", False)
|
|
497
|
+
auto_confirm = yes or ctx.obj.get("yes", False)
|
|
498
|
+
|
|
499
|
+
device_update_options = (
|
|
500
|
+
dryrun
|
|
501
|
+
or troot_only
|
|
502
|
+
or inspect_state
|
|
503
|
+
or swap
|
|
504
|
+
or verbose
|
|
505
|
+
or reboot
|
|
506
|
+
or force
|
|
507
|
+
or signing_cert is not None
|
|
508
|
+
or flavor != "auto"
|
|
509
|
+
)
|
|
510
|
+
# A plain update with no remote target means installing the PCIe host
|
|
511
|
+
# package. Device-specific operations continue to the existing dispatcher.
|
|
512
|
+
if env_type == "host" and not ip and not device_update_options:
|
|
513
|
+
if env_subtype != "linux":
|
|
514
|
+
raise click.UsageError("PCIe host updates are only supported on Linux hosts.")
|
|
515
|
+
if not internal:
|
|
516
|
+
raise click.UsageError("Linux PCIe host updates require -i/--internal.")
|
|
517
|
+
install_host_package(version_or_url, auto_confirm=auto_confirm)
|
|
518
|
+
return
|
|
519
|
+
|
|
456
520
|
is_elxr = is_devkit_running_elxr()
|
|
521
|
+
if swap and (inspect_state or version_or_url or force or troot_only or signing_cert is not None or flavor != "auto"):
|
|
522
|
+
raise click.UsageError("--swap cannot be combined with --inspect or installation options.")
|
|
457
523
|
if inspect_state and (version_or_url or dryrun or force or troot_only or reboot or signing_cert is not None or flavor != 'auto'):
|
|
458
524
|
raise click.UsageError("--inspect cannot be combined with installation options.")
|
|
459
525
|
try:
|
|
@@ -461,7 +527,7 @@ def update(ctx, version_or_url, version_option, ip, yes, passwd, flavor, force,
|
|
|
461
527
|
internal=ctx.obj.get("internal", False),
|
|
462
528
|
auto_confirm=yes or ctx.obj.get("yes", False), dryrun=dryrun,
|
|
463
529
|
signing_cert=signing_cert, reboot=reboot, inspect=inspect_state, force=force,
|
|
464
|
-
troot_only=troot_only, flavor=flavor, local_elxr=is_elxr):
|
|
530
|
+
troot_only=troot_only, flavor=flavor, local_elxr=is_elxr, verbose=verbose, swap=swap):
|
|
465
531
|
return
|
|
466
532
|
except (click.ClickException, click.Abort):
|
|
467
533
|
raise
|
|
@@ -590,25 +656,34 @@ def mla(ctx):
|
|
|
590
656
|
@click.pass_context
|
|
591
657
|
def show_mla_memory_usage(ctx):
|
|
592
658
|
"""Show MLA Memory usage overtime."""
|
|
593
|
-
|
|
594
|
-
|
|
659
|
+
try:
|
|
660
|
+
monitor_simaai_mem_chart()
|
|
661
|
+
except MemoryTelemetryError as exc:
|
|
662
|
+
raise click.ClickException(str(exc)) from exc
|
|
595
663
|
|
|
596
664
|
|
|
597
665
|
# ----------------------
|
|
598
666
|
# bootimg Command
|
|
599
667
|
# ----------------------
|
|
600
668
|
@main.command(name="bootimg")
|
|
601
|
-
@click.option("-v", "--version", required=
|
|
669
|
+
@click.option("-v", "--version", required=False, help="Firmware version to download and write (e.g., 1.6.0)")
|
|
602
670
|
@click.option("-b", "--boardtype", type=click.Choice(["modalix", "mlsoc"], case_sensitive=False), default="modalix", show_default=True, help="Target board type.")
|
|
603
671
|
@click.option("-t", "--fwtype", type=click.Choice(["yocto", "elxr"], case_sensitive=False), default="elxr", show_default=True, help="Target firmware type.")
|
|
604
672
|
@click.option("-n", "--netboot", is_flag=True, default=False, show_default=True, help="Prepare image for network boot and launch TFTP server.")
|
|
673
|
+
@click.option(
|
|
674
|
+
"--images",
|
|
675
|
+
type=click.Path(exists=True, file_okay=False, dir_okay=True, readable=True, path_type=Path),
|
|
676
|
+
help="Directory containing local netboot source images.",
|
|
677
|
+
)
|
|
678
|
+
@click.option("--delete-cache", is_flag=True, help="Delete the managed netboot cache after the session exits.")
|
|
605
679
|
@click.option("-f", "--force", is_flag=True, help="Allow daily mirror fallback if Artifactory is unavailable (internal Modalix eLxr netboot only).")
|
|
606
680
|
@click.option("--recovery", is_flag=True, help="Write eLxr Modalix recovery media for automatic eMMC recovery.")
|
|
607
681
|
@click.option("--devkit", "--devkit-ip", "devkit_ip", required=False, help="DevKit IP for remote netboot; discover and select a DevKit when omitted.")
|
|
608
682
|
@click.option("-r", "--rootfs", required=False, help="Custom root fs folders (internal use only)")
|
|
609
683
|
@click.option("-a", "--autoflash", is_flag=True, default=False, show_default=True, help="Network boot the selected DevKit, then automatically flash its internal storage once SSH is ready.")
|
|
610
684
|
@click.pass_context
|
|
611
|
-
def bootimg_cmd(ctx, version, boardtype, netboot,
|
|
685
|
+
def bootimg_cmd(ctx, version, boardtype, netboot, images, delete_cache, devkit_ip,
|
|
686
|
+
autoflash, fwtype, rootfs, recovery=False, force=False):
|
|
612
687
|
"""
|
|
613
688
|
Prepare a bootable image for the SiMa DevKit.
|
|
614
689
|
|
|
@@ -641,6 +716,17 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
|
|
|
641
716
|
|
|
642
717
|
• Automating eMMC flashing over the network
|
|
643
718
|
|
|
719
|
+
Local Images and Cache:
|
|
720
|
+
|
|
721
|
+
• Use ``--images DIRECTORY`` to recursively discover local netboot
|
|
722
|
+
artifacts. eLxr requires a minimal TFTP archive and an eMMC
|
|
723
|
+
``.img.gz``; Yocto requires a release archive.
|
|
724
|
+
|
|
725
|
+
• The supplied directory remains read-only. Prepared content is cached
|
|
726
|
+
under the platform temporary directory in ``sima-cli/netboot`` and is
|
|
727
|
+
reused by default. ``--delete-cache`` removes only the managed cache
|
|
728
|
+
entry after the session exits.
|
|
729
|
+
|
|
644
730
|
\b
|
|
645
731
|
Examples:
|
|
646
732
|
|
|
@@ -664,12 +750,28 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
|
|
|
664
750
|
|
|
665
751
|
sima-cli bootimg -v 2.0.0 --netboot
|
|
666
752
|
|
|
753
|
+
# Prepare netboot from images already downloaded to a local directory
|
|
754
|
+
|
|
755
|
+
sima-cli bootimg --netboot --boardtype modalix --fwtype elxr --images /path/to/images
|
|
756
|
+
|
|
667
757
|
# Prepare USB/SD recovery media that automatically recovers eMMC
|
|
668
758
|
|
|
669
759
|
sima-cli bootimg -v 3.0.0 --recovery
|
|
670
760
|
|
|
671
761
|
"""
|
|
672
762
|
|
|
763
|
+
uses_netboot = netboot or autoflash
|
|
764
|
+
if images and not uses_netboot:
|
|
765
|
+
raise click.UsageError("--images requires --netboot or --autoflash.")
|
|
766
|
+
if delete_cache and not uses_netboot:
|
|
767
|
+
raise click.UsageError("--delete-cache requires --netboot or --autoflash.")
|
|
768
|
+
if images and version:
|
|
769
|
+
raise click.UsageError("--images and --version cannot be used together.")
|
|
770
|
+
if images and rootfs:
|
|
771
|
+
raise click.UsageError("--images and --rootfs cannot be used together.")
|
|
772
|
+
if not version and not images:
|
|
773
|
+
raise click.UsageError("Provide --version, or use --images for netboot.")
|
|
774
|
+
|
|
673
775
|
if recovery:
|
|
674
776
|
if netboot or autoflash or rootfs or devkit_ip:
|
|
675
777
|
raise click.UsageError("--recovery cannot be combined with --netboot, --autoflash, --rootfs, or --devkit-ip.")
|
|
@@ -693,13 +795,23 @@ def bootimg_cmd(ctx, version, boardtype, netboot, devkit_ip, autoflash, fwtype,
|
|
|
693
795
|
click.echo(f" 🔹 F/W Type : {fwtype}")
|
|
694
796
|
click.echo(f" 🔹 F/W Flavor: headless")
|
|
695
797
|
click.echo(f" 🔹 Custom RootFS: {rootfs}")
|
|
798
|
+
click.echo(f" 🔹 Local Images: {images}")
|
|
696
799
|
click.echo(f" 🔹 DevKit IP : {devkit_ip}")
|
|
697
800
|
|
|
698
801
|
try:
|
|
699
802
|
boardtype = boardtype if boardtype != 'mlsoc' else 'davinci'
|
|
700
803
|
if netboot or autoflash:
|
|
701
|
-
|
|
702
|
-
|
|
804
|
+
netboot_options = {}
|
|
805
|
+
if images:
|
|
806
|
+
netboot_options["images"] = str(images)
|
|
807
|
+
if delete_cache:
|
|
808
|
+
netboot_options["delete_cache"] = True
|
|
809
|
+
setup_netboot(
|
|
810
|
+
version, boardtype, internal, autoflash, flavor='headless',
|
|
811
|
+
rootfs=rootfs, swtype=fwtype, allow_daily_fallback=force,
|
|
812
|
+
devkit=devkit_ip, **netboot_options,
|
|
813
|
+
)
|
|
814
|
+
click.echo("✅ Netboot session ended and the TFTP server is stopped.")
|
|
703
815
|
else:
|
|
704
816
|
write_image(version, boardtype, fwtype, internal, flavor='headless', recovery=recovery)
|
|
705
817
|
click.echo("✅ Boot image successfully written.")
|
|
@@ -982,7 +1094,28 @@ def network_cmd(ctx):
|
|
|
982
1094
|
"""
|
|
983
1095
|
Setup Network IP address on the DevKit
|
|
984
1096
|
|
|
985
|
-
This command only works on the DevKit.
|
|
1097
|
+
This command only works on the DevKit. Select an interface, then choose DHCP,
|
|
1098
|
+
Default Static IP, or Custom Static IP.
|
|
1099
|
+
|
|
1100
|
+
Custom Static IP prompts for an IPv4 address, such as 192.168.1.50, or an
|
|
1101
|
+
address with a subnet prefix, such as 192.168.1.50/24. A bare address uses
|
|
1102
|
+
the default static profile's prefix. Invalid addresses are rejected;
|
|
1103
|
+
leave the prompt blank to cancel.
|
|
1104
|
+
|
|
1105
|
+
Custom addresses are activated without changing the existing boot
|
|
1106
|
+
configuration. The default static settings are copied into a temporary
|
|
1107
|
+
custom profile with autoconnect disabled on NetworkManager, or a runtime
|
|
1108
|
+
configuration on systemd-networkd. After reboot, the board uses its
|
|
1109
|
+
existing startup configuration. Selecting DHCP or
|
|
1110
|
+
Default Static IP disables the custom configuration.
|
|
1111
|
+
DNS and other default static settings are inherited. If an inherited IPv4
|
|
1112
|
+
gateway is incompatible with the new address, enter a replacement gateway
|
|
1113
|
+
or leave it blank for no gateway. The default profile is not modified.
|
|
1114
|
+
|
|
1115
|
+
Network changes must be made from the DevKit serial console. SSH sessions,
|
|
1116
|
+
including commands launched through sudo, are rejected before configuration
|
|
1117
|
+
changes. A replacement custom profile is activated before the old one is
|
|
1118
|
+
removed.
|
|
986
1119
|
|
|
987
1120
|
"""
|
|
988
1121
|
network_menu()
|