From power-platform
Design end-to-end ALM pipelines for Power Platform solutions — pac CLI primitives, Azure DevOps multi-stage pipelines, source-control unpacked solutions, env-var + connection-reference promotion across DEV → TEST → UAT → PROD, managed-vs-unmanaged discipline. Used by `solution-alm-engineer` (primary).
How this skill is triggered — by the user, by Claude, or both
Slash command
/power-platform:alm-pipeline-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Purpose:** Give the `solution-alm-engineer` a senior maker's playbook for designing — or fixing — end-to-end ALM for Power Platform solutions. Optimised for greenfield ALM at engagement start, and for diagnosing a specific stage that is failing in a running pipeline.
Purpose: Give the solution-alm-engineer a senior maker's playbook for designing — or fixing — end-to-end ALM for Power Platform solutions. Optimised for greenfield ALM at engagement start, and for diagnosing a specific stage that is failing in a running pipeline.
If you are building a flow or canvas app, this is not the right skill — finish the build, then come back here for packaging.
pac solution unpack produces a reviewable, diff-able directory; that is what goes in git. The .zip is build output. (House rule §3 #12.)@Microsoft.KeyVault(...).flowchart TD
A[New ALM pipeline?] --> B{How many envs?<br/>How much ADO maturity?}
B -->|2–3 envs, low ADO maturity| C[Power Platform Deployment Pipelines]
B -->|4+ envs OR need approvals,<br/>gated tests, custom build steps| D[Custom Azure DevOps Pipelines]
B -->|Need Power BI in same pipeline,<br/>or non-PP artifacts| D
C --> E{Service principal<br/>configured?}
D --> F{pac CLI installed<br/>on agent?}
E -->|No| G[Set up app user per env first]
E -->|Yes| H[Configure stages + deployment settings file]
F -->|No| I[Add Power Platform Build Tools<br/>or install pac via PowerShell task]
F -->|Yes| J[Multi-stage YAML:<br/>lint → build → import-to-build env<br/>→ checkin-managed → deploy w/ approvals]
H --> K[Promote with deploymentSettings.json<br/>per stage for env vars + conn refs]
J --> K
Rule of thumb: Deployment Pipelines if you can; Custom ADO when you can't. Deployment Pipelines is faster to stand up and has fewer moving parts. Custom ADO is what you need once you have approval gates, automated tests, Power BI in the same release, multiple solutions promoting together, or anything else that does not fit the linear DEV → TEST → PROD shape.
pac solution clone --name <SolutionName> to bootstrap from an existing dev env, then commit the unpacked tree..gitignore must exclude: bin/, obj/, *.zip, *.user, node_modules/, generated thumbnails.solution.xml, customizations.xml, per-component folders (Entities, Workflows, CanvasApps, WebResources, AppModules, etc.). All of it is text-ish and diff-able. Reviewers should read flow definition.json diffs, canvas *.fx.yaml diffs, and entity ribbon XML diffs — those are where bugs hide.pac CLI primitives every pipeline uses| Command | Purpose |
|---|---|
pac solution clone | First time only — pull existing solution + unpack |
pac solution sync | Re-pull updates from the source env into the existing local unpacked tree |
pac solution unpack | Convert a .zip into the source-controllable tree |
pac solution pack | Convert the unpacked tree back into a .zip for import |
pac solution import | Import a .zip into a target env (with deployment settings) |
pac solution check | Static analysis — run in BUILD and fail the pipeline on critical findings |
pac solution online-version | Inspect what's currently installed in a target env |
Five stages, each a separate ADO stage with its own gates:
pac solution check on the unpacked tree. Fail on Critical/High findings.pac solution pack --packagetype Unmanaged → import into the dedicated BUILD env → export as Managed → publish artifact.deploymentSettings-test.json (env vars + connection refs for TEST).See resources/ado-pipeline-yaml-skeleton.md for a working YAML example.
deploymentSettings-<env>.json is the right surface. Generated by pac solution create-settings against the source solution, then customized per env. Stored in the repo (env-var values per env, not secrets — secrets are Key Vault references that resolve at runtime). One file per target env; the pipeline picks the right one based on stage variables.
Connection references are placeholders for connection objects that live per-env, per-user-or-SPN. On first deploy to a new env, the consumer (or the deployment SPN) must create the underlying connections and rebind. The deploymentSettings-<env>.json connection-reference section pre-binds them when the connections exist. If the import fails on "connection reference not bound," the SPN does not yet have a connection for that connector in that env — create one and re-import.
When customers diverge from a shipped base solution, do not customize the base in place. Build a thin customization solution that depends on the base. Base ships unchanged across all customers; customization is per-customer and gets its own ALM pipeline. The customer's PROD has both solutions installed, with the customization solution above the base in the solution layer stack.
Rule: hotfixes patch; quarterly releases upgrade.
Before declaring a release done, import the produced managed .zip into a clean, throwaway sandbox env. If it fails there, it will fail at the customer too — and the cost of finding it now is hours, not weeks.
deploymentSettings-*.jsonpac solution check because it's slowpower-platform-admin + dlp-policy-design skill.flow-engineer + power-automate skill.dataverse-architect + dataverse-plugins skill.power-bi-engineer + power-bi skill.ravenclaude-core security-reviewer.When in doubt, bounce back to the Team Lead with the failing stage + the last 50 lines of the pipeline log + the import-result XML if any. Don't guess.
npx claudepluginhub mcorbett51090/ravenclaude --plugin power-platformGuides completion of development work by verifying tests, detecting environment, and presenting structured options for merge, PR, or cleanup.
Enforces test-driven development: write failing test first, then minimal code to pass. Use when implementing features or bugfixes.
Guides creation and editing of skills using test-driven development with pressure scenarios and subagents to verify agent compliance.