feat(control-plane): add extra software step with mise-based runtime installs#2
feat(control-plane): add extra software step with mise-based runtime installs#2zackerydev wants to merge 3 commits intomainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Adds an “Extra Software” third step to the bot install wizard so operators can provide .tool-versions content that is applied at runtime and triggers a (non-fatal) mise install on bot startup across OpenClaw/IronClaw/PicoClaw.
Changes:
- Add
/bots/new/softwarewizard step + UI template, route, handler logic, and unit tests. - Add
extraSoftware.toolVersionsHelm values and startup-script logic to write.tool-versionsand runmise install. - Install
misein runtime images; update docs and E2E coverage for the new flow.
Reviewed changes
Copilot reviewed 26 out of 26 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| docs/content/tutorials/deploy-first-bot.md | Updates tutorial to reflect 3-step wizard and extra-software step. |
| docs/content/docs/getting-started.md | Updates getting-started steps to include optional extra-software step. |
| docs/content/docs/docs-parity-matrix.md | Adds /bots/new/software to docs parity matrix. |
| docs/content/docs/cli.md | Documents the new wizard route in CLI docs. |
| docs/content/docs/bots.md | Updates install flow docs to include extra-software step and behavior. |
| docker/picoclaw/Dockerfile | Installs mise in PicoClaw runtime image. |
| docker/openclaw/Dockerfile | Installs mise in OpenClaw runtime image. |
| docker/ironclaw/Dockerfile | Installs mise in IronClaw runtime image. |
| control-plane/templates/pages/bot-form-software.html | New step-3 page to capture .tool-versions input and submit install. |
| control-plane/templates/pages/bot-form-infra.html | Updates wizard step count and carries extraToolVersions forward via hidden field. |
| control-plane/templates/pages/bot-form-config.html | Updates wizard step count and routes “Next” to the new software step. |
| control-plane/internal/routes_test.go | Ensures new /bots/new/software route is registered. |
| control-plane/internal/routes.go | Registers new POST route for wizard step 3. |
| control-plane/internal/handler/helm_test.go | Adds unit tests for rendering step 3 and for parsing/installing extra software values. |
| control-plane/internal/handler/helm.go | Adds handler + renderer for step 3; maps extraToolVersions into Helm extraSoftware.toolVersions. |
| control-plane/e2e/openclaw_lifecycle_test.go | Adjusts lifecycle fixture model value to match current expected runtime config. |
| control-plane/e2e/openclaw_extra_software_test.go | New E2E validating .tool-versions persistence and a tool installed via mise. |
| control-plane/charts/picoclaw/values.yaml | Adds extraSoftware.toolVersions chart value. |
| control-plane/charts/picoclaw/templates/startup-configmap.yaml | Adds startup logic to write .tool-versions and run mise install. |
| control-plane/charts/picoclaw/templates/deployment.yaml | Wires PicoClaw to run the startup script via command/args. |
| control-plane/charts/openclaw/values.yaml | Adds extraSoftware.toolVersions chart value. |
| control-plane/charts/openclaw/templates/startup-configmap.yaml | Adds startup logic for .tool-versions + mise install (and tweaks configFile heredoc). |
| control-plane/charts/openclaw/templates/deployment.yaml | Adds rollout checksum annotations for config/startup ConfigMaps. |
| control-plane/charts/ironclaw/values.yaml | Adds extraSoftware.toolVersions chart value. |
| control-plane/charts/ironclaw/templates/startup-configmap.yaml | Adds startup logic to write .tool-versions and run mise install. |
| .config/scripts/e2e-run.sh | Includes the new extra-software E2E test in the runner regex. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Addressed Copilot review feedback in latest push (
Validation re-run after these changes:
|
|
Addressed Copilot review feedback in latest push ().\n\n- Replaced installs in OpenClaw/IronClaw/PicoClaw Dockerfiles with pinned GitHub release tarball downloads + SHA256 verification before install.\n- Added support to PicoClaw deployment and default startup probe settings in chart values to tolerate startup-time .\n- Updated doc comment to match current validation behavior.\n- Heredoc/terminator issues in startup scripts were already corrected in earlier commits and verified in e2e runs.\n\nValidation re-run after these changes:\n- ✓ Charts packaged\n- ✓ Charts packaged ──────────────────┼──── Total in 417 ms\n- Full 🔨 Building ClawMachine... / | | / \ \ / /| / | | | () Kubernetes-native bot vending machine vdev Starting ClawMachine server on port 9080... |
What
Add a third install-wizard step for "Extra Software" that accepts raw
.tool-versions, installsmisein OpenClaw/IronClaw/PicoClaw images, and runs startupmise install(non-fatal) with cache on persistent bot storage.Why
Operators need a supported way to add extra CLI tools to bot runtimes without building custom images.
Linear issue: not provided (requested directly).
Scope
control-plane/internal/routes.go,control-plane/internal/handler/helm.gocontrol-plane/templates/pages/bot-form-infra.htmlcontrol-plane/templates/pages/bot-form-config.htmlcontrol-plane/templates/pages/bot-form-software.htmlcontrol-plane/charts/{openclaw,ironclaw,picoclaw}/values.yamlcontrol-plane/charts/{openclaw,ironclaw,picoclaw}/templates/startup-configmap.yamlcontrol-plane/charts/openclaw/templates/deployment.yaml(rollout checksums)control-plane/charts/picoclaw/templates/deployment.yaml(startup wiring)docker/{openclaw,ironclaw,picoclaw}/Dockerfilecontrol-plane/e2e/openclaw_extra_software_test.gocontrol-plane/e2e/openclaw_lifecycle_test.godocs/content/docs/*anddocs/content/tutorials/*How To Validate
mise run test:all-> passmise run vet-> passmise run lint-> passmise run fix-> passmise run docs:check-> passsource ~/GitHub/zackerydev/.env && export OP_CREDENTIALS_FILE=$HOME/GitHub/zackerydev/1password-credentials.json && .config/scripts/e2e-run.sh-> pass (includes new OpenClaw extra-software E2E).config/scripts/e2e-teardown.sh-> passRequired
mise run test:allmise run vetmise run lintmise run fixmise run docs:check(if docs or user-facing behavior changed)Optional / When Relevant
mise run e2e:setup && mise run e2e:run(lifecycle/kind changes)mise run e2e:teardownormise run e2e:cleanupafter lifecycle testsEvidence
TestOpenClawExtraSoftwareInstallsClaude:openclaw pod ready: e2e-openclaw-mise-...claude binary found: /root/.local/share/mise/installs/claude/2.1.62/claudeTestOpenClawLifecycleStep8/Step10 now pass after model fixture + rollout checksum fixes.PASSok github.com/zackerydev/clawmachine/control-plane/e2e ...Checklist