How to setup GitHub branch protection and required status checks

Last updated: June 27, 2025

Setup Branch Protection Rules

To properly configure branch protection and required status checks in GitHub repositories, follow these steps:

  1. Navigate to your repository's Settings in GitHub

  2. Under "Code and automation", select "Branches"

  3. Select the branch you want to protect (typically 'main' or 'master')

  4. Enable "Require status checks to pass before merging"

  5. Under "Status checks that are required", select all relevant checks for your repository. These might include:

    • CI pipeline checks (e.g., tests, linting)

    • Code review status

    • Security scans

Usage

Once configured, these checks will be required to pass before any pull request can be merged into the protected branch.

Managing Multiple Status Checks

If you have multiple repositories or varying status checks across projects, you can:

  • Create a final check job that depends on all other required checks

  • Use this final check as the required status check in branch protection

Example GitHub Action for a final check:

name: Check Workflow Status

on:
  workflow_run:
    workflows: ["CI"]
    types:
      - completed

jobs:
  check-status:
    runs-on: ubuntu-latest
    steps:
      - name: Check Workflow Status
        if: ${{ github.event.workflow_run.conclusion == 'failure' }}
        run: |
          echo "One or more jobs in the 'CI' workflow failed."
          exit 1

Common status checks can include linting tools (eslint, golangci-lint), security scanners (checkov), and test coverage reports. These checks are sufficient for compliance requirements as long as they are properly enforced through branch protection rules.