vm run: add -d/--detach + transparent tooling bootstrap
The mise tooling bootstrap was failing silently when --nat wasn't set: the VM came up, the user landed in ssh, and tools were missing with no obvious cause. Two coupled fixes: * `-d`/`--detach`: create + prep + bootstrap, exit without attaching to ssh. Reconnect later with `banger vm ssh <name>`. Rejects the ambiguous combos `-d --rm` and `-d -- <cmd>`. * NAT precondition: when the workspace has a .mise.toml or .tool-versions, vm run now refuses before VM creation if --nat isn't set. Error message points at --nat or --no-bootstrap. * `--no-bootstrap`: explicit opt-out for users who want a vanilla VM with their workspace and no tooling install. Detached bootstrap runs synchronously (foreground tee'd to the log file) so the CLI only returns once installs finish. Interactive mode keeps today's nohup'd background behaviour so the ssh session starts promptly. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
9b5cbed32d
commit
aaf49fc1b1
5 changed files with 394 additions and 13 deletions
15
README.md
15
README.md
|
|
@ -46,16 +46,21 @@ Disconnecting an interactive session leaves the VM running,
|
|||
banger vm run ./my-repo # copy /my-repo into /root/repo — drops into ssh
|
||||
banger vm run ./repo -- make test # workspace + run command, exits with its status
|
||||
banger vm run --rm -- script.sh # ephemeral: VM is deleted on exit
|
||||
banger vm run -d ./repo --nat # detached: prep + bootstrap, exit (no ssh attach)
|
||||
```
|
||||
|
||||
If a repository is passed, banger copies your repo's git-tracked files
|
||||
into `/root/repo` and runs a best-effort `mise` bootstrap from
|
||||
`.mise.toml` / `.tool-versions`. Untracked files are skipped by
|
||||
default — pass `--include-untracked` to ship them too, or
|
||||
`--dry-run` to preview the file list.
|
||||
into `/root/repo` and runs a `mise` bootstrap from `.mise.toml` /
|
||||
`.tool-versions` if either is present. The bootstrap reaches the
|
||||
public internet, so workspaces with mise manifests require `--nat`;
|
||||
pass `--no-bootstrap` to skip the install entirely. Untracked files
|
||||
are skipped by default — pass `--include-untracked` to ship them
|
||||
too, or `--dry-run` to preview the file list.
|
||||
|
||||
In **command mode** (`-- <cmd>`), the exit code propagates through
|
||||
`banger`.
|
||||
`banger`. In **detached mode** (`-d`), banger creates the VM, runs
|
||||
workspace prep + bootstrap synchronously, then exits — no ssh
|
||||
attach. Reconnect later with `banger vm ssh <name>`.
|
||||
|
||||
### Other VM verbs
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue