feat: guest definitions as data - #48
Merged
Merged
Conversation
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
…ases apply Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
Signed-off-by: NovusEdge <novusedge0@gmail.com>
|
Warning Review limit reachedNext included review available in 59 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Team Run ID: 📒 Files selected for processing (64)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
2 tasks done
This was referenced Sep 4, 2026
Merged
NovusEdge
added a commit
that referenced
this pull request
Sep 5, 2026
PR #48 merged install-alpine.sh into install.sh and dropped its setup-xorg-base call. Alpine's xfce4 metapackage does not depend on xorg-server or xinit, so tty1 looped on 'startx: not found' and the e2e libinput assert failed. Signed-off-by: NovusEdge <novusedge0@gmail.com>
NovusEdge
added a commit
that referenced
this pull request
Sep 5, 2026
PR #48 merged install-alpine.sh into install.sh and dropped its setup-xorg-base call. Alpine's xfce4 metapackage does not depend on xorg-server or xinit, so tty1 looped on 'startx: not found' and the e2e libinput assert failed. Signed-off-by: NovusEdge <novusedge0@gmail.com>
NovusEdge
added a commit
that referenced
this pull request
Sep 5, 2026
* test(config): pin vm encoder contract Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(recipes): pin schema 3 manifest contract Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(guest): pin command verb preludes Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(config): pin recipe state storage Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(recipes): pin manifest ordering Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(config): pin secrets file contract Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(guest): forward python command args Signed-off-by: NovusEdge <novusedge0@gmail.com> * refactor(config): encode vm.toml with go-toml/v2 Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(recipes): parse schema 3 params and health Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(guest): add download and useradd verbs Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(config): mark toml encoder dependency direct Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(config): store recipe params and applied state Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(config): store recipe secrets securely Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(recipes): pin v3 boundary validation Cover explicit schema compatibility, schema-2 v3 blocks, and health timeout presence. Assert SaveSecrets preserves an empty recipe entry in its caller-owned map. Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(recipes): validate schema and health bounds Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(recipes): pin v3 chunk two contract Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(recipes): resolve params and hash them Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cli): isolate recipe parameter fixture Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(cli): persist recipe parameter edits Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(sshx): deliver recipe params and outputs Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(cloud): deliver recipe params and secrets Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(core): run recipe health checks after apply Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(recipe): close chunk two review boundaries Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cloudinit): inherit xorriso umask Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(recipe): close chunk two contract gaps Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(recipe): cover contract v3 callers Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(tui): exercise recipe parameter lifecycle Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(cli): add wait healthy mode Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cli): assert decoded secret redaction Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(cli): expose recipe show contract Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(status): expose redacted recipe state Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cli): cover apply stream redaction Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cloudinit): cover namespace collision Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(contract): correct defaults and e2e redaction Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(cli): close apply log redaction gaps Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(tui): add recipe parameter form Signed-off-by: NovusEdge <novusedge0@gmail.com> * feat(recipes): ship schema samples and bundled contracts Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(contract): close chunk three review gaps Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cli): correct source-boundary redaction case Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(contract): close reviewed chunk gaps Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(contract): finish reviewed caller gaps Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(contract): close health and cloudinit review gaps Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cloudinit): cover multiline Debian prelude Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(core): retain single health timeout detail Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(cloudinit): parse setup command YAML Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(contract): preserve live prelude and health detail Signed-off-by: NovusEdge <novusedge0@gmail.com> * test(sshx): model ssh argv joining in the fake Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(sshx): quote the output read-back for ssh Signed-off-by: NovusEdge <novusedge0@gmail.com> * fix(recipes): restore the X server on Alpine xfce PR #48 merged install-alpine.sh into install.sh and dropped its setup-xorg-base call. Alpine's xfce4 metapackage does not depend on xorg-server or xinit, so tty1 looped on 'startx: not found' and the e2e libinput assert failed. Signed-off-by: NovusEdge <novusedge0@gmail.com> --------- Signed-off-by: NovusEdge <novusedge0@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changed
Guest OS facts move from a Go literal to
internal/guest/bundled/<name>.toml, with~/.stoat/guests/*.tomlmerged over them per field.internal/tomlxis the one TOML decoder (path in every error, unknown keys, schema bound);vm.tomlwarns on an unknown key andrecipe.tomlrejects one.Recipe scripts now get a rendered prelude over ssh and in the cloud-init seed:
stoat_pkg_setup,stoat_pkg_install,stoat_svc_*,STOAT_OS,STOAT_INIT,STOAT_PKGMGR.escalatecomes from the guest file instead of a hardcodedsudo. The capability table, the runtime package table and the scaffold text are gone from Go.stoat guest lsandstoat guest show <name>expose the set, with--json. A non-emptyosnaming no loaded guest marks the VM broken instead of silently defaulting.provisionis a kong alias ofapply.xfceinstalls through the verbs.Why
Adding a guest OS is a file. Three per-OS tables that could drift apart are now one.
Tests run
just checkandjust testjust e2e: NOT RUN. No KVM in the environment this was built in.OS matrix
alpine, ubuntu, debian, fedora, arch: the bundled files are golden-tested against the deleted Go literal, and each prelude is a golden checked with
sh -n. No live boot on any of them.Docs
Before merge
xfce's install script was rewritten onto the verbs, so this wants a live boot. Runjust e2eon a host with KVM.