Implement a Quality Gate strategy in your DevOps to fail the build when required

What is a quality gate?

A quality gate is a code quality goal. A quality goal must be enforced before releasing and eventually, before committing to source control.

A dozen of default Quality Gates are proposed by NDepend related to measures like technical debt amount, code coverage or amount of issues with particular severity.

Default NDepend Quality Gates

A quality gate is not a rule.

  • A rule executed against some code produces some issues.
  • A quality gate executed against some code produces a state in the range [ PASS, WARN , FAIL].

Fail the build

Quality Gates can be used to fail the build when certain criteria are not-verified.
When at least one quality gate fails, NDepend.Console.exe returns a non-zero value that can be used to fail the build.

Quality Gates Build Failure

Quality Gates and Azure DevOps Build Failure

In the Azure DevOps / TFS extension there is the setting Stop the build when at least one Quality Gate fails.

Azure DevOps / TFS Quality Gates Build Failure

In the NDepend GitHub Action there is the setting Stop the build when at least one Quality Gate fails.

Create your own quality gates

What makes NDepend unique is that a quality gate is a textual C# LINQ Query that can be easily created, edited and customized. For example if you wish to enforce a certain amount of code coverage through a quality gate, you can just write:

// <QualityGate Name="Percentage Code Coverage" Unit="%" />
failif value < 70%
warnif value < 80%
codeBase.PercentageCoverage

Notice also the special clauses failif (mandatory clause) and warnif (optional clause) that are specific to NDepend CQLinq. codebase.PercentageCoverage is actually a C# statement that NDepend evaluates.

Both the quality gate fail/warn thresholds and its logic are embedded into a short textual query that can be easily edited. The quality gate logic can query anything:

  • the code model
  • the code coverage data
  • the code delta since the baseline
  • the issues obtained from executing the rules
  • the issues' technical-debt estimations

Browse default quality gates source code here.

More about writing your own quality gates with C# LINQ queries can be found here.

You can watch this 3 minutes video to get started with the NDepend quality gate: