Open Source compliance CLI
for GitLab CI/CD & GitHub Actions
Analyze your GitLab CI/CD pipelines and GitHub Actions workflows for security and compliance: pipeline composition (templates, components, pinned action SHAs), container images (mutable tags, trusted registries), dangerous triggers and permissions, and branch protection settings.
How it works
Plumber scans your GitLab CI/CD configuration GitHub Actions workflows
Analyze your pipelines for security and compliance issues with automated checks. Analyze your workflows for security and compliance issues with automated checks.
include:- component: gitlab.com/components/secret-detection/secret-detection@~main mutable- component: gitlab.com/components/sast/sast@0.0.1 outdated- component: random-gitlab.com/components/dast@1.3.4 untrustedinstall-deps:image: node:latest mutablevariables:DAST_DISABLED: "false" overriddenallow_failure: truerules:- when: never weakenedon:## External-contributor trigger- pull_request_target dangerouspermissions: write-all write-alljobs:build:env:ACTIONS_STEP_DEBUG: "true" debugsteps:- uses: tj-actions/changed-files@main mutable- uses: archived-org/setup@v1 archived- run: echo "${{ github.event.title }}" injectionYour .gitlab-ci.yml Your GitHub Actions workflow
with compliance issues
Plumber CLI
scans & analyzes
include:## Security scanning- component: gitlab.com/components/secret-detection/secret-detection@2.3.4 pinned- component: gitlab.com/components/sast/sast@3.3.4 updated- component: gitlab.com/components/dast@1.3.4 trustedinstall-deps:image: node:22@sha256:8f3e2a1b9c0d7e6f5a4b3c2d… pinnedallow_failure: false strictrules:- when: always runson:## Safe trigger- pull_request safepermissions:contents: read least-privjobs:build:steps:- uses: actions/checkout@a1b2c3d4e5f6a7b8c9d0… pinned- env: TITLE: ${{ github.event.title }} boundrun: echo "$TITLE" safeCompliant & secure
audit-ready pipeline audit-ready workflow
Each scan applies policy checks across your pipeline. Here is what Plumber controls.
Pipeline composition
Detects hardcoded jobs in the .gitlab-ci.yml and verifies that all required template and component modules are included, up to date and do not follow unauthorized patterns (latest, main, etc.) Detects unpinned and risky steps in .github/workflows/*.yml and verifies that third-party actions are pinned by commit SHA, not archived, and free of known CVEs.
CI/CD container images
Detects container images using mutable tags that can change unexpectedly. Ensures images come from trusted registries only.
Access and authorization
Verifies that critical branches have proper protection settings.
See all controls
Runners, caches, artifacts, and many other checks beyond these three. The documentation lists the full catalog and how each control maps to issue codes.
Open the controls guideQuick Start
Get started in minutes
Set up Plumber in your GitLab CI/CD pipeline or GitHub Actions workflow with just a few simple steps.
Set up Plumber in your repository
Add the Plumber component to your GitLab pipeline (or call the CLI from your GitHub Actions workflow) and configure controls (registries, action pinning, branch protection, etc.).
Run your CI/CD pipeline
Plumber runs as part of your pipeline and scans your CI configuration and job or workflow definitions.
Get your compliance report
View results in the job output or download the report artifact for audit and remediation.
Plumber Radar
See what's actually shipping in open source CI/CD
We point the open-source Plumber CLI at hundreds of popular public GitLab projects, aggregate the results, and publish them live.
- 200+ Projects scanned
- 13 Compliance controls
- A-E Nutri-style grades
- 96%
- 84%
- 71%
- 53%
- 32%
## Security scanning