CRITICAL finding or more than 10 HIGH findings. Configurable per-repo or org-wide.
Default policy
Until you save a config, the gate applies these built-in defaults automatically — nothing is written on a CI request. Click Load Defaults in the dashboard to persist them as an editable org default. Severity thresholds are count limits where-1 means no limit.
| Threshold | Default | Fails when |
|---|---|---|
| Max critical findings | 0 | Any critical finding |
| Max high findings | 10 | More than 10 high findings |
| Max medium findings | -1 (no limit) | — |
| Max low findings | -1 (no limit) | — |
| Max cyclomatic complexity | 25 | Any function over 25 |
| Max duplication | 5% | Duplication above 5% |
| Blocked licenses | none | A dependency uses a blocked license |
| New-code-only mode | off | (see New code) |
Configure from the dashboard
Quality gates live under CI/CD → Quality Gates (/ci-cd?activeTab=gates). Each config is either the Organization Default (no repository set) or a per-repo override. There’s no in-repo config file to maintain — settings persist in TigerGate.
Org-default policy
Applies to every repo until a per-repo config overrides it.Open CI/CD → Quality Gates
If no configs exist yet, click Load Defaults to seed the standard thresholds, or New Quality Gate to define your own.
Set the severity thresholds
Max Critical / High / Medium / Low — the maximum number of findings at each severity before the build fails. Enter
-1 for no limit.Set the code-quality thresholds
Max Complexity (per-function cyclomatic complexity) and Max Duplication %.
-1 disables either check.(Optional) Block licenses
Blocked Licenses — a comma-separated list (e.g.
GPL-3.0, AGPL-3.0). Any dependency in the SBOM carrying a blocked license fails the gate.Per-repo override
When one repo needs a stricter (or looser) policy than the org default.Pick the repository
Choose the repo from the Repository dropdown. This config now applies to that repo instead of the org default.
Threshold reference
The gate evaluates each configured threshold independently and fails if any is exceeded.| Threshold | Operator | Notes |
|---|---|---|
max_critical / max_high / max_medium / max_low | count ≤ limit | -1 = no limit |
max_complexity | max cyclomatic complexity ≤ limit | evaluated from the quality scan; -1/0 skips |
max_duplication | duplication % ≤ limit | evaluated from the quality scan; -1/0 skips |
min_coverage | coverage % ≥ limit | only when a coverage report is uploaded; 0 skips |
blocked_licenses | 0 packages with a blocked license | skipped when the list is empty |
INFO findings are not counted at any severity threshold.
New code (clean-as-you-code)
By default the gate looks at the whole codebase. Turn on New code only on a config to gate only findings introduced after a baseline — legacy debt is tolerated, but new problems block the PR (the “clean as you code” pattern). When New code only is enabled the gate uses the new-code thresholds (nc_max_critical, nc_max_high, nc_max_medium, nc_max_low) and an optional new-code coverage floor (nc_min_coverage) instead of the whole-codebase counts. The default new-code thresholds are 0 criticals and 0 highs.
New-code mode pairs with the CLI’s scan scope — run tigergate scan --scan-scope diff (or the default auto, which also uploads a new-code summary alongside the full results) so the changed-code findings the gate needs are computed. The base branch is auto-detected from the CI environment (GitHub GITHUB_BASE_REF, GitLab CI_MERGE_REQUEST_TARGET_BRANCH_NAME, Azure SYSTEM_PULLREQUEST_TARGETBRANCH, Bitbucket BITBUCKET_PR_DESTINATION_BRANCH), falling back to HEAD~1.
New-code mode needs a new-code signal to measure. It gets one from a
diff or auto scan, or from a new-code baseline set on the repo+branch. With neither, the severity checks are reported as skipped — not passed — and the gate response carries a warning that the CLI prints. If you see that warning, the build was not actually evaluated: add --scan-scope diff or set a baseline.--scan-scope diff on its own is often the simpler choice: it filters the uploaded findings to the PR’s changes, so the ordinary thresholds already only see new code and no baseline is involved.
Monorepo components
In a single-gate monorepo a frontend PR fails becauseservices/api still carries a pre-existing critical — a finding the frontend team can neither fix nor merge past. Scoping gates to components fixes that: each component owns a set of paths, has its own thresholds, and posts its own status check.
Any quality gate config takes two extra fields:
| Field | Meaning |
|---|---|
| Component | The component key, e.g. web. Blank means the config applies to the whole repository. |
| Component paths | Comma-separated, repo-root-relative paths the component owns, e.g. apps/web, libs/shared. CI jobs for this component inherit them. |
- Repository matches and component matches
- Repository matches, component blank — the repo-wide gate
- Repository blank and component matches — an org-wide rule for that component name
- Repository blank, component blank — the Organization Default
Quality gate: acme/mono / component web) rather than leaving it to guesswork.
New-code mode and every threshold on this page apply per component once one is configured — a component’s max_high counts only findings under that component’s paths.
See Monorepos for how a component decides whether a PR concerns it, what a component run contains, and branch-protection setup. CI recipes are in CI/CD integration.
License blocking
List SPDX license identifiers under Blocked Licenses on any config. During the gate check TigerGate scans the uploaded SBOM and fails the build if any package declares one of the blocked licenses, listing the offending packages in the gate summary. Empty by default (no license gating).Coverage
If you upload coverage reports, two coverage checks become available:| Check | Config | Fires when |
|---|---|---|
| Minimum line coverage | min_coverage | Overall coverage falls below the configured floor |
| New-code coverage | nc_min_coverage (new-code mode) | Coverage on the changed lines falls below the floor |
0 floor skips the check, and a check is skipped (not failed) when the metric can’t be computed from the uploaded report.
Running the gate
Already wired by the CI snippets. The gate runs by default on everyscan. The CLI exits non-zero when the server-side gate fails, which is what blocks the merge:
✓ ok, ✗ failed, – no limit) followed by the finding counts by severity:
Report-only mode
To run the scan and upload results without failing the build, pass--quality-gate=false. The scan still runs and uploads, but the CLI always exits 0 — nothing blocks the merge. Use this during the first weeks of onboarding so the team can triage the backlog before the gate starts blocking, then drop the flag to enforce.
Notifications
Failed gates can notify the channels configured for CI in CI/CD (or under Notifications). Each channel is only usable once its integration is active:| Channel | Notes |
|---|---|
| Slack / Microsoft Teams | Posts scan + gate results to a channel |
| Email on failure | Emails on a failed quality gate |
| PagerDuty on critical | Pages when critical findings are present |
| Webhook | Delivers the result to a custom endpoint |
high) controls the minimum finding severity that triggers a notification.