One-Command Deployment¶
After an environment is initialized and planned, liveks up is the single command that previews, confirms, provisions, deploys, and verifies the accelerator.
Prerequisites¶
| Tool or access | Requirement |
|---|---|
| Python | 3.11 or newer |
| Azure Developer CLI | 1.27.0 or newer |
| Azure CLI | Installed and signed into the target subscription |
| Node.js | 22 or newer, with npm |
| Azure | Permission to create the profile's resources |
| Fabric BYO | Existing workspace and ontology access |
| Fabric full | F2 quota, capacity permission, and supported tenant settings |
Run ./liveks doctor --env <environment> before planning. It checks versions, both authentication contexts, configured tenant/subscription alignment, provider registration, and profile requirements.
Initialize¶
./liveks init --profile mcp-only --env liveks-mcp
./liveks init --profile byo-fabric --env liveks-byo
./liveks init --profile full --env liveks-full
Each command writes .liveks/<environment>.yaml. Add overrides there and keep the file untracked. See Configuration.
Plan¶
The plan compiles Bicep, dry-runs Search payload generation, builds the Static Web Apps frontend/API bundle, reports expected resources and cost, and writes a redacted lock. It performs no cloud mutation.
Up¶
Execution order:
- repeat the complete plan,
- select or create the named
azdenvironment, - project resolved non-secret YAML values into
azd env, - run
azd provision --preview, - require exact confirmation,
- preprovision generated Fabric assets for
full, - run
azd up, including cross-platform Python hooks, - verify the app and retrieve evidence,
- write a redacted lifecycle lock and ignored reports.
Automation can use --yes. Full mode still requires the separate cost acknowledgement:
Profile Behavior¶
| Profile | Azure resources | Fabric behavior |
|---|---|---|
mcp-only |
Search, OpenAI, Storage, app, MCP KS, MCP-only KB, sample index | Skipped |
byo-fabric |
Same Azure assets plus Fabric KS, Fabric-only KB, and combined KB | Existing workspace/ontology reused |
full |
Same Azure assets plus generated Fabric KS, Fabric-only KB, and combined KB | F2 capacity, workspace, Lakehouse, ontology, and GraphModel created |
The Search managed identity receives Azure OpenAI access for answer synthesis. The default frontend is Azure Static Web Apps with a managed Node.js API, which keeps Search and OpenAI credentials out of browser code.
Fabric Full Details¶
Full mode creates the Fabric stack before azd up so long Lakehouse and GraphModel readiness work does not run inside the Azure postprovision timeout. Generated IDs are projected into the selected azd environment, then postprovision creates the Fabric Ontology KS, Fabric-only KB, and combined KB.
Each fresh run clears stale generated IDs, resolves the assets created for the environment by name, and waits through the initial OneLake metadata propagation window. During Azure deployment, Bicep consumes the preprovisioned capacity as an existing asset; the YAML ledger remains fabric.mode: create so cleanup ownership stays explicit.
The profile defaults to:
Change fabric.location only after confirming quota. Full mode rejects existing workspace and ontology IDs to keep creation and cleanup ownership unambiguous.
Verify¶
up verifies automatically. Rerun without provisioning:
The verifier checks:
- resource group existence,
- app status endpoint,
- live MCP retrieve evidence,
- live Fabric and combined evidence for Fabric profiles,
- response source types rather than final answer text alone.
The single-source KB checks prove the MCP and Fabric paths independently. The combined KB planner may select one or both attached sources for a query, so verification records the recognized live source types instead of requiring both on every call.
Reports under deployments/<environment>/ are ignored and must remain private unless sanitized.
Verify Through The Demo App¶
up and verify provide automated evidence. Also test the interface that a workshop participant will use:
- Open the App URL in
deployments/<environment>/deployment-summary.md. - Select Deployment and then Re-check to confirm live Search reachability.
- Select MCP Live and then Run retrieve. Require a
livebadge and MCP activity or references. - For a Fabric profile, select Fabric, enter a raw delegated Search token, and run retrieve. Require a
livebadge and Fabric evidence. - Select Combined Trace only after the single-source paths pass, then describe the planner selection visible in activity and references.
The answer text is not the acceptance criterion. An offline fixture can return the same useful answer, so require a live response mode plus the expected source trace.
Continue with Guided Live Demo Walkthrough for every click and presenter cue, or Post-Deployment Tests for additional queries and expected trace fields.
Demo App¶
The build has two hosting contexts:
- GitHub Pages: canonical offline replay only, labeled
offline-replay. - Azure Static Web Apps: managed API first, with canonical replay used when a source is intentionally unavailable.
The same response fixtures drive CLI replay, Pages, and API fallback. The managed API uses Node.js 22 and keeps Search admin keys server-side.
Down¶
Cleanup order:
- select the exact named
azdenvironment, - compare resolved ownership with the redacted lock,
- delete Fabric only when both identify it as generated,
- run
azd down --purge --force, - verify the generated deployment resource group is absent,
- when this run created a Fabric capacity, verify its dedicated resource group is absent and the matching ARM capacity count is zero.
For byo-fabric, Fabric cleanup is always skipped. For full, a Fabric cleanup failure is reported as partial but Azure cleanup continues.
Successful down --format json output contains these checks:
| Check | Applies to | Required result |
|---|---|---|
resource-group-absent |
Every live profile | pass |
fabric-capacity-resource-group-absent |
full when the run created capacity |
pass |
fabric-capacity-absent |
full when the run created capacity |
pass |
For an independent Azure CLI confirmation, take the generated names from the ignored Fabric summary and expect false, false, and 0:
az group exists --name <deployment-resource-group>
az group exists --name <fabric-capacity-resource-group>
az resource list \
--resource-type Microsoft.Fabric/capacities \
--query "length([?name=='<fabric-capacity-name>'])" \
--output tsv
Do not apply the Fabric absence checks to byo-fabric: preserving its existing capacity, workspace, and ontology is the required result.
Full Lifecycle Evidence¶
Full mode:
Choose exactly one of --cleanup or --keep-resources. Use the latter only for active debugging with an assigned cleanup owner.
The lifecycle writes ignored deployments/<environment>/e2e-report.json and test-report.md files for machine inspection and the existing maintainer evidence workflow.
Residual Fabric Capacity¶
If full cleanup reports a residual capacity:
- inspect
deployments/<environment>/fabric-summary.json, - confirm the capacity was created by this exact environment,
- list every resource in its Azure resource group,
- confirm no shared workspace is assigned in Fabric,
- delete only the generated capacity or its dedicated empty resource group.
az resource list --resource-group <fabric-capacity-resource-group> -o table
az group delete --name <fabric-capacity-resource-group> --yes --no-wait
Do not delete a group that contains non-sample resources, a BYO capacity, or an asset whose ownership cannot be proven. Inspect both Azure and the Fabric admin portal before manual cleanup.
Direct azd Compatibility¶
Direct azd up remains available for template users after prerequisites are installed. Cross-platform Python hooks supply safe MCP-only defaults, configure postprovision assets, and deploy the managed API. It does not provide the YAML plan, ownership lock, explicit full-capacity acknowledgement, or integrated verification of the LiveKS path, so the documented workflow is liveks up.
The old shell wrappers remain compatibility shims and delegate to LiveKS. New scripts should call ./liveks or ./liveks.ps1 directly.