← Back to PRs

#21307: Installer smoke: add unsupported Node-path regression

by rolandkakonyi open 2026-02-19 22:05 View on GitHub →
scripts docker size: S
## IMPORTANT: Dependency Gate (read first) **As of February 19, 2026, this PR is expected to fail `install-smoke` until openclaw/openclaw.ai#68 merges and deploys.** - CI for this PR runs against live `https://openclaw.ai/install.sh`. - The failing path (`unsupported-node-path`) intentionally reproduces #21126 against the currently deployed installer. - Required merge order: openclaw/openclaw.ai#68 first, then this PR. ## Summary Describe the problem and fix in 2–5 bullets: - Problem: Issue #21126 is triggered when installer runs from a shell where unsupported Node is active on PATH (for example Node 20 via nvm). - Why it matters: the installer fix in `openclaw.ai` needs durable regression coverage in `openclaw` CI so this path does not break again. - What changed: added a dedicated Docker smoke scenario (`unsupported-node-path`) and wired it into `scripts/test-install-sh-docker.sh`. - What did NOT change (scope boundary): no runtime product behavior changed in `openclaw`; this PR adds regression smoke coverage only. ## Change Type (select all) - [x] Bug fix - [ ] Feature - [ ] Refactor - [ ] Docs - [ ] Security hardening - [x] Chore/infra ## Scope (select all touched areas) - [ ] Gateway / orchestration - [ ] Skills / tool execution - [ ] Auth / tokens - [ ] Memory / storage - [ ] Integrations - [ ] API / contracts - [ ] UI / DX - [x] CI/CD / infra ## Linked Issue/PR - Closes #21126 - Related openclaw/openclaw.ai#68 (must merge first) ## User-visible / Behavior Changes None. ## Security Impact (required) - New permissions/capabilities? (`Yes/No`) No - Secrets/tokens handling changed? (`Yes/No`) No - New/changed network calls? (`Yes/No`) No - Command/tool execution surface changed? (`Yes/No`) No - Data access scope changed? (`Yes/No`) No - If any `Yes`, explain risk + mitigation: ## Repro + Verification ### Environment - OS: macOS host (native test + Docker containers on macOS host) - Runtime/container: Docker (`openclaw-install-smoke`, `openclaw-install-nonroot`, `openclaw-install-unsupported-node-path`) + native macOS shell (isolated `HOME` + nvm Node 20) - Model/provider: N/A - Integration/channel (if any): N/A - Relevant config (redacted): `OPENCLAW_NO_ONBOARD=1` ### Steps 1. Run unsupported-node-path regression against upstream installer script (`openclaw.ai/main/public/install.sh`). 2. Run the same regression against fixed installer script from openclaw/openclaw.ai#68. 3. Run full installer smoke (root + non-root + unsupported-node-path) against fixed script. 4. Run native macOS host verification in an isolated HOME with nvm Node 20 active, then clean up the test install. Single command (full smoke against fixed installer scripts): ```bash OPENCLAW_INSTALL_URL="https://raw.githubusercontent.com/rolandkakonyi/openclaw.ai/codex/fix-21126-installer-node-path/public/install.sh" \ OPENCLAW_INSTALL_CLI_URL="https://raw.githubusercontent.com/rolandkakonyi/openclaw.ai/codex/fix-21126-installer-node-path/public/install-cli.sh" \ pnpm test:install:smoke ``` ### Expected - Upstream script fails in unsupported-node-path regression. - Fixed script passes unsupported-node-path regression. - Existing smoke scenarios remain green. - Native macOS nvm Node 20 path succeeds and is cleaned up after verification. ### Actual - Upstream vs fixed matrix reproduced exactly: upstream failed, fixed passed. - Full smoke remained green for root/non-root/unsupported-node-path/CLI scenarios (`rc=0`). - Native macOS isolated nvm Node 20 verification passed (`openclaw --version=2026.2.19-2`) and cleanup completed. ## Evidence Attach at least one: - [x] Failing test/log before + passing after - [x] Trace/log snippets - [ ] Screenshot/recording - [ ] Perf numbers (if relevant) ## Human Verification (required) What you personally verified (not just CI), and how: - Verified scenarios: - Unsupported-node-path matrix: - upstream script: `upstream_rc=1` - fixed script: `fixed_rc=0` - Full smoke (fixed script): root/non-root/unsupported-node-path + CLI non-root passed (`rc=0`) - Focused CLI smoke validated separately. - Native macOS host verification (isolated HOME + nvm Node 20): installer passed, `openclaw --version` returned `2026.2.19-2`, cleanup completed. - Edge cases checked: - Unsupported Node 20 active via nvm before installer execution. - Existing smoke scenarios (root/non-root) stayed green. - Native macOS path kept nvm Node 20 shell default while installer configured runtime with Node 22 as expected. - What you did **not** verify: - Did not verify Windows or bare-metal Linux host installs in this PR. ## Compatibility / Migration - Backward compatible? (`Yes/No`) Yes - Config/env changes? (`Yes/No`) No - Migration needed? (`Yes/No`) No - If yes, exact upgrade steps: ## Failure Recovery (if this breaks) - How to disable/revert this change quickly: revert this PR commit in `openclaw`. - Files/config to restore: - `scripts/test-install-sh-docker.sh` - `scripts/docker/install-sh-unsupported-node-path/Dockerfile` - `scripts/docker/install-sh-unsupported-node-path/run.sh` - Known bad symptoms reviewers should watch for: - New unsupported-node-path smoke stage failing while root/non-root remain green. ## Risks and Mitigations - Risk: New smoke stage adds CI time and extra network dependency (nvm download in container). - Mitigation: Stage is isolated and can be skipped with `OPENCLAW_INSTALL_SMOKE_SKIP_UNSUPPORTED_NODE_PATH=1` for troubleshooting. ## Rollout Dependency This issue requires two PRs and a strict merge order: 1. openclaw/openclaw.ai#68 (installer fix, source of truth for `install.sh`) must merge first. 2. This `openclaw` PR (regression coverage) merges after openclaw/openclaw.ai#68. ## AI Assistance Disclosure - AI tool used: GPT-5.3-Codex (High reasoning). - Intent summary of prompts: - Add regression Docker test for issue #21126. - Reproduce behavior against upstream vs fixed installer scripts. - Keep naming generic (`unsupported-node-path`, not nvm-specific). - Validate with shellcheck and smoke runs. <!-- greptile_comment --> <h3>Greptile Summary</h3> Added regression coverage for issue openclaw#21126 by introducing a new Docker smoke test scenario that verifies the installer works correctly when an unsupported Node version (Node 20) is active on PATH via nvm. Key changes: - New `install-sh-unsupported-node-path` Docker container with Node 20 fixture via nvm - Integration into `test-install-sh-docker.sh` with skip flag support (`OPENCLAW_INSTALL_SMOKE_SKIP_UNSUPPORTED_NODE_PATH`) - Follows existing smoke test patterns (`install-sh-smoke`, `install-sh-nonroot`) - Test validates installer can handle unsupported Node on PATH and install correct runtime The implementation is clean, follows repository conventions, and adds the necessary regression coverage mentioned in the PR description. Note this PR is expected to fail CI until openclaw/openclaw.ai#68 merges and deploys. <h3>Confidence Score: 5/5</h3> - This PR is safe to merge - it only adds test infrastructure without changing runtime behavior - The changes are test-only (Docker smoke scenarios), follow established patterns in the repository, include proper error handling and environment configuration, and have well-defined scope boundaries. No runtime product behavior is modified. - No files require special attention <sub>Last reviewed commit: 86a2e3e</sub> <!-- greptile_other_comments_section --> <sub>(3/5) Reply to the agent's comments like "Can you suggest a fix for this @greptileai?" or ask follow-up questions!</sub> <!-- /greptile_comment -->

Most Similar PRs