setup: replace shell installers with a cross-platform TypeScript CLI - #25
Merged
Merged
Conversation
Nort1346
marked this pull request as ready for review
September 19, 2026 15:20
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.
Summary
Replaces the ~3,600-line
setup.sh/setup.ps1shell installers with a single cross-platform TypeScript CLI (cli/, published as thelode-setupbinary). The same interactive 15-step setup now runs on Linux, macOS, and Windows, built to standalone native binaries with Bun. The root setup scripts become thin bootstraps that download the prebuilt binary from the latest GitHub release. This PR also polishes the CLI's terminal UX: live progress spinners, warning-style callouts, clickable links with correctly-aligned borders, and the Lode title banner.Changes
cli/TypeScript +@clack/promptsapp - 15-step flow (prerequisites,.env, secrets, database, components, compose files, services, provider API keys, Lode) - replacessetup.sh/setup.ps1setup.sh/setup.ps1reduced to thin bootstraps that fetch the prebuiltlode-setup-<os>-<arch>[.exe]binary from the latest releasepulloutput parsed into a clean "image: stage" summary instead of a raw layer dump, admin-credential retrieval, single readiness spinner across Redis/qBittorrent/Prowlarr/Jellyfin/PostgreSQL)warningBox) for "Change this password" and "Required before first use"; clickable OSC 8 links in the Services summaryhyperlink()now emits BEL-terminated OSC 8 so clack's width math measures it at its visible width (keeps box borders aligned)cli/test/(core + steps), strict TypeScript, type-checked ESLint.github/workflows/cli.yml- install/typecheck/lint/test on push+PR, builds and publishes 6 platform binaries onv*tagsTesting
bun run lintpasses (run fromcli/)bun run typecheckpasses (run fromcli/)bun run testpasses - 9 test files / 36 tests:cli/test/constants.test.ts,cli/test/core/{banner,compose,env,secrets,state}.test.ts,cli/test/steps/{components,services,start-lode}.test.tsbun src/index.tsfromcli/and stepped through the flow - verified spinners, warning boxes, banner, and that the Services links are clickable with an aligned borderNotes for reviewers
cli/is a standalone Bun project (ownbun.lock,tsconfig, ESLint, Vitest); rootpnpmand root ESLint ignorecli/**. Verify withbuncommands fromcli/, notpnpm.lode-setup-<os>-<arch>[.exe]is load-bearing -setup.sh/setup.ps1resolve the release asset by that exact name, so renaming breaks both bootstraps.cli/.gitignoreignores generateddocker-compose*and.env*(written/downloaded at runtime).mainis required to test: this PR runs thecheckjob (typecheck/lint/test) on the branch.