Repository navigation
Add oac uninstall - #726
Merged
Merged
Conversation
SaladDay
force-pushed
the
add-oac-uninstall
branch
2 times, most recently
from
October 15, 2026 12:51
899d9a7 to
abc31ac
Compare
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
oac uninstall(newservices/core/cmd/oac/uninstall.go, one dispatch line and usage text inmain.go). It takes the installation lock, reads the Compose project from.env, shows the project, data volume, directory and installation ID, and asks for the directory name oryes. It then runsdocker compose -p <project> down --volumes --remove-orphans(so no compose.yaml or cwd is needed), removes the directory, the lock and the Windows sidecar, and prints the installation ID with node and E2B follow-ups and thedocker image rmcommand (images are kept so a reinstall doesn't re-pull). A second run prints "Nothing is installed in ." and exits 0. A refused confirmation or a faileddownchanges nothing and keeps the directory so the command can be rerun.oac.execannot delete itself, so the command removes everything else and prints theRemove-Itemline for the rest. The logic is tested on Linux withkeep.Web port unavailablemessage names anoac-*Compose project that publishes the port and gives thedocker compose -p … down --volumes --remove-orphansrecovery (builds on Explain Docker and permission failures in the installer #720's message).execRunnergains aprojectfield that prepends-p.source_hashrefreshed): operations.md#uninstall rewritten around the command, with the manual fallback for a deleted directory, the lock path and the installation ID source;--rmi allis dropped; new "Single-host backup and restore" at the top of Back up; Upgrade step 2 links to it; the port troubleshooting row mentions the orphaned project.Why (audit-core finding 10, 11, section 4; probes-mx 3, 6, 7)
The manual uninstall left
core.lock, needed the cwd and files, stranded containers when the directory was deleted first, pointed to an installation ID the command had just deleted, and--rmi allremovedpostgres:16-alpineso a reinstall needed Docker Hub.Decisions
--yesflag and no--install-dir: no caller needs them (the command lives in the installation directory it removes).docker compose run --rm --no-deps -T --entrypoint cat core /run/oac/installation.id(the init image is distroless and has nocat). If that fails, the prompt says where to find the ID and uninstall still works.docker run … taron the already-pulledpostgres:16-alpine, anddocker compose up --no-startto create the volume on restore (a hand-made volume triggers Compose's "not created by Docker Compose" warning).Verification
go vet ./services/core/cmd/oac,go test ./services/core/cmd/oac: pass;GOOS=windows go vet: pass.yesremoves container, network, volume, directory and lock; installation ID printed; backup/restore recipe round trip preserves ownership and symlinks;catID read verified against the real core image with the real mount.node --test website/tests/translations.test.mjs(3/3, with vitepress borrowed from another worktree),python3 scripts/core-distribution-manifest.test.py BundledDocsTests,python3 scripts/check-names.py: pass.make check, Web checks (no Web change). Lane H's Log why a node cannot connect #717 did not touch operations.md; the installation ID source is Settings → Service and deployment → Installation details (verified inlocales/en/system.ts,navigation.ts).Need help on this PR? Tag
@codesmith-botwith what you need.