deploy-pipeline
Triggers a Power Platform Pipeline deployment run for a Power Pages solution. Selects a target stage, validates the package, optionally configures deployment settings (environment variables, connection references), then deploys and polls for completion
Install / Use
npx skills add microsoft/power-platform-skills --skill deploy-pipelineInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
AutomationSupported Platforms
Tags
Our assessment of deploy-pipeline
deploy-pipeline scores 85/100 on our quality scale, 1957th of 2,892 Automation skills we index.
Its SKILL.md is 105 KB long, well organised into 18 sections with 37 code examples: long enough that it reads more like full documentation than a focused instruction file, which agents can find harder to follow.
It has 919 GitHub stars, a meaningful sign that others use it.
Maintenance, license and trust
- The repository was last updated 12 days ago, so deploy-pipeline is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
deploy-pipeline compared with similar skills
All 4 of these similar skills score higher than deploy-pipeline; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| deploy-pipeline (this skill)by microsoft | 85 | 919 | 12d ago | SKILL.md |
| Agent-Reachby Panniantong | 100 | 92.4k | 21d ago | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 85.9k | today | MCP Server |
| rufloby ruvnet | 100 | 74.0k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 14d ago | SKILL.md |
Frequently asked questions
- How do I install deploy-pipeline?
- Run
npx skills add microsoft/power-platform-skills --skill deploy-pipeline. The install tabs above show the steps for each supported agent. - Which AI agents does deploy-pipeline work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is deploy-pipeline safe to use?
- It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is deploy-pipeline still maintained?
- The repository was last updated 12 days ago, so deploy-pipeline is actively maintained.
Skill content
View source on GitHubname: deploy-pipeline description: >- Triggers a Power Platform Pipeline deployment run for a Power Pages solution. Selects a target stage, validates the package, optionally configures deployment settings (environment variables, connection references), then deploys and polls for completion. Use when asked to: "deploy pipeline", "run pipeline", "trigger deployment", "deploy to staging", "deploy to production", "run power platform pipeline", "deploy solution via pipeline", "promote solution", "push to staging", "push to production". user-invocable: true argument-hint: "Optional: stage name or environment label (e.g. 'staging', 'production') to skip stage selection" allowed-tools: Read, Write, Edit, Bash, Glob, Grep, TaskCreate, TaskUpdate, TaskList, AskUserQuestion, mcp__plugin_power-pages_microsoft-learn__microsoft_docs_search, mcp__plugin_power-pages_microsoft-learn__microsoft_docs_fetch model: opus
Plugin check: Run
node "${PLUGIN_ROOT}/scripts/check-version.js"— if it outputs a message, show it to the user before proceeding.
deploy-pipeline
Triggers a Power Platform Pipeline deployment run. Reads the existing pipeline configuration from docs/alm/last-pipeline.json, selects a target stage, validates the solution package, and deploys it to the target environment.
Prerequisite: Run
/power-pages:setup-pipelinefirst to create the pipeline configuration.
Refer to
${PLUGIN_ROOT}/references/cicd-pipeline-patterns.mdfor all HAR-confirmed API patterns used in this skill.
Prerequisites
Important: The source (dev) environment must have a Power Platform Pipelines host environment configured. This is set in Power Platform Admin Center (Environments → select env → Pipelines) or via the tenant-level
DefaultCustomPipelinesHostEnvForTenantsetting. Without this configuration,pac pipeline deploywill fail. Thesetup-pipelineskill creates the pipeline definition in the host; this admin step connects the dev environment to that host.
docs/alm/last-pipeline.jsonexists (created bysetup-pipeline).solution-manifest.jsonexists- Azure CLI logged in (
az account showsucceeds) - PAC CLI logged in (
pac env whosucceeds)
Phases
Phase 0 — ALM plan gate
plan-almis the front door. When the user expresses an ALM intent (promote / ship / deploy / move to staging / push to prod / release this version), the orchestrator (/power-pages:plan-alm) should run first. Direct invocation ofdeploy-pipelinebypasses the orchestrator's pre-plan completeness check, env-var resolution per stage, activation steps, and validation runs. This gate makes that bypass explicit.
Skip rule. If this skill was invoked as part of an active plan-alm orchestration, skip Phase 0 entirely and proceed to Phase 1. The gate helper exposes this via its inExecution block — pass through silently to Phase 1 when:
inExecution.status === "active"
The helper computes this from docs/.alm-plan-data.json — PLAN_STATUS === "In Execution" AND LAST_INVOCATION_AT within the last 60 minutes. check-alm-plan.js refreshes LAST_INVOCATION_AT automatically on every invocation that finds the plan in execution, so each in-chain skill keeps the chain alive for the next one — even multi-hour deploys (deploy-pipeline alone can take 60 min per stage) survive the window without the chain incorrectly de-classifying. Stalled chains (no heartbeat for > 60 min) reclassify as stale-heartbeat and Phase 0 gates fire normally so an abandoned plan doesn't silently bypass user confirmation.
When inExecution.status is anything other than "active" ("not-running", "stale-heartbeat", "no-plan"), run the Phase 0 gate flow below. Branch on the remaining helper fields:
Step 1 — Run the gate helper.
node "${PLUGIN_ROOT}/scripts/lib/check-alm-plan.js" \
--projectRoot "." \
--envUrl "{devEnvUrl}" \
--token "{token}" \
--solutionId "{solutionId from .solution-manifest.json, if available}"
The helper returns JSON with { exists, stale, staleness: { reason, detail }, generatedAt, planStatus, ... }. The freshness check requires env credentials + solutionId; without those the helper does an existence-only check.
Step 2 — Branch on the result.
| Result | Behavior |
|---|---|
| deferred: true | The user has explicitly deferred ALM for this project (.alm-deferred marker present). Pass through silently to Phase 1 — do not nag. |
| exists: false | The user hasn't run plan-alm yet. See Step 3. |
| exists: true, stale: false | Plan is current. Pass through silently to Phase 1. |
| exists: true, stale: true (reason: solution-modified) | The solution changed after the plan was generated. See Step 4. |
Step 3 — No plan. Tell the user:
<!-- gate: deploy-pipeline:0.no-plan | category=intent | cancel-leaves=nothing -->"No ALM plan exists for this project.
/power-pages:plan-almbuilds one — it detects the project state, asks about your promotion strategy, and orchestrates this skill in the right order alongside setup-solution / setup-pipeline / activate-site / test-site. Want me to run plan-alm now?"
🚦 Gate (intent · deploy-pipeline:0.no-plan): Fail-closed entry gate when
check-alm-plan.jsreturnsexists:false. Helper-script-backed.
AskUserQuestion:
| Question | Header | Options |
|---|---|---|
| Run /power-pages:plan-alm first? | ALM plan gate | Yes — run /power-pages:plan-alm now (Recommended), Continue without a plan (advanced — I just want to deploy), Cancel |
- Yes (Recommended) → invoke
/power-pages:plan-alm. It builds the plan and returns —plan-almis a planner and does not deploy. This skill then re-runs the Phase 0 check (nowexists:true) and proceeds to Phase 1. - Continue without a plan → set
BYPASSED_PLAN_GATE = trueand proceed to Phase 1. The deploy will still work, but env-var per-stage values, activation, and post-deploy validation aren't orchestrated. - Cancel → exit cleanly.
Step 4 — Stale plan. Tell the user:
<!-- gate: deploy-pipeline:0.stale-plan | category=intent | cancel-leaves=nothing -->"ALM plan exists from
{generatedAt}but the source solution has been modified since (at{solution.modifiedon}). The plan's component count, size analysis, and split decisions may be outdated. Re-runningplan-almwill refresh the analysis."
🚦 Gate (intent · deploy-pipeline:0.stale-plan): Fail-closed entry gate when
check-alm-plan.jsreturnsstale:true. Helper-script-backed.
AskUserQuestion:
| Question | Header | Options | |---|---|---| | Refresh the plan first? | ALM plan freshness | Refresh — re-run /power-pages:plan-alm (Recommended), Continue with the existing plan, Cancel |
- Refresh (Recommended) → invoke
/power-pages:plan-alm. After completion, re-run the Phase 0 helper once to confirm freshness; if still stale, surface the detail and proceed to Phase 1 anyway (don't infinite-loop). - Continue → set
STALE_PLAN_ACK = trueand proceed to Phase 1. - Cancel → exit cleanly.
Relationship to Phase 3.5 (pre-deploy completeness check). Phase 3.5 (later in this skill) catches solution gaps right before deploy. Phase 0 catches the bigger miss: the user who never ran the orchestrator at all and is about to push a half-baked deploy through. The two are complementary.
Phase 1 — Verify Prerequisites
Create all tasks upfront at the start of this phase.
Tasks to create:
- "Verify prerequisites"
- "Select target stage"
- "Resolve pipeline info"
- "Validate package" — in
MULTI_RUN_MODEthis becomes a single parallel batch (Phase 3.6) covering all N non-skipped solutions; in single-solution / legacy v2 mode it runs per-iteration inline in Phase 4 - "Configure deployment settings"
- "Deploy and monitor"
- "Write deployment record"
Steps:
-
Resolve the project's configured environment URL first, then assert PAC is actually connected to it.
verify-alm-prerequisites.jsresolves the env from PAC's ambient org context (pac env who), which is not guaranteed to match the project. If PAC has drifted to another environment (duplicate activepac authprofiles, or an external process flipping the active env), the skill would silently run discovery — and laterpac pipeline deploy— against the wrong environment (potentially PROD). Assert the match and hard-stop on mismatch rather than pinning--envUrl: pinning would correct only the Dataverse-API calls while later PAC-CLI operations still follow the drifted context, so asserting that PAC itself is on the right env is the safer gate.Read the project's recorded env URL (first match wins):
.solution-manifest.json→ top-levelenvironmentUrl, elsepowerpages.config.json→environmentUrl. Store asCONFIGURED_ENV_URL. (Both fields are top-levelenvironmentUrlstrings; declarative/EDM sites have nopowerpages.config.json, so the manifest is the source there.)Pass
--expectedEnvUrlonly whenCONFIGURED_ENV_URLactually resolved to a URL. Use the first form when a recorded env URL exists, the second when neither file records one — do not pass an empty or unresolved--expectedEnvUrl "{CONFIGURED_ENV_URL}":# CONFIGURED_ENV_URL resolved (recorded in manifest/config) — assert PAC is on it: node "${PLUGIN_ROOT}/scripts/lib/verify-alm-prerequisites.js" --require-manifest --expectedEnvUrl "{CONFIGURED_ENV_URL}" # Neither file records an env URL — omit the flag, fall back to the pac-context default: node "${PLUGIN_ROOT}/scripts/lib/verify-alm-prerequisites.js" --require-manifest--expectedEnvUrlmakes the helper compare PAC's resolved env (origin-only) againstCONFIGURED_ENV_URLand exit non-zero with an "Environment mismatch: PAC CLI is connected to {X} but this project targets {Y} — runpac env select …" error on mismatch. (As a safety net the helper skips the assertion if the value isn't a parseable env URL — an empty string or an unsubstituted placeholder won't hard-stop — but prefer omitting the flag outright when there's no recorded URL.) Capture output as JSON; extract.envUrl(store asdevEnvUrl) and.token(store asDEV_TOKEN). If the script exits non-zero, stop and surface the error — it indicates an env mismatch, or thataz login/pac auth/ WhoAmI failed. -
Run
detect-project-context.jsto read project config and solution manifest:node "${PLUGIN_ROOT}/scripts/lib/detect-project-context.js"Capture output as JSON; extract
.solutionManifest(store assolutionManifest),.siteName(store assiteName), and.websiteRecordId. IfsolutionManifestis null, continue — the manifest is not strictly required at this step (solution info will come fromdocs/alm/last-pipeline.json). -
Locate
docs/alm/last-pipeline.json— if not found, stop and advise running/power-pages:setup-pipelinefirst.Manifest version check:
- If
schemaVersion === 3, setMULTI_RUN_MODE = trueand storedeploymentOrder[]asDEPLOYMENT_ORDER. There is a single pipeline with a single set of stages; multi-solution is expressed via N stage runs against the same stage, one per solution inorder. This is the current recommended layout. - If
schemaVersion === 2(legacy), setMULTI_PIPELINE_MODE = trueand storepipelines[]asPIPELINES_LIST. The skill falls back to the older "loop over N separatedeploymentpipelinesrecords" behavior. Advise the user to re-runsetup-pipelineto migrate to v3. - Otherwise read
pipelineId,pipelineName,hostEnvUrl,sourceDeploymentEnvironmentId,solutionName,stages[](single-solution mode — existing behavior).
In
MULTI_RUN_MODE, resolvesolutionName+solutionIdper iteration ofDEPLOYMENT_ORDER. Entries wherestatus === "SkippedEmpty"(typically the{Prefix}_Futurebuffer) are short-circuited — no stage run is crea - If
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
92.4kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
Scrapling
85.9k🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
ruflo
74.0k🌊 The original agent harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, federation, vector RAG integration, and native Claude Code / Codex / Hermes and many more Integrated
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
