SECOPS

Block GitLab merge until a security reviewer signs off

Sets the merge request to draft and posts a blocking commit status when a sensitive label is present, then clears the block only after an approved review from the security group.

CategorySecOps
Enginesim
Difficultyadvanced
Triggerwebhook
Steps6
Setup~25 min

How it runs

The automated pipeline, trigger to output.

  • TriggerGitLab MR updated (label or approval)GitLabGitLab
  • LogicBranch on label-added vs approval event
  • ActionPost failing security/signoff commit statusGitLabGitLab
  • LogicVerify approver is in security groupGitLabGitLab
  • ActionFlip status to success to unblock mergeGitLabGitLab
  • OutputNotify channel of block or unauthorized approvalSlack

What it does

Enforces a hard merge gate on security-labeled merge requests. The moment a sensitive label lands, it places a failing commit status named `security/signoff` so the MR cannot merge, and it removes that block only when an authorized security reviewer approves.

When to use it

Use it when project merge rules alone are not enough and you need an auditable, label-driven gate that fails closed. Ideal for repos handling auth, secrets, or regulated data where an accidental merge is a real incident.

How it works

  1. 1A GitLab webhook fires on MR updates (label changes and approvals).
  2. 2A branch checks whether the event is a new sensitive label or an approval event.
  3. 3On a new sensitive label, the flow posts a failing `security/signoff` commit status and comments who must approve.
  4. 4On an approval, it verifies the approver belongs to the security group via the GitLab API.
  5. 5If the approver is authorized, it flips the commit status to success, unblocking merge; otherwise it leaves the block in place and notes the unauthorized approval in Slack.

Set it up

What you configure once, before turning it on.

  1. 1
    Connect GitLabRepos, MRs, pipelines, registry.
  2. 2
    Connect SlackChannels, DMs, threads, mentions.
  3. 3
    Set each agent's modelWe leave models unset so you pick the tier — fast + cheap, or top-quality.
  4. 4
    Tune it to your dataEdit the prompts, filters, and field mappings so it matches how your team works.
  5. 5
    Test, then turn it onRun once against a sample, confirm the output, then enable the trigger.

Run this workflow in your colony.

14-day trial. No DevOps. No Sales call. Provisioned in under a minute.