Skip to content

Branch Enforcement

Policy-as-code for branch protection, naming conventions, and configuration drift detection.

Overview

GitWire lets you define enforcement policies that declare the desired state of branch protection rules. The reconciler compares desired vs. actual state and detects violations.

mermaid
graph LR
    POL[Policy Definition] --> REC[Reconciler]
    REC -->|Compare| GH[GitHub API]
    GH -->|Actual State| REC
    REC -->|Drift?| VIOL[Violation Record]
    REC -->|Fix?| GH

Policy Model

Each policy defines:

FieldTypeDescription
nameTEXTUnique policy name
branch_patternTEXTBranch pattern to match (e.g. main, release/*)
repo_filterTEXTOptional glob to limit to specific repos
min_reviewsINTRequired approving reviews
require_signed_commitsBOOLEANGPG signature required
require_linear_historyBOOLEANNo merge commits
block_force_pushesBOOLEANPrevent force pushes
block_deletionsBOOLEANPrevent branch deletion
enforce_adminsBOOLEANRules apply to admins too
require_status_checksBOOLEANRequired CI checks
required_status_check_contextsTEXT[]Specific check names
modeTEXTenforce or audit

Enforcement Modes

ModeBehavior
enforceCreate/update GitHub branch protection rules to match the policy
auditOnly record violations, don't change GitHub settings

Violations

When the reconciler detects drift between policy and reality, it creates a violation record:

FieldDescription
policy_idWhich policy was violated
repo_idWhich repo
branchWhich branch
violationsJSONB array of specific violations
statusopen, remediated

Config Validation

On every push, GitWire can validate repository configuration files:

  • Detects misformatted .github/ config files
  • Checks for common misconfigurations
  • Creates config_validation_results entries

API Endpoints (11 total)

MethodPathDescription
GET/api/enforcement/statsEnforcement statistics
GET/api/enforcement/policiesList all policies
POST/api/enforcement/policiesCreate a policy
PUT/api/enforcement/policies/:idUpdate a policy
DELETE/api/enforcement/policies/:idDelete a policy
GET/api/enforcement/violationsList all violations
GET/api/enforcement/violations/:owner/:repoRepo violations
POST/api/enforcement/violations/:id/suppressSuppress a violation
POST/api/enforcement/runTrigger reconciliation run
GET/api/enforcement/config-resultsConfig validation results
GET/api/enforcement/config-results/:owner/:repoRepo config results

In This Section

Released under the MIT License.