Skip to content

overlane repo protect

Protect a branch: pull requests, approvals and required checks

Updated View as MarkdownOpen in ChatGPTOpen in Claude

Sets branch protection for a branch name or pattern such as release/**. Direct pushes are refused and changes go through a pull request that needs the approvals and the required checks (CI job names). Force-push is never allowed on a protected branch. Agents and people with write access set it; under supervised autonomy it waits for approval.

Usage

overlane repo protect repo --branch PATTERN [--approvals N] [--check JOB...] [--merge-method METHOD...] [--dry-run]

Arguments

Argument Required Description
repo yes The repository name or ID

Flags

Flag Type Required Default Description
--branch string yes The branch or pattern to protect
--approvals string no Approvals a pull request needs (default 1)
--check string (repeatable) no A CI job that must pass; repeat for more
--merge-method one of merge, squash, rebase no A merge method to allow; repeat for more (default: all)
--dry-run boolean no Print the requests and file changes this command would make, then stop. Needs no credentials.

Examples

overlane repo protect app --branch main --approvals 1 --check unit_tests
overlane repo protect app --branch release/** --approvals 2 --dry-run

Behavior

  • Effect: write (changes local or hosted state).
  • Needs credentials: yes. Uses the network: yes.
  • Supports --dry-run: yes. Accepts --force: no.
  • Machine-readable description: overlane schema repo protect.

Result

With --json (the default when stdout is not a terminal) the command prints this JSON Schema’s shape on stdout.

{
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "tenantId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 128,
          "pattern": "^[A-Za-z0-9][A-Za-z0-9_.:-]*$",
          "description": "tenant identifier"
        },
        "repoId": {
          "type": "string",
          "pattern": "^repo_[A-Za-z0-9]{6,40}$"
        },
        "pattern": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "requiredChecks": {
          "maxItems": 50,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128
          }
        },
        "requiredApprovals": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10
        },
        "allowForcePush": {
          "type": "boolean",
          "const": false
        },
        "allowedMergeMethods": {
          "minItems": 1,
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "merge",
              "squash",
              "rebase"
            ]
          }
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
        }
      },
      "required": [
        "tenantId",
        "repoId",
        "pattern",
        "requiredChecks",
        "requiredApprovals",
        "allowForcePush",
        "allowedMergeMethods",
        "updatedAt"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "dryRun": {
          "type": "boolean",
          "const": true
        },
        "service": {
          "type": "string"
        },
        "requests": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "method": {
                "type": "string"
              },
              "path": {
                "type": "string"
              },
              "body": {},
              "note": {
                "type": "string"
              }
            },
            "required": [
              "method",
              "path"
            ],
            "additionalProperties": false
          }
        },
        "commands": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "writes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "path": {
                "type": "string"
              },
              "action": {
                "type": "string",
                "enum": [
                  "write",
                  "append",
                  "delete"
                ]
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "path",
              "action",
              "description"
            ],
            "additionalProperties": false
          }
        },
        "notes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "dryRun",
        "requests",
        "commands",
        "writes",
        "notes"
      ],
      "additionalProperties": false
    }
  ]
}

See exit codes for the status the process returns.

Navigation

Type to search…

↑↓ navigate↵ selectEsc close

Overlane Agent

Ask about the docs. Answers are quoted from the pages, with links. This panel cannot change anything.

    Questions are answered in your browser from the docs index. Nothing you type here is stored or sent anywhere.