Skip to content

test: add full live E2E test (install → onboard → inference)#226

Merged
ericksoa merged 1 commit into
mainfrom
test/issue-205-install-path-e2e
Mar 17, 2026
Merged

test: add full live E2E test (install → onboard → inference)#226
ericksoa merged 1 commit into
mainfrom
test/issue-205-install-path-e2e

Conversation

@ericksoa

@ericksoa ericksoa commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a live E2E test that proves the complete user journey with real infrastructure — no mocks. Sends prompts through the sandbox and verifies model responses come back from the NVIDIA Cloud API.

Intended for use in the CD pipeline (#71).

Test phases

  1. Prerequisites — Docker running, openshell installed, NVIDIA_API_KEY valid, network reachable
  2. Installnpm install + npm link from repo
  3. Onboard — creates sandbox e2e-full with NVIDIA Cloud API inference (non-interactive)
  4. Sandbox verificationnemoclaw list, nemoclaw status, registry file checks
  5. Live inference — direct API test + inference through the sandbox (user → sandbox → gateway → NVIDIA API → response)
  6. Cleanup — destroys sandbox, verifies removal

Running

# Requires: Docker, openshell, NVIDIA_API_KEY, network access
bash test/e2e/test-full-e2e.sh

Results

  • 16/16 pass — real inference verified through the full sandbox stack

Notes

  • Handles nemotron-3-super's reasoning model format (reasoning_content field)
  • Works around openshell inference set --no-verify incompatibility by configuring inference directly when onboard's attempt fails silently
  • Uses file redirect instead of $(…) to avoid hanging on openshell's background port-forward
  • Portable timeout detection (Linux timeout, macOS gtimeout, or fallback)
  • No API keys or credentials hardcoded

@ericksoa ericksoa force-pushed the test/issue-205-install-path-e2e branch from e4a5bc1 to 71bf1b7 Compare March 17, 2026 17:07
@ericksoa ericksoa changed the title test: add E2E test suites for issue #205 (install PATH handling) test: add full live E2E test (install → onboard → inference) Mar 17, 2026
Adds a test that proves the complete user journey with real
infrastructure — no mocks. Sends prompts through the sandbox
and verifies responses from the NVIDIA Cloud API.

Phases: prerequisites → install → onboard → sandbox verification →
live inference (direct API + through sandbox) → cleanup

Requires: Docker, openshell, NVIDIA_API_KEY, network access.

Ref: #205
@ericksoa ericksoa force-pushed the test/issue-205-install-path-e2e branch from 71bf1b7 to 0c04ba7 Compare March 17, 2026 17:10
@ericksoa ericksoa requested a review from Copilot March 17, 2026 17:22
ericksoa added a commit that referenced this pull request Mar 17, 2026
Fixes #205.

Root cause: when the installer runs via `curl | bash`, nvm sources
into the subshell and updates PATH. When the subshell exits, all PATH
changes are lost — the user's interactive shell still has the old PATH,
so `nemoclaw` and `node` are both "command not found".

Additionally, `onboard.js` called the full `scripts/install.sh` just to
install openshell, which unnecessarily reinstalled Node, Docker, and
nemoclaw in a nested subprocess — compounding the PATH issue.

Changes:

scripts/install.sh:
- Add ensure_nvm_loaded() and refresh_path() to update PATH after
  npm installs nemoclaw
- Add nvm fallback detection for $HOME/.nvm when NVM_DIR is unset
- Soften verification: warn with instructions instead of hard-failing
  when the binary exists but isn't on PATH (exit 0, not exit 1)
- Add post-install message telling nvm/fnm users to `source ~/.bashrc`
- Use sudo for npm install -g when NODE_MGR=nodesource

install.sh (root):
- Soften verify_nemoclaw() to return 0 when binary exists but PATH
  is stale (was hard error via error())
- Add post_install_message() for shell reload instructions

bin/lib/onboard.js:
- Switch installOpenshell() to use dedicated install-openshell.sh
  instead of the full scripts/install.sh

scripts/install-openshell.sh (new):
- Dedicated openshell-only installer with macOS + Linux support
  and conditional sudo

Tested: 58/58 unit tests pass, 24/24 E2E tests pass (see PR #226).

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a “full” end-to-end (no-mocks) verification flow that installs NemoClaw, onboards an OpenShell sandbox/gateway, and validates live inference against NVIDIA’s hosted API—both directly and through the sandbox.

Changes:

  • Added a host-oriented full E2E Bash script that runs install → onboard → sandbox verification → live inference → cleanup.
  • Added a companion Dockerfile intended to run the full E2E script in a containerized environment.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 5 comments.

File Description
test/e2e/test-full-e2e.sh New full E2E runner that exercises the real OpenShell + NemoClaw onboarding path and validates live inference (direct + via sandbox).
test/e2e/Dockerfile.full-e2e New container image intended to execute the full E2E runner as an ENTRYPOINT.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +9 to +15
# Install Docker CLI only (NOT Docker daemon — will use host socket at runtime)
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" \
> /etc/apt/sources.list.d/docker.list && \
apt-get update && apt-get install -y --no-install-recommends docker-ce-cli && \
rm -rf /var/lib/apt/lists/*
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
curl git ca-certificates bash python3 sudo jq \
Comment thread test/e2e/test-full-e2e.sh
Comment on lines +75 to +90
section "Phase 1: Prerequisites"

if docker info > /dev/null 2>&1; then
pass "Docker is running"
else
fail "Docker is not running — cannot continue"
exit 1
fi

if command -v openshell > /dev/null 2>&1; then
pass "openshell CLI installed ($(openshell --version 2>&1 || echo unknown))"
else
fail "openshell CLI not found — cannot continue"
exit 1
fi

Comment thread test/e2e/test-full-e2e.sh
Comment on lines +1 to +6
#!/bin/bash
# Full E2E: install → onboard → verify inference (REAL services, no mocks)
#
# Proves the COMPLETE user journey including real inference against
# the NVIDIA Cloud API. Sends prompts through the sandbox and verifies
# that responses come back from the model.
Comment thread test/e2e/test-full-e2e.sh
Comment on lines +122 to +124
# Source bashrc in case nvm/asdf modified it
if [ -f "$HOME/.bashrc" ]; then
source "$HOME/.bashrc" 2>/dev/null || true
@ericksoa ericksoa mentioned this pull request Mar 17, 2026
4 tasks
@dnandakumar-nv dnandakumar-nv self-requested a review March 17, 2026 18:21
liveaverage pushed a commit that referenced this pull request Mar 17, 2026
Fixes #205.

Root cause: when the installer runs via `curl | bash`, nvm sources
into the subshell and updates PATH. When the subshell exits, all PATH
changes are lost — the user's interactive shell still has the old PATH,
so `nemoclaw` and `node` are both "command not found".

Additionally, `onboard.js` called the full `scripts/install.sh` just to
install openshell, which unnecessarily reinstalled Node, Docker, and
nemoclaw in a nested subprocess — compounding the PATH issue.

Changes:

scripts/install.sh:
- Add ensure_nvm_loaded() and refresh_path() to update PATH after
  npm installs nemoclaw
- Add nvm fallback detection for $HOME/.nvm when NVM_DIR is unset
- Soften verification: warn with instructions instead of hard-failing
  when the binary exists but isn't on PATH (exit 0, not exit 1)
- Add post-install message telling nvm/fnm users to `source ~/.bashrc`
- Use sudo for npm install -g when NODE_MGR=nodesource

install.sh (root):
- Soften verify_nemoclaw() to return 0 when binary exists but PATH
  is stale (was hard error via error())
- Add post_install_message() for shell reload instructions

bin/lib/onboard.js:
- Switch installOpenshell() to use dedicated install-openshell.sh
  instead of the full scripts/install.sh

scripts/install-openshell.sh (new):
- Dedicated openshell-only installer with macOS + Linux support
  and conditional sudo

Tested: 58/58 unit tests pass, 24/24 E2E tests pass (see PR #226).
@dnandakumar-nv

Copy link
Copy Markdown
Contributor

bash -c doesn't inherit PS1 even when exported. Bash strips PS1 on non-interactive invocations. So the fix needs to be
inside the script itself. The PR's source "$HOME/.bashrc" 2>/dev/null || true doesn't protect against set -u errors (they exit the
whole script before || true can catch anything). The fix is set +u around the source:

 # Source bashrc in case nvm/asdf modified it
# Temporarily disable -u: .bashrc references $PS1 which is unset in non-interactive shells                           
if [ -f "$HOME/.bashrc" ]; then
  set +u                                                                                                             
  source "$HOME/.bashrc" 2>/dev/null || true
  set -u                                                                                                             
fi
if command -v nemoclaw > /dev/null 2>&1; then

@ericksoa ericksoa merged commit 9bd473b into main Mar 17, 2026
4 checks passed
Ryuketsukami pushed a commit to Ryuketsukami/NemoClaw that referenced this pull request Mar 24, 2026
Fixes NVIDIA#205.

Root cause: when the installer runs via `curl | bash`, nvm sources
into the subshell and updates PATH. When the subshell exits, all PATH
changes are lost — the user's interactive shell still has the old PATH,
so `nemoclaw` and `node` are both "command not found".

Additionally, `onboard.js` called the full `scripts/install.sh` just to
install openshell, which unnecessarily reinstalled Node, Docker, and
nemoclaw in a nested subprocess — compounding the PATH issue.

Changes:

scripts/install.sh:
- Add ensure_nvm_loaded() and refresh_path() to update PATH after
  npm installs nemoclaw
- Add nvm fallback detection for $HOME/.nvm when NVM_DIR is unset
- Soften verification: warn with instructions instead of hard-failing
  when the binary exists but isn't on PATH (exit 0, not exit 1)
- Add post-install message telling nvm/fnm users to `source ~/.bashrc`
- Use sudo for npm install -g when NODE_MGR=nodesource

install.sh (root):
- Soften verify_nemoclaw() to return 0 when binary exists but PATH
  is stale (was hard error via error())
- Add post_install_message() for shell reload instructions

bin/lib/onboard.js:
- Switch installOpenshell() to use dedicated install-openshell.sh
  instead of the full scripts/install.sh

scripts/install-openshell.sh (new):
- Dedicated openshell-only installer with macOS + Linux support
  and conditional sudo

Tested: 58/58 unit tests pass, 24/24 E2E tests pass (see PR NVIDIA#226).
Ryuketsukami pushed a commit to Ryuketsukami/NemoClaw that referenced this pull request Mar 24, 2026
…A#226)

Adds a test that proves the complete user journey with real
infrastructure — no mocks. Sends prompts through the sandbox
and verifies responses from the NVIDIA Cloud API.

Phases: prerequisites → install → onboard → sandbox verification →
live inference (direct API + through sandbox) → cleanup

Requires: Docker, openshell, NVIDIA_API_KEY, network access.

Ref: NVIDIA#205
jessesanford pushed a commit to jessesanford/NemoClaw that referenced this pull request Mar 24, 2026
Fixes NVIDIA#205.

Root cause: when the installer runs via `curl | bash`, nvm sources
into the subshell and updates PATH. When the subshell exits, all PATH
changes are lost — the user's interactive shell still has the old PATH,
so `nemoclaw` and `node` are both "command not found".

Additionally, `onboard.js` called the full `scripts/install.sh` just to
install openshell, which unnecessarily reinstalled Node, Docker, and
nemoclaw in a nested subprocess — compounding the PATH issue.

Changes:

scripts/install.sh:
- Add ensure_nvm_loaded() and refresh_path() to update PATH after
  npm installs nemoclaw
- Add nvm fallback detection for $HOME/.nvm when NVM_DIR is unset
- Soften verification: warn with instructions instead of hard-failing
  when the binary exists but isn't on PATH (exit 0, not exit 1)
- Add post-install message telling nvm/fnm users to `source ~/.bashrc`
- Use sudo for npm install -g when NODE_MGR=nodesource

install.sh (root):
- Soften verify_nemoclaw() to return 0 when binary exists but PATH
  is stale (was hard error via error())
- Add post_install_message() for shell reload instructions

bin/lib/onboard.js:
- Switch installOpenshell() to use dedicated install-openshell.sh
  instead of the full scripts/install.sh

scripts/install-openshell.sh (new):
- Dedicated openshell-only installer with macOS + Linux support
  and conditional sudo

Tested: 58/58 unit tests pass, 24/24 E2E tests pass (see PR NVIDIA#226).
jessesanford pushed a commit to jessesanford/NemoClaw that referenced this pull request Mar 24, 2026
…A#226)

Adds a test that proves the complete user journey with real
infrastructure — no mocks. Sends prompts through the sandbox
and verifies responses from the NVIDIA Cloud API.

Phases: prerequisites → install → onboard → sandbox verification →
live inference (direct API + through sandbox) → cleanup

Requires: Docker, openshell, NVIDIA_API_KEY, network access.

Ref: NVIDIA#205
mafueee pushed a commit to mafueee/NemoClaw that referenced this pull request Mar 28, 2026
@wscurran wscurran added the chore Build, CI, dependency, or tooling maintenance label Jun 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Build, CI, dependency, or tooling maintenance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants