SECOPS

Log GitLab security-review exceptions to a Postgres audit table

Captures every time a security-labeled GitLab MR is merged without a completed security approval and records the exception in Postgres for audit.

CategorySecOps
Enginesim
Difficultyintermediate
Triggerwebhook
Steps5
Setup~15 min

How it runs

The automated pipeline, trigger to output.

  • TriggerGitLab MR mergedGitLabGitLab
  • LogicKeep only security-labeled MRs
  • LogicCheck for missing security approval
  • ActionInsert exception row into Postgres audit tablePostgreSQLPostgres
  • OutputAlert security lead in SlackSlack

What it does

Detects merge requests carrying a security label that get merged without the required security approval, and writes a durable exception record to a Postgres audit table. Each row captures the MR, author, merger, labels, and timestamp so you have a clean trail for compliance reviews.

When to use it

Use it when policy says security-labeled changes need sign-off but reality sometimes overrides that, and you need defensible evidence of every exception rather than scrolling GitLab history during an audit.

How it works

  1. 1A GitLab webhook fires on MR merge events.
  2. 2A filter keeps only MRs that carried a `security::` label.
  3. 3A branch checks whether a security-team approval was recorded before merge.
  4. 4If approval is missing, the flow inserts an exception row into the Postgres `security_review_exceptions` table with full context.
  5. 5A Slack alert notifies the security lead with the MR link and who merged it, so the exception is reviewed while it's fresh.

Set it up

What you configure once, before turning it on.

  1. 1
    Connect GitLabRepos, MRs, pipelines, registry.
  2. 2
    Connect PostgresAny Postgres URL — query, write, migrate.
  3. 3
    Connect SlackChannels, DMs, threads, mentions.
  4. 4
    Set each agent's modelWe leave models unset so you pick the tier — fast + cheap, or top-quality.
  5. 5
    Tune it to your dataEdit the prompts, filters, and field mappings so it matches how your team works.
  6. 6
    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.