fix(nemo-deployments): ship openshell SDK in nmp-api and clarify dropped-executor error - #1075
Merged
maxdubrinsky merged 2 commits intoAug 7, 2026
Conversation
Contributor
|
maxdubrinsky
force-pushed
the
mdubrinsky/aircore-978-published-nmp-api-image-ships-without-the-openshell-sdk
branch
from
August 5, 2026 19:51
50077b1 to
b948da8
Compare
The published nmp-api image builds from the functional-services dependency group, which pulled in nemo-deployments-plugin[docker,k8s] but not the openshell extra. Without the openshell SDK, OpenShellDeploymentBackend fails to initialise, the deployments plugin skips the openshell-local executor at startup, and later deployments naming it fail with a misleading 'not registered' error. Add nemo-deployments-plugin[openshell] to the functional-services group only. It stays out of enabled-plugins so bare 'uv sync' on unsupported hosts (older glibc, older macOS) does not hard-fail on the platform-restricted wheels; the api image runs on a compatible base. Wheels resolve for all locked environments, so uv.lock stays in sync. Add a build-time smoke check to Dockerfile.nmp-api that fails the build if the openshell SDK is missing. Signed-off-by: Max Dubrinsky <mdubrinsky@nvidia.com>
A correctly-configured executor whose optional backend was dropped (e.g.
openshell) was skipped at startup and later produced the same 'is not
registered' error as a genuinely misspelled executor name, making the two
indistinguishable.
Record skipped executors in the registry as name -> UnavailableExecutor
(backend + reason). resolve() now raises a distinct, actionable message for a
configured-but-skipped name ('configured but its backend X is unavailable:
<reason>') while keeping the plain 'is not registered' message for unknown
names. The reason carries the backend's install hint.
Add a test covering the distinct message and tighten the unknown-name test to
assert the 'is not registered' wording.
Signed-off-by: Max Dubrinsky <mdubrinsky@nvidia.com>
maxdubrinsky
force-pushed
the
mdubrinsky/aircore-978-published-nmp-api-image-ships-without-the-openshell-sdk
branch
from
August 5, 2026 20:17
b948da8 to
477604f
Compare
maxdubrinsky
marked this pull request as ready for review
August 5, 2026 20:18
Contributor
📝 WalkthroughWalkthroughThe executor registry now records executors skipped because of missing backend dependencies. Resolution errors identify the configured backend and failure reason. The functional-services dependency group includes the OpenShell extra, and unit tests cover both error paths. ChangesExecutor availability handling
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Contributor
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@plugins/nemo-deployments/tests/unit/test_registry.py`:
- Around line 122-145: Update test_unavailable_executor_reports_distinct_error
to assert that the error message includes the configured executor name
"sandbox-local" together with the backend name "sandbox", preserving the
existing assertions for the distinct unavailable-backend reason.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 1670f98c-1526-4586-95f5-fb0598774bb3
⛔ Files ignored due to path filters (1)
uv.lockis excluded by!**/*.lock
📒 Files selected for processing (3)
plugins/nemo-deployments/src/nemo_deployments_plugin/backends/registry.pyplugins/nemo-deployments/tests/unit/test_registry.pypyproject.toml
mckornfield
approved these changes
Aug 6, 2026
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Aug 7, 2026
maxdubrinsky
deleted the
mdubrinsky/aircore-978-published-nmp-api-image-ships-without-the-openshell-sdk
branch
August 7, 2026 15:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes AIRCORE-978. Two defects in the published
nmp-apiimage: OpenShell-sandboxed deployments don't work, and a dropped executor is indistinguishable from a typo.Defect 1 - openshell SDK missing from the image
The image installs the
functional-servicesdep group, which carriednemo-deployments-plugin[docker,k8s]but not theopenshellextra. SoOpenShellDeploymentBackendcouldn't initialise, the plugin skipped theopenshell-localexecutor at startup, and any deployment naming it failed withExecutor 'openshell-local' is not registered.Fix: add
nemo-deployments-plugin[openshell]tofunctional-services.It goes in
functional-services(image-only) rather than the bootstrap groups (enabled-plugins,dev) on purpose: the openshell wheel needs glibc >= 2.39 and has no sdist, and uv markers can't gate on glibc, so a hard dependency would break bareuv syncon older dev hosts. The image builds on a compatible base, so that's the right home for this required-in-image capability.Defect 2 - dropped executor looks like a typo
A configured executor whose backend was skipped raised the same
is not registerederror as a misspelled name.Fix:
ExecutorRegistrynow remembers skipped executors andresolve()raises a distinct message:Executor 'X' is configured but its backend 'Y' is unavailable: <reason>.Testing
pytest plugins/nemo-deployments/tests/unit/test_registry.py-> 12 passed. Addedtest_unavailable_executor_reports_distinct_error; tightenedtest_missing_executor_raisesto assert theis not registeredwording.uv lock --checkin sync; openshell/grpcio/protobuf resolve for all three locked platforms (darwin-arm64, linux-x86_64, linux-aarch64).tyshows only pre-existing diagnostics.Fixes AIRCORE-978
https://linear.app/nvidia/issue/AIRCORE-978
Summary by CodeRabbit
Bug Fixes
New Features