dx-devops-pipeline-manage

Use this skill to manage the full lifecycle of a DevOps Center pipeline — list all pipelines, get a single pipeline's details, create a new pipeline linked to a Git repository, add or remove stages, rename a stage, add or remove Salesforce environments on stages, attach or detach projects, and activ

By forcedotcom · 2,068 installs

npx skills add forcedotcom/sf-skills --skill dx-devops-pipeline-manage

Source repository · Upstream listing

DevOps Center Pipeline Management Manages the complete pipeline lifecycle in DevOps Center — from creation against a repository, through stage and environment configuration and project attachment, to activation of a ready to promote release pipeline. Provides headless CLI driven operations for autonomous release workflows. Scope In scope : List pipelines, get pipeline details, create a pipeline (linked to an existing or new Git repo), add/delete/rename stages, add/delete Salesforce environments on stages, attach/detach projects, and activate/deactivate/rename the pipeline Out of scope : Work item lifecycle, promotion/deployment execution, conflict detection, standalone project creation (separate skills) Required Inputs Gather or infer before proceeding: Operation type : list, get, create, add stage, delete stage, rename stage, add environment, delete environment, attach project, detach project, activate, or deactivate For get / any stage or environment op : pipeline ID (required) — obtain via sf devops pipeline list json For create : pipeline name (required) and a Git repo ( repo , required). Repo flags differ by scenario: Existing repo (GitHub or Bitbucket) : only repo <url — do not pass repo type / create repo New GitHub repo : repo <name create repo repo type github repo owner <org or user New Bitbucket repo : repo <name create repo repo type bitbucket bitbucket workspace <workspace ( bitbucket project key <key optional) Description ( description ) optional in all cases For add stage : pipeline ID, new stage name, and next stage id (the stage the new one precedes) — get stage IDs via sf devops pipeline get For add environment : pipeline ID, stage ID, environment name, and org type (Production or Sandbox) For attach/detach project : pipeline ID and project ID For activate/deactivate/rename : pipeline ID Defaults unless specified: Output format: json for headless consumption Target org: use target org <alias if not relying on the default org If the user gives a clear request ("create a pipeline on repo myorg/myrepo", "add a UAT stage before Production", "activate pipeline 0XB..."), proceed immediately without unnecessary questions. Workflow All operations use sf devops pipeline and sf devops stage CLI commands with json output for structured consumption. Pipeline IDs and stage IDs are the primary identifiers — resolve them via list and get before mutating. Phase 1 — Identify Operation 1. Determine the operation type from user intent: "list", "show all pipelines" → list; "details of pipeline", "show stages" → get "create", "set up", "new pipeline" → create "add stage", "insert stage" → add stage; "rename stage" → rename stage; "remove/delete stage" → delete stage "connect environment", "add org to stage" → add environment; "remove environment" → delete environment "attach project", "connect project" → attach project; "detach project" → detach project "activate", "turn on"; "deactivate", "turn off"; "rename pipeline" → lifecycle update Phase 2 — Execute Operation 2. Verify org authentication before any operation: If no default org is set or auth has expired, instruct the user to run sf org login web set default alias <alias Confirm the org has DevOps Center enabled by running sf devops pipeline list json Add target org <alias to every command when targeting a specific org 3. Inspect pipelines : list returns SObject records under .result.pipelines[] with capitalized fields ( .Id , .Name , .IsActive ) — it does not include stages or connected projects get returns a single pipeline under .result with camelCase fields ( .id , .name , .stages[] , .connectedProjects[] ); each stage has .id , .name , .nextStageId , .branchName , and .environment.{id,name} . Stages are a linked list — order is defined by nextStageId , and the terminal stage has nextStageId: null . Use get to discover stage IDs before any stage or environment operation 4. Create a pipeline — the pipeline must be linked to a Git repository. name and repo are always required; the remaining flags depend on the repo scenario: Provider specific required flags: GitHub new repo → repo owner ; Bitbucket new repo → bitbucket workspace . Omitting the provider's required flag fails the create Do not pass repo type / create repo for an existing repo — supply only the repo URL via repo Custom stages at create time : a new pipeline seeds the default stage chain Integration → UAT → Staging → Production . To seed different stages, repeat s/ stage once per stage in promotion order — e.g. stage Dev stage QA stage Prod . This avoids adding/renaming stages afterward Add description "<text " optionally in any scenario Capture the returned pipeline ID for subsequent stage/environment/project/activation steps Idempotency : the CLI does not dedupe. Before creating, run sf devops pipeline list json and check for a pipeline with the same name/repo; return the existing one if found. See references/parsing patterns.md for the check before create snippet 5. Configure stages — a stage is added relative to an existing stage, then bound to an environment. Read references/cli commands.md for full flag details before multi stage work: stage add inserts an empty stage (no branch/environment) before next stage id ; configure its environment separately Build the promotion chain by inserting each new stage before the stage that should follow it 6. Bind environments to stages — attach a Salesforce org to a stage: org type must be exactly Production or Sandbox — run scripts/validate org type.sh <value first and only proceed on exit 0 Headless caveat : stage environment add triggers an OAuth browser flow. In headless/CI runs pass no browser — the CLI prints a redirect URL for manual authentication 7. Attach / detach a project — a project can be attached to only one pipeline: If the user names a project instead of providing its ID, resolve it via sf devops project list json (see references/parsing patterns.md ) 8. Activate / deactivate / rename the pipeline : Before activate , run scripts/check activation ready.sh <id and only proceed on exit 0 — it fails with an actionable message when the pipeline has no stages Stages cannot be modified after the pipeline is activated and changes are promoted through it — finish stage/environment configuration before activating activate and deactivate are mutually exclusive; deactivate and name may be combined in one command Phase 3 — Verify and Report 9. Verify operation success — use scripts/verify operation.sh , which performs the deterministic JSON status and post state field checks and exits non zero with an actionable message on mismatch: Create : confirm the pipeline appears in sf devops pipeline list json by .Name and capture its .Id Stage / environment / project changes : verify with the has stage / has project modes above (they read sf devops pipeline get and check .result.stages[] / .result.connectedProjects[] ) Activate : verify with the active <id true mode 10. Report results : List : pipeline name, ID, and active state per pipeline (no stages — that's what get is for) Get : pipeline name, ID, active state, stage chain (each stage's name → environment → branch, ordered via nextStageId ), connected projects Create : pipeline ID, name, and linked repo (or "existing pipeline returned" on idempotent match) Stage / environment / project op : the resulting stage chain with each stage's environment, in promotion order Lifecycle : the new active state and/or name Verification Checklist (gate before reporting success) Confirm the items for the operation you performed. Do not report success until every applicable box holds: [ ] Every sf devops command was run with json and returned status: 0 ( scripts/verify operation.sh status ) [ ] Create : the new pipeline appears in sf devops pipeline list json by name, and (for a new repo) the provider specific flags were supplied ( repo owner for GitHub, bitbucket workspace for Bitbucket) [ ] Add stage / add environment : the stage exists in the chain and org type passed scripts/validate org type.sh ( scripts/verify operation.sh has stage ... ) [ ] Attach project : the project shows in .result.connectedProjects[] ( scripts/verify operation.sh has project ... ) [ ] Activate : scripts/check activation ready.sh passed beforehand and .result.isActive is now true ( scripts/verify operation.sh active <id true ) [ ] Delete environment : the pipeline was inactive before the delete Rules / Constraints Constraint Rationale All sf devops commands must use json flag Structured output is required for headless consumption; human readable output is unreliable for parsing A pipeline requires a Git repo at create time sf devops pipeline create requires name and repo ; for an existing repo pass only the URL, for a new repo add create repo and repo type New repo create needs provider specific flags GitHub requires repo owner ; Bitbucket requires bitbucket workspace ( bitbucket project key optional). The wrong provider's flags fail the command Pipeline ID required for get, update, and all stage/environment/project ops These commands identify the pipeline only by pipeline id ; obtain it via sf devops pipeline list Stage IDs come from pipeline get stage add ( next stage id ), stage update / delete ( stage id ), and stage environment add ( stage id ) all need stage IDs stage add inserts an empty stage before next stage id Stages carry no environment until one is added; build the chain by anchoring to the following stage org type must be exactly Production or Sandbox The flag is a fixed enum; other values fail Pipeline must have ≥1 stage before activation sf devops pipeline update activate rejects a stage less pipeline Do not modify stages after activate + promote DevOps Center locks stage structure once changes have been promoted through an active pipeline Environment delete requires an inactive pipeline stage environment delete only succeeds while the pipeline is inactive A project attaches to only one pipeline pipeline project add fails if the project is already attached elsewhere; detach first Idempotent create via check before create The CLI does not dedupe; list existing pipelines and return the match instead of erroring Prefer no browser in headless runs stage environment add opens an OAuth browser flow; no browser prints a redirect URL for CI Gotchas Issue Resolution No default org set Run sf org display json first; if it fails, instruct user to run sf org login web set default Create fails — missing repo repo is required; pass an existing repo URL, or create repo + repo type for a new repo New repo create fails — missing provider flag GitHub new repo needs repo owner ; Bitbucket new repo needs bitbucket workspace . Don't mix providers' flags ( repo owner with bitbucket , or bitbucket workspace with github ) stage add fails — no next stage id next stage id is required; run sf devops pipeline get pipeline id <id json to find the stage IDs and pick the one the new stage should precede Environment add hangs in CI The OAuth browser flow blocks headless runs; add no browser and complete auth via the printed redirect URL Activation rejected The pipeline needs at least one stage; add a stage (and its environment) before activate