Skip to content

feat: one-line installer + interactive d365fo init wizard - #136

Merged
dynamics365ninja merged 1 commit into
mainfrom
feat/one-line-installer
Aug 5, 2026
Merged

feat: one-line installer + interactive d365fo init wizard#136
dynamics365ninja merged 1 commit into
mainfrom
feat/one-line-installer

Conversation

@dynamics365ninja

Copy link
Copy Markdown
Owner

What

  • install.ps1 / install.sh at the repo root: check for the .NET SDK, clone-or-update the repo, dotnet publish a self-contained d365fo binary onto PATH, then hand off to d365fo init and d365fo doctor. Safe to re-run.
  • d365fo init gains an interactive wizard: invoked bare in a real terminal (TTY, no --output, no --dry-run, no explicit --packages) it confirms the detected PackagesLocalDirectory (or asks for one), an optional UDE extra root, label languages, and whether to build the index now — then writes the same config the flag-driven path would. Any explicit flag, non-TTY, or the new --no-wizard skips straight to the existing behavior, so CI/scripted d365fo init --packages ... --persist-profile calls are unaffected.
  • New --label-languages and --no-wizard options on InitCommand.

Why

Today's only install path is git clone + dotnet build, then a hand-run d365fo init --packages ... --persist-profile. This closes that gap with a single piped command, mirroring the ergonomics of upstream d365fo-mcp-server's own setup wizard but adapted to this repo's actual distribution story (git-clone-and-publish, not npm/NuGet — there is no package registry yet).

Docs

README/SETUP/CONFIGURATION/EXAMPLES/TROUBLESHOOTING updated to lead with the one-line install, with the existing manual steps kept as a documented fallback (<details> in README, "Prefer to run the steps yourself") for anyone who doesn't want to pipe a remote script.

Scope note

This branch is deliberately installer-only. A separate, unrelated architecture-doc/diagram drift audit (stale tool counts, missing HTTP-transport/journal/undo/connect sections) is in #135 — kept apart so each PR reviews cleanly on its own.

Test plan

  • pwsh -File install.ps1 on a clean machine / fresh checkout — verify SDK check, publish, and d365fo init handoff
  • bash install.sh on macOS/Linux — verify read/search/scaffold path only, no build/sync/test/bp claims
  • d365fo init bare in an interactive terminal — wizard prompts appear, writes settings.json + $PROFILE
  • d365fo init --packages ... --persist-profile (flag-driven) and d365fo init --output json (piped/non-TTY) — wizard does NOT trigger, existing behavior unchanged
  • d365fo init --no-wizard in a terminal — flag-driven path forced even with a TTY

🤖 Generated with Claude Code

install.ps1 / install.sh check for the .NET SDK, clone or update the
repo, publish a self-contained d365fo binary onto PATH, and hand off to
d365fo init. Env vars (D365FO_CLI_DIR, D365FO_CLI_YES,
D365FO_CLI_NO_WIZARD, D365FO_CLI_RUN_EXTRACT) configure the non-flag
piped install since the script runs through iex/bash.

d365fo init now runs an interactive wizard when invoked bare in a real
terminal (TTY, no --output, no --dry-run, no explicit --packages) —
confirms the detected PackagesLocalDirectory or asks for one, an
optional UDE extra root, label languages, and whether to build the
index now. Any explicit flag, non-TTY, or --no-wizard skips straight to
the existing flag-driven path, so CI/scripted usage is unaffected.

README/SETUP/CONFIGURATION/EXAMPLES/TROUBLESHOOTING updated to lead
with the one-line install path, with the manual steps kept as a
fallback for anyone who doesn't want to pipe a remote script.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@dynamics365ninja
dynamics365ninja merged commit faea3f5 into main Aug 5, 2026
4 checks passed
@dynamics365ninja
dynamics365ninja deleted the feat/one-line-installer branch August 5, 2026 07:55
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