Skip to content

feat(control-plane): add extra software step with mise-based runtime installs#2

Open
zackerydev wants to merge 3 commits intomainfrom
codex/extra-software-step3-mise
Open

feat(control-plane): add extra software step with mise-based runtime installs#2
zackerydev wants to merge 3 commits intomainfrom
codex/extra-software-step3-mise

Conversation

@zackerydev
Copy link
Owner

@zackerydev zackerydev commented Feb 28, 2026

What

Add a third install-wizard step for "Extra Software" that accepts raw .tool-versions, installs mise in OpenClaw/IronClaw/PicoClaw images, and runs startup mise 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.go
  • control-plane/templates/pages/bot-form-infra.html
  • control-plane/templates/pages/bot-form-config.html
  • control-plane/templates/pages/bot-form-software.html
  • control-plane/charts/{openclaw,ironclaw,picoclaw}/values.yaml
  • control-plane/charts/{openclaw,ironclaw,picoclaw}/templates/startup-configmap.yaml
  • control-plane/charts/openclaw/templates/deployment.yaml (rollout checksums)
  • control-plane/charts/picoclaw/templates/deployment.yaml (startup wiring)
  • docker/{openclaw,ironclaw,picoclaw}/Dockerfile
  • control-plane/e2e/openclaw_extra_software_test.go
  • control-plane/e2e/openclaw_lifecycle_test.go
  • docs updates in docs/content/docs/* and docs/content/tutorials/*

How To Validate

  • mise run test:all -> pass
  • mise run vet -> pass
  • mise run lint -> pass
  • mise run fix -> pass
  • mise run docs:check -> pass
  • source ~/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 -> pass

Required

  • mise run test:all
  • mise run vet
  • mise run lint
  • mise run fix
  • mise 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:teardown or mise run e2e:cleanup after lifecycle tests

Evidence

  • TestOpenClawExtraSoftwareInstallsClaude:
    • openclaw pod ready: e2e-openclaw-mise-...
    • claude binary found: /root/.local/share/mise/installs/claude/2.1.62/claude
  • TestOpenClawLifecycle Step8/Step10 now pass after model fixture + rollout checksum fixes.
  • Final lifecycle run:
    • PASS
    • ok github.com/zackerydev/clawmachine/control-plane/e2e ...

Checklist

  • Tests added/updated
  • Routes/CLI/docs updated together when contract changed
  • No stale terminology introduced
  • Local validation run (not just compile)

Copilot AI review requested due to automatic review settings February 28, 2026 00:54
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

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/software wizard step + UI template, route, handler logic, and unit tests.
  • Add extraSoftware.toolVersions Helm values and startup-script logic to write .tool-versions and run mise install.
  • Install mise in 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.

@zackerydev
Copy link
Owner Author

Addressed Copilot review feedback in latest push (6f1672e).

  • Replaced mise.run | sh installs in OpenClaw/IronClaw/PicoClaw Dockerfiles with pinned GitHub release tarball downloads and SHA256 verification before install.
  • Added startupProbe support to PicoClaw deployment and default startup probe settings in chart values to tolerate startup-time mise install.
  • Updated NewSoftwarePage doc comment to match current validation behavior.
  • Heredoc/terminator concerns in startup scripts were already corrected in earlier commits and verified in e2e runs.

Validation re-run after these changes:

  • mise run charts
  • mise run test
  • mise run lint
  • mise run vet
  • mise run docs:check
  • Full mise exec -- .config/scripts/e2e-run.sh (including TestOpenClawExtraSoftwareInstallsClaude)

@zackerydev
Copy link
Owner Author

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
ok github.com/zackerydev/clawmachine/control-plane/cmd/clawmachine 3.425s
ok github.com/zackerydev/clawmachine/control-plane/internal 2.229s
ok github.com/zackerydev/clawmachine/control-plane/internal/botenv (cached)
ok github.com/zackerydev/clawmachine/control-plane/internal/handler 4.566s
ok github.com/zackerydev/clawmachine/control-plane/internal/middleware (cached)
ok github.com/zackerydev/clawmachine/control-plane/internal/onboarding (cached)
ok github.com/zackerydev/clawmachine/control-plane/internal/service 5.651s
ok github.com/zackerydev/clawmachine/control-plane/internal/sync (cached)
ok github.com/zackerydev/clawmachine/control-plane/internal/version (cached)\n- ✓ Charts packaged
0 issues.\n- ✓ Charts packaged\n- Start building sites …
hugo v0.156.0-9d914726dee87b0e8e3d7890d660221bde372eec darwin/arm64 BuildDate=2026-02-18T16:39:55Z VendorInfo=gohugoio

              │ EN 

──────────────────┼────
Pages │ 30
Paginator pages │ 0
Non-page files │ 0
Static files │ 16
Processed images │ 0
Aliases │ 0
Cleaned │ 0

Total in 417 ms\n- Full 🔨 Building ClawMachine...
Switched to context "kind-claw-machine".
🚀 Starting ClawMachine API server on :9080 (pointing at kind-claw-machine)...
⏳ Waiting for server...


/ | | / \ \ / /| / | | | ()
| | | | / _ \ \ /\ / / | \ / | __ _ | | _ _ __ ___
| | | | / ___ \ V V / | |/| |/ ` |/ | ' | | ' \ / _
| |
| |
/ / \ _/_/ | | | | (| | (| | | | | | | | /
_|
/ _
/ || ||_,|_|| |||| |_|__|

Kubernetes-native bot vending machine vdev

Starting ClawMachine server on port 9080...
ClawMachine is running at http://localhost:9080
✅ Server ready
❌ Credentials file not found: /Users/zackery/1password-credentials.json
Set OP_CREDENTIALS_FILE in .env or create ~/1password-credentials.json (including )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants