feat(docker): bundle MeshCore CLI Python package alongside Meshtastic CLI#3591
Conversation
… CLI (#3587) Install the meshcore-cli PyPI package (CLI for MeshCore companion radios and repeaters) into the existing apprise venv, mirroring how the Meshtastic Python CLI is bundled. Symlink both console scripts (meshcore-cli and meshcli) into /usr/local/bin so they are on PATH inside the container. Closes #3587 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011JEaCGwY9Wz8jeV4e22GW4
|
Claude finished @Yeraze's task —— View job PR Review: feat(docker): bundle MeshCore CLI Python package alongside Meshtastic CLITasks:
Review SummaryThis is a clean, minimal, and well-scoped change. The implementation is consistent with the existing pattern for the Security / Supply ChainUnpinned package versions — both New transitive dependency — CorrectnessSymlink existence — the PR symlinks both venv activation — all three symlinks correctly point into Code QualityThe change is idiomatic and minimal. The single Line 67 — the modified pip install line: && /opt/apprise-venv/bin/pip install --no-cache-dir apprise "paho-mqtt<2.0" meshtastic meshcore-cli \This is clean. The new package is appended at the end of the existing package list, no formatting changes needed. Lines 69–70 — new symlinks: && ln -sf /opt/apprise-venv/bin/meshcore-cli /usr/local/bin/meshcore-cli \
&& ln -sf /opt/apprise-venv/bin/meshcli /usr/local/bin/meshcli \Consistent with line 68's PerformanceNo build performance impact beyond the additional pip resolution/download time. This is folded into the same Test CoverageDockerfile changes are not exercised by the Vitest suite (correctly noted in the PR description). There are no automated Dockerfile integration tests in this repo. The manual verification described in the PR (building the modified layer and running Minor Suggestions
VerdictThe change is correct, minimal, and follows the established pattern exactly. The supply-chain concern around unpinned packages is pre-existing and out of scope for this PR. LGTM pending maintainer comfort with the unpinned version policy. |
Summary
Closes #3587.
The MeshMonitor Docker image already bundles the official Meshtastic Python CLI. This adds the MeshCore CLI Python application alongside it, using the exact same mechanism (pip install into the existing
apprisevirtualenv, sameRUNlayer,--no-cache-dir).Changes
meshcore-clito thepip installline in the Python/AppriseRUNlayer inDockerfile.meshcore-cliandmeshcli— into/usr/local/bin, mirroring the existingmeshtasticsymlink.Package details
meshcore-cli(summary: "Command line interface to meshcore companion radios and repeaters").meshtasticpackage on the same line (resolved tomeshcore-cli 1.5.7+meshcore 2.3.7at build time).entry_points.txtdeclares bothmeshcore-cliandmeshcli; both are symlinked onto PATH.Note: the codebase does not shell out to a
meshcore-clibinary — MeshCore uses the nativemeshcore.jslibrary (companion) and direct serial CLI (repeater). The fewmeshcore-clireferences inmeshcoreManager.tsare comments about users running the CLI out-of-band. Bundling is purely additive operator convenience, consistent with the bundled Meshtastic CLI.Verification
RUNlayer on the samenode:24.15.0-alpine3.22base. Thepip installsucceeded andwhich meshtastic meshcore-cli meshcliresolved all three;meshcore-cli --helpandmeshtastic --versionboth ran successfully. The Meshtastic install is unaffected (meshtastic-2.7.9).tsc: passes. Full Vitest suite: 7012 passed, 0 failed (Dockerfile change does not affect JS tests). Pre-existing ESLint errors in the repo are unrelated (diff touches onlyDockerfile).🤖 Generated with Claude Code