Providers
A provider binds a CI/CD platform to the scanner: it builds the API
context (credentials, clients) and declares which check modules run against
it. The scanner's core is provider-agnostic. Adding a new platform never
requires editing Scanner, Reporter, or the CLI.
CI/CD platforms
GitHub Actions
Scans every workflow under .github/workflows/. Action pinning, OIDC trust, secret hygiene, runner posture.
GitLab CI
Parses .gitlab-ci.yml with include: resolution. Image pinning, deploy gating, manual-job posture.
Bitbucket Pipelines
Parses bitbucket-pipelines.yml. Pipe pinning, deployment posture, custom-pipe risk.
Azure DevOps
Parses azure-pipelines.yml with template-resolution support.
Jenkins
Lexes Declarative + Scripted Jenkinsfiles. Credential exposure, agent pinning, sandbox bypass.
CircleCI
Parses .circleci/config.yml with orb-mapping support.
Google Cloud Build
Parses cloudbuild.yaml. Substitution injection, secret retrieval, signing posture.
Buildkite
Parses .buildkite/pipeline.yml. Plugin pinning, agent-tag injection, command-step posture, TLS bypass.
Drone CI
Parses .drone.yml / .drone.yaml. Image and plugin pinning, privileged steps, template-variable injection, literal secrets, TLS bypass.
Harness CI/CD
Parses Harness pipeline YAML (stages / steps / stepGroups). Image digest pinning, <+codebase.*> / <+trigger.*> expression injection, privileged steps, literal secrets, pipe-to-shell, TLS bypass, host-path mounts, agentic-CLI prompt injection + autoland, model-load RCE.
Tekton
Parses Task, Pipeline, and *Run CRDs. Step image pinning, parameter injection, workspace hygiene.
Argo Workflows
Parses Workflow and WorkflowTemplate CRDs. Image pinning, parameter injection, container template posture.
Gitea / Forgejo
Scans .gitea/workflows/ and .forgejo/workflows/. Reuses the full GitHub Actions rule pack (GHA-* IDs).
Cloud & infrastructure as code
AWS
Live account scan via boto3. CodeBuild, CodePipeline, CodeDeploy, ECR, IAM, S3, CloudTrail, Lambda, KMS, and more.
Azure Cloud
Live subscription scan via the azure-mgmt-* management SDKs. Entra ID, Storage, Key Vault, Container Registry, Monitor.
GCP
Live project scan via the google-cloud-* client libraries. IAM, Cloud Storage, Cloud KMS, Artifact Registry, Cloud Logging.
Terraform
Shift-left scan against a terraform show -json plan or raw *.tf source. AWS-rule parity so findings match the live runtime.
CloudFormation
Parses YAML or JSON templates with intrinsic-function resolution (!Ref, !Sub, !GetAtt).
Pulumi
Parses Pulumi.yaml + Pulumi.<stack>.yaml plus source files (Python / TypeScript / Go / C#). Secrets-provider posture, plaintext credentials, wildcard IAM policies, insecure state backend, unguarded StackReference.
Containers & deployment
Dockerfile
Parses Dockerfile / Containerfile. Image pinning, USER hygiene, secret-in-env, RUN posture.
Modelfile
Parses Ollama Modelfiles. Unpinned and HuggingFace base-model refs, local weight blobs, remote adapters, and custom-code model configs.
Kubernetes
Parses manifest YAML (Deployment, Pod, Job, …). securityContext, hostPath, RBAC blast radius, Secret hygiene.
Helm
Renders charts via helm template and runs the full K8S-* rule pack on the result, plus a chart-supply-chain pack (HELM-001..010: legacy schema, unlocked dependencies, plaintext repos) that reads Chart.yaml straight off disk.
Argo CD
Parses Application, ApplicationSet, and AppProject CRDs plus argocd-cm / argocd-rbac-cm ConfigMaps. Source repos, destinations, RBAC, auto-sync, PR generators.
OCI image manifest
Parses docker buildx imagetools inspect --raw JSON. Provenance annotations, build attestations (SLSA / SBOM), image.created timestamp.
Developer environment
Scans committed developer-environment config (.vscode/, .devcontainer/, .claude/) for checkout-time auto-exec, fetch-and-run hooks, MCP command servers, and literal secrets.
SCM posture
GitHub
Full repo-governance pack via REST API. Branch protection, rulesets, security features, environments, deploy keys, webhooks, outside collaborators, Actions permissions.
GitLab
Seven universal rules via REST API: branch protection, required reviews, signed commits, force-push, status checks, branch deletion, CODEOWNERS.
Bitbucket Cloud
Seven universal rules via REST API: branch restrictions, required approvals, force-push, passing builds, branch deletion, CODEOWNERS.
GitHub org governance
Org-wide controls via REST API: 2FA requirement, default member permission, Actions allow-list + workflow-token defaults, org secret scope, runner-group exposure, webhooks, rulesets. Fans the per-repo pack out across a whole org with --scm-org.
Actions run history
Audits recent GitHub Actions runs via API (--audit-runs): pull_request_target runs, secret-shaped log strings, OIDC minted in fork runs, fork code on self-hosted runners, compromised / unpinned actions that actually executed.
GitLab pipeline run history
Audits recent GitLab pipeline runs via API (--audit-runs-logs): MR and fork-MR pipelines, secrets in job traces, OIDC minted in fork pipelines, fork code on self-managed runners.
Package registries
npm / PyPI / Maven / NuGet
Static parse of package.json, requirements*.txt, pom.xml, and *.csproj. Floating versions, missing integrity hashes, plaintext-HTTP indexes, lifecycle scripts, dependency-confusion source mapping, and curated known-compromised version registries. Live OSV advisory lookup behind --resolve-remote.
Go modules
Parses go.mod and probes for go.sum. Replace-directive misuse (local-path, cross-module), +incompatible requires, integrity-manifest presence, missing toolchain directive, and a curated known-compromised module registry.
Cargo (Rust)
Parses Cargo.toml via the TOML stdlib parser. Floating version specs, git deps without rev, missing Cargo.lock, path dependencies, alternate-registry sources, and a curated known-compromised crate registry.
Composer (PHP)
Parses composer.json / composer.lock. Floating constraints, missing lock, plaintext-HTTP repositories, dependency-confusion sourcing, and a curated known-compromised package registry.
RubyGems (Ruby)
Parses Gemfile / Gemfile.lock. Floating version specs, git / path sources, missing lock, insecure gem sources, and a curated known-compromised gem registry.
Adding a new provider
- Create
pipeline_check/core/providers/<name>.pysubclassingBaseProvider. - Set
NAME, implementbuild_context(**kwargs)andcheck_classes. - Register it in
pipeline_check/core/providers/__init__.py. - Add check modules under
pipeline_check/core/checks/<name>/and tests undertests/<name>/. - (Optional) Add compliance mappings for the new check IDs in
pipeline_check/core/standards/data/*.py.
The Scanner, --pipeline CLI flag, and provider registry pick it up
automatically.