Skip to main content
Each gate type targets a specific cross-product readiness check. Gates read their required parameters from the params object on the gate definition, falling back to the matching top-level product config block (jira, confluence, bitbucket, bamboo) when a param is not explicitly set.
Checks that at least one Jira issue exists for the configured projectKey and fixVersion. The gate passes when the JQL search returns one or more issues. It warns (and is blocking at high severity) when zero stories are found.Parameters
ParamSourceDescription
projectKeyparams.projectKey or jira.projectKeyJira project key.
fixVersionparams.fixVersion or jira.fixVersionTarget fix version string.
{
  "id": "jira-stories",
  "type": "jira-stories-exist",
  "enabled": true,
  "severity": "high"
}
readyStatuses from jira.readyStatuses is stored in the project config but the gate evaluates only issue count against the fixVersion JQL — it does not filter by status. Use this gate to confirm the release scope is non-empty.
Checks that a Confluence page with the given title exists in the specified space. The gate warns when the page is not found.Parameters
ParamSourceDescription
spaceKeyparams.spaceKey or confluence.requiredPages[0].spaceKeyConfluence space key.
titleparams.title or confluence.requiredPages[0].titleExact page title.
{
  "id": "confluence-playbook",
  "type": "confluence-page-exists",
  "enabled": true,
  "severity": "high"
}
To check a page in a different space from the default, override with params:
{
  "id": "runbook-exists",
  "type": "confluence-page-exists",
  "enabled": true,
  "severity": "high",
  "params": {
    "spaceKey": "OPS",
    "title": "Production Runbook v4"
  }
}
Checks that a Confluence page contains all required section headings. The gate fetches the page body and performs a case-insensitive substring match for each entry in requiredSections.Parameters
ParamSourceDescription
spaceKeyparams.spaceKey or confluence.requiredPages[0].spaceKeyConfluence space key.
titleparams.title or confluence.requiredPages[0].titleExact page title.
requiredSectionsparams.requiredSections (required)Array of strings that must appear in the page body.
{
  "id": "playbook-sections",
  "type": "confluence-page-sections",
  "enabled": true,
  "severity": "high",
  "params": {
    "requiredSections": ["Deployment Steps", "Rollback", "Smoke Tests"]
  }
}
requiredSections is a required parameter — the gate will warn and report a configuration error if it is omitted or empty.
Checks that a Confluence page was updated within a maximum number of days. Uses the page’s version.when timestamp. The gate warns when the page age exceeds maxAgeDays.Parameters
ParamSourceDescription
spaceKeyparams.spaceKey or confluence.requiredPages[0].spaceKeyConfluence space key.
titleparams.title or confluence.requiredPages[0].titleExact page title.
maxAgeDaysparams.maxAgeDaysMaximum allowed page age in days. Defaults to 14.
{
  "id": "playbook-freshness",
  "type": "confluence-page-freshness",
  "enabled": true,
  "severity": "medium",
  "params": {
    "maxAgeDays": 7
  }
}
Set severity to medium when you want a stale-page alert that surfaces in the report without blocking the release.
Checks that the configured release branch exists in the Bitbucket repository. The gate warns when the branch is not found.Parameters
ParamSourceDescription
projectKeyparams.projectKey or bitbucket.projectKeyBitbucket project key.
repoparams.repo or bitbucket.repoRepository slug.
releaseBranchparams.releaseBranch or bitbucket.releaseBranchBranch name to look for.
{
  "id": "release-branch",
  "type": "bitbucket-release-branch-exists",
  "enabled": true,
  "severity": "high"
}
To override the branch name for a specific gate:
{
  "id": "hotfix-branch",
  "type": "bitbucket-release-branch-exists",
  "enabled": true,
  "severity": "high",
  "params": {
    "projectKey": "MYPROJ",
    "repo": "my-service",
    "releaseBranch": "hotfix/critical-fix"
  }
}
Checks that the number of open pull requests targeting the release branch is within the allowed threshold. The gate warns when the open PR count exceeds maxOpenToRelease.Parameters
ParamSourceDescription
projectKeyparams.projectKey or bitbucket.projectKeyBitbucket project key.
repoparams.repo or bitbucket.repoRepository slug.
releaseBranchparams.releaseBranch or bitbucket.releaseBranchTarget branch to count open PRs against.
maxOpenToReleaseparams.maxOpenToReleaseMaximum allowed open PRs to the release branch. Defaults to 0.
{
  "id": "open-pr-threshold",
  "type": "bitbucket-pr-checks",
  "enabled": true,
  "severity": "medium",
  "params": {
    "maxOpenToRelease": 0
  }
}
Setting maxOpenToRelease: 0 means the gate warns when any PR is still open to the release branch. Increase this value if your release process allows merging in-flight PRs after the cut.
Checks that the specified Bamboo plan is active and enabled. The gate warns when the plan is disabled or inactive.Parameters
ParamSourceDescription
planparams.plan or bamboo.requiredPlans[0]Bamboo plan key (e.g. MYPROJ-PLAN).
{
  "id": "bamboo-plan-active",
  "type": "bamboo-plan-active",
  "enabled": true,
  "severity": "high"
}
To check a specific plan key that differs from the project default:
{
  "id": "deploy-plan-active",
  "type": "bamboo-plan-active",
  "enabled": true,
  "severity": "high",
  "params": {
    "plan": "MYPROJ-DEPLOY"
  }
}
Checks that the latest build result for the specified Bamboo plan has a SUCCESS state. The gate warns when the latest build is missing or in any other state (e.g. FAILED, IN_PROGRESS).Parameters
ParamSourceDescription
planparams.plan or bamboo.requiredPlans[0]Bamboo plan key.
{
  "id": "bamboo-build-green",
  "type": "bamboo-latest-build-success",
  "enabled": true,
  "severity": "high"
}
Reads a local Checkmarx scan report (JSON) and checks that the vulnerability counts for high, medium, and low severity findings are within the configured thresholds. The gate warns when any count exceeds its threshold.cops supports several common Checkmarx report formats. It tries direct field extraction from the top-level object, summary, and statistics.severity sub-objects before falling back to walking all nodes and counting severity fields.Parameters
ParamSourceDescription
reportPathparams.reportPath (required)File path to the Checkmarx JSON report.
maxHighparams.maxHighMaximum allowed high-severity findings. Defaults to 0.
maxMediumparams.maxMediumMaximum allowed medium-severity findings. Defaults to 0.
maxLowparams.maxLowMaximum allowed low-severity findings. Defaults to unlimited.
{
  "id": "checkmarx-security",
  "type": "checkmarx-scan-threshold",
  "enabled": true,
  "severity": "high",
  "params": {
    "reportPath": "reports/checkmarx-latest.json",
    "maxHigh": 0,
    "maxMedium": 5,
    "maxLow": 20
  }
}
The report file must exist at reportPath at the time cops release check runs. The gate fails immediately if the file is not found.
Checks whether the current time falls inside a configured deployment freeze window. The gate warns when the current timestamp is within any active freeze window, making it blocking when severity is high.Supports a single window via params.start + params.end, or multiple windows via params.windows[].Parameters
ParamSourceDescription
startparams.startISO 8601 datetime for a single freeze window start.
endparams.endISO 8601 datetime for a single freeze window end.
windowsparams.windowsArray of { start, end } objects for multiple freeze windows.
Single window:
{
  "id": "freeze-window",
  "type": "deployment-freeze-window",
  "enabled": true,
  "severity": "high",
  "params": {
    "start": "2026-04-01T00:00:00Z",
    "end": "2026-04-03T23:59:59Z"
  }
}
Multiple windows:
{
  "id": "freeze-windows",
  "type": "deployment-freeze-window",
  "enabled": true,
  "severity": "high",
  "params": {
    "windows": [
      { "start": "2026-04-01T00:00:00Z", "end": "2026-04-03T23:59:59Z" },
      { "start": "2026-12-24T00:00:00Z", "end": "2026-12-27T23:59:59Z" }
    ]
  }
}
At least one window must be configured. The gate fails at configuration validation time if neither params.start+params.end nor a non-empty params.windows[] is provided.
Checks that the latest deployment result for each specified Bamboo environment is in the required state, and that the promotions occurred in the order the environment IDs are listed (earlier IDs must have an earlier finishedDate than later ones).This gate is used to verify that an artifact has been promoted through a defined sequence of environments (e.g. dev → staging → prod) before releasing.Parameters
ParamSourceDescription
envIdsparams.envIds (required)Array of Bamboo deployment environment IDs in promotion order. Minimum 2.
requiredStateparams.requiredStateRequired deployment state string. Defaults to SUCCESS. Case-insensitive.
{
  "id": "multi-env-promotion",
  "type": "bamboo-multi-env-promotion",
  "enabled": true,
  "severity": "high",
  "params": {
    "envIds": [101, 102, 103],
    "requiredState": "SUCCESS"
  }
}
The gate warns when:
  • Any environment has no deployment results.
  • Any environment’s latest result is not in requiredState.
  • The finishedDate timestamps are not in ascending order (promotion order violated).
envIds must contain at least 2 environment IDs. The gate fails at configuration validation time with fewer than 2 IDs.

Build docs developers (and LLMs) love