Skip to content

feat(installer): add configuration-first TUI - #3706

Closed
tang-vu wants to merge 2 commits into
Osmantic:mainfrom
tang-vu:feat/installer-configuration-tui
Closed

tang-vu wants to merge 2 commits into
Osmantic:mainfrom
tang-vu:feat/installer-configuration-tui

Conversation

@tang-vu

@tang-vu tang-vu commented Sep 4, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • add an opt-in install.sh --tui configuration menu for Linux, WSL2, and macOS
  • expose runtime, tier, install directory, service profile, LAN, offline, bootstrap, and dry-run decisions before installation starts
  • compile the confirmed plan into the existing non-interactive installer flags, preserving one canonical execution path
  • prevent accidental execution when the plan is cancelled or --tui is mixed with CLI flags

Closes #2309.

Why this matters

Operators currently have to discover profiles and flags before they can review installer defaults. The new menu makes those choices visible up front, supports custom absolute install paths, and provides an explicit final receipt before any system-changing installer phase runs.

The behavioral invariant is: the menu may collect and translate configuration, but only the existing installer owns installation effects. Cancellation must never dispatch the installer.

Overlap check

Searched open and closed upstream PR titles/bodies for installer TUI configuration menu, reviewed the latest 1,000 open PRs and their changed production files, and inspected history for ods/install.sh. No open or closed PR covers this scope, no currently open PR changes this entrypoint, and its upstream history only contains the repository rename. Issue #2309 is the direct product request.

Test plan

  • bats installer-configuration-tui.bats - 4/4 passing against the public install.sh boundary
    • confirmed custom plans preserve tier, service choices, dry-run behavior, and a spaced custom install path
    • cancellation never invokes the installer target
    • ambiguous mixed TUI/CLI input exits with status 2
  • bash -n ods/install.sh
  • shellcheck --rcfile=/dev/null -e SC1090,SC1091,SC3003 ods/install.sh
  • git diff --check

Design and operational notes

  • Existing flag-based installs are unchanged; the TUI is strictly opt-in.
  • The menu uses Bash 3-compatible constructs for the macOS path and the shared dispatcher covers Linux and WSL2. Native Windows continues to use install.ps1, with an explicit error if a PowerShell target reaches this mode.
  • The full profile delegates to the existing --all contract. Other profiles emit explicit positive/negative service flags so the review receipt is deterministic.
  • Rollback is a single-entrypoint revert; no persisted configuration or migration is introduced.

Generated with Codex.

Batch compatibility

CI follow-up

CI integration-smoke exposed a SIGPIPE race in the first help implementation: the dispatcher wrote its TUI hint before install-core rendered the rest of help, so a short grep reader could close the pipe under pipefail. Follow-up commit 6650e11 buffers delegated help, preserves its status, and writes defensively. The added public-boundary regression reproduces the exact piped probe; 4/4 focused BATS tests, ShellCheck, and integration-test.sh (69 passed, 3 skipped) now pass, and the rerun of every required GitHub check is green.

@Lightheartdevs

Copy link
Copy Markdown
Collaborator

Thanks for this contribution. We're closing outside-contributor pull requests that have had no activity for 14 days or more, so the queue reflects work that can still land. This isn't a judgment on the change itself. If it's still needed, please rebase onto main and reopen it or open a focused PR. See #7253 for details and the contribution policy.

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.

TUI menu for the installer

2 participants