SECOPS

Route GitLab MRs to security labels by changed-file sensitivity

When a GitLab merge request opens or updates, classify its changed files against a sensitivity ruleset and apply the right security label.

CategorySecOps
Enginesim
Difficultyintermediate
Triggerwebhook
Steps6
Setup~15 min

How it runs

The automated pipeline, trigger to output.

  • TriggerGitLab MR opened or updatedGitLabGitLab
  • ActionFetch MR changed-file pathsGitLabGitLab
  • LogicMatch paths to sensitivity tier (highest wins)
  • ActionApply canonical sec:: label to MRGitLabGitLab
  • LogicBranch: critical tier only
  • OutputPost critical-path alert to security channelSlack

What it does

Every time a merge request is opened or pushed in GitLab, this workflow reads the diff's file list and matches each path against a sensitivity ruleset (auth, crypto, IAM policy, payment, infra-as-code). It then applies a single canonical security label — `sec::critical`, `sec::review`, or `sec::routine` — so reviewers and dashboards can triage instantly, and pings the security team only when critical paths change.

When to use it

Use it when your team relies on labels to drive review SLAs or merge gates and you want consistent, automatic classification instead of authors self-labeling. Ideal for repos where a small set of directories carries most of the security risk.

How it works

  1. 1A GitLab MR webhook fires on open or update.
  2. 2The flow fetches the MR's changed-file paths.
  3. 3A rule engine maps paths to a sensitivity tier (highest match wins).
  4. 4The matching `sec::*` label is set on the MR, replacing any prior tier label.
  5. 5If the tier is critical, a message with the file list and MR link is posted to the security Slack channel.

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.