Skip to main content

migrate-pipeline

Migrate Harness pipelines from v0 to v1 simplified format via MCP tools. Converts expressions from angle-bracket to ${{ }} syntax, lowercases type names, simplifies structure, and preserves variables, failure strategies, and conditional logic. Use when asked to migrate a pipeline, convert v0 to v1, upgrade pipeline format, modernize pipeline syntax, or compare v0 vs v1. Trigger phrases: migrate pipeline, convert to v1, upgrade pipeline, v0 to v1, modernize pipeline, simplified format.

Source facts

Repository
thisrohangupta/cursor-harness-plugin
Last source activity
April 16, 2026 at 23:31
Detected SKILL.md language
English
Stars
1
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
migrate-pipeline
description
Migrate Harness pipelines from v0 to v1 simplified format via MCP tools. Converts expressions from angle-bracket to ${{ }} syntax, lowercases type names, simplifies structure, and preserves variables, failure strategies, and conditional logic. Use when asked to migrate a pipeline, convert v0 to v1, upgrade pipeline format, modernize pipeline syntax, or compare v0 vs v1. Trigger phrases: migrate pipeline, convert to v1, upgrade pipeline, v0 to v1, modernize pipeline, simplified format.
metadata
{"author":"Harness","version":"2.0.0","mcp-server":"harness-mcp-v2"}
license
Apache-2.0
compatibility
Requires Harness MCP v2 server (harness-mcp-v2)
# Migrate Pipeline Convert Harness pipelines from v0 to v1 simplified format via MCP. ## Instructions ### Step 1: Fetch Current v0 Pipeline ``` Call MCP tool: harness_get Parameters: resource_type: "pipeline" resource_id: "<pipeline_identifier>" org_id: "<organization>" project_id: "<project>" ``` ### Step 2: Convert v0 to v1 Apply these transformations: ### Expression Mapping | v0 Expression | v1 Expression | |--------------|---------------| | `<+pipeline.variables.x>` | `${{ pipeline.variables.x }}` | | `<+stage.variables.x>` | `${{ stage.variables.x }}` | | `<+steps.id.output.outputVariables.x>` | `${{ steps.id.output.x }}` | | `<+trigger.branch>` | `${{ trigger.branch }}` | | `<+secrets.getValue("x")>` | `${{ secrets.x }}` | | `<+pipeline.sequenceId>` | `${{ pipeline.sequenceId }}` | | `<+input>` | `${{ input }}` | ### Structure Changes **v0 CI Stage:** ```yaml stages: - stage: identifier: build type: CI spec: cloneCodebase: true platform: os: Linux arch: Amd64 runtime: type: Cloud spec: {} execution: steps: - step: identifier: run type: Run spec: shell: Bash command: npm test ``` **v1 Equivalent:** ```yaml stages: - name: build type: ci spec: steps: - name: run type: run spec: shell: bash run: npm test ``` **Key v1 differences:** - Stage/step types are lowercase: `ci`, `run`, `deployment` - `command` becomes `run` in Run steps - `execution.steps` simplifies to `spec.steps` - Platform/runtime is simplified or implicit - `identifier` becomes `name` (or `id`) ### Step 3: Show Converted Pipeline Present both v0 and v1 side-by-side for review. ### Step 4: Create or Update in Harness (Optional) v0 and v1 pipelines are **distinct resource types** in the MCP server (`pipeline` vs `pipeline_v1`). You cannot update a v0 pipeline in-place with v1 YAML. Choose one path: **Path A — Create a new v1 pipeline** (recommended, non-destructive): ``` Call MCP tool: harness_create Parameters: resource_type: "pipeline_v1" org_id: "<organization>" project_id: "<project>" body: { yamlPipeline: "<converted v1 pipeline YAML string>" } ``` **Path B — Update an existing v1 pipeline** (only if the v1 pipeline already exists under that ID): ``` Call MCP tool: harness_update Parameters: resource_type: "pipeline_v1" resource_id: "<pipeline_identifier>" org_id: "<organization>" project_id: "<project>" body: { yamlPipeline: "<converted v1 pipeline YAML string>" } ``` Do not pass a raw YAML blob without wrapping in `{ yamlPipeline: ... }` or as a raw string — passing a nested JSON `pipeline` object causes serialization errors. ## Migration Checklist - [ ] Expressions converted from `<+...>` to `${{ ... }}` - [ ] Stage types lowercased - [ ] Step types mapped correctly - [ ] Platform/runtime configuration simplified - [ ] Variables and inputs preserved - [ ] Failure strategies maintained - [ ] Notification rules preserved - [ ] Conditional execution logic preserved ## Examples - "Migrate the build-and-deploy pipeline to v1" - Fetch, convert, show diff - "Show me what ci-pipeline would look like in v1" - Fetch, convert, display only - "Convert all pipelines in the project" - List all, convert each ## Performance Notes - Read the complete v0 pipeline before starting migration. Missing stages or steps will produce an incomplete v1 pipeline. - Verify all expressions are converted from `<+...>` to `${{ }}` format. - Compare the v0 and v1 outputs to confirm no functionality was lost in translation. ## Troubleshooting ### Unsupported v0 Features - Some v0-specific step types may not have v1 equivalents yet - Complex failure strategies may need manual adjustment - Custom stage types require careful mapping ### Validation Errors After Migration - Re-validate expression syntax - Check all resource references still resolve - Verify variable types are compatible
View on GitHub