Skip to content

🎨 Made the piped launcher install a production site by default, as Ghost-CLI does - #384

Merged
acburdine merged 2 commits into
next-dockerfrom
claude/ghost-install-script-verbose-7c0a6c
Oct 9, 2026
Merged

acburdine merged 2 commits into
next-dockerfrom
claude/ghost-install-script-verbose-7c0a6c

Conversation

@acburdine

@acburdine acburdine commented Oct 9, 2026 •

Copy link
Copy Markdown
Member

curl -fsSL https://docker.ghost.org/install.sh | bash -s -- install --local names install twice. Two changes shorten the first run to match Ghost-CLI, where ghost install is production and ghost install local is local:

curl -fsSL https://docker.ghost.org/install.sh | bash                          # production; asks for the domain
curl -fsSL https://docker.ghost.org/install.sh | bash -s -- --domain example.com
curl -fsSL https://docker.ghost.org/install.sh | bash -s -- --local

Piped with no command, the launcher runs install

Renaming install.sh was considered and rejected: -s -- is bash's syntax for a piped script's arguments, so no filename removes it.

  • Only when the script is read from a pipe and no command word was given. Options keep their order after the inserted install; the --import bundle is still resolved and mounted.
  • Explicit commands are unchanged: bash -s -- install … and bash -s -- self-update still work. A site's own ./ghost-docker never gets a default.
  • The served-launcher CI check for the newest beta now pipes without a command, so the default is exercised against the published install.sh; the --release check still names install.

install is production unless --local

  • The "What kind of site?" question is gone; at a terminal only the domain is asked for.
  • Without a terminal, or with --no-prompt, a missing --domain is a usage error that also names --local: a production site needs --domain example.com; for a local site, use --local.
  • Imports are unaffected: the bundle still decides the mode.

Docs, README and docker.ghost.org drop install from the curl examples and describe production as the default.

Testing

  • Manager: format, lint, typecheck and pnpm test (504 tests) pass; install tests updated for the domain-only question and the new usage error.
  • tests/e2e/launcher.sh fake-Docker half passes on bash 3.2 and 5, including the new step (piped, no command, --channel + --import → install …, bundle mounted; from a file → no command added).
  • shellcheck and shfmt clean.
  • Locally, the real-Docker half failed at "The image, as a published one would be used" (doctor's writable probe, ENOENT under macOS's temp dir on OrbStack). That run names its command from a file, so this change doesn't reach it; left to CI.

🤖 Generated with Claude Code

@coderabbitai

coderabbitai Bot commented Oct 9, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Organization UI
  • Review profile: CHILL
  • Plan: Essentials
  • Run ID: 620ffa3c-9602-4dfc-abb7-edea013e0b7a

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@acburdine acburdine changed the title 🎨 Made the piped launcher install when no command is given 🎨 Made the piped launcher install a production site by default, as Ghost-CLI does Oct 9, 2026
The install command repeated itself: `curl .../install.sh | bash -s --
install --local` names install twice. Piped from curl, the launcher has
no site of its own, so install is the only thing a first run does; the
command word can default to it. Renaming install.sh would not help, as
`-s --` is bash's syntax for a piped script's arguments, not ours.

The default applies only when the script is read from a pipe and no
command word was given. A site's own ./ghost-docker never gets one, and
piped commands named explicitly, such as self-update, are unchanged.

- ghost-docker: find whether the script is piped before choosing the
  command, and prepend install, keeping the --import bundle's index.
- tests/e2e/launcher.sh: a piped run with no command installs and still
  mounts its bundle; a run from a file is not given a command.
- .github/workflows/launcher.yml: the newest-beta check pipes with no
  command, so the default is exercised against the served launcher.
- README.md, docs/install.md, docs/architecture.md, pages/index.html:
  drop install from the curl examples and describe the default.
With the piped launcher defaulting to install, a bare `curl ... | bash`
asked which kind of site before anything else. Ghost-CLI's `ghost
install` is production unless `ghost install local` says otherwise, and
people moving from it expect the same. A production site still needs a
domain, so a terminal is asked only for that; without one, or with
--no-prompt, the missing --domain is a usage error that also names
--local.

- manager/src/commands/install.ts: production unless --local; drop the
  mode question and keep the domain one.
- manager/test/install.test.ts: only the domain is asked for, and the
  usage error names --domain and --local.
- docs/install.md: production is the default; describe the domain
  question and --domain's default.
@acburdine
acburdine force-pushed the claude/ghost-install-script-verbose-7c0a6c branch from 5e56347 to 32c575f Compare October 9, 2026 22:28
@acburdine
acburdine merged commit e225a20 into next-docker Oct 9, 2026
14 checks passed
@acburdine
acburdine deleted the claude/ghost-install-script-verbose-7c0a6c branch October 9, 2026 22:40
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.

1 participant