Built from main at 1d902a0 on 2026-11-14

Dart

Dart and Flutter, recognised by .dart sources and pub's pubspec.yaml (a pub workspace's workspace: packages are units of their own). Flutter is Dart with a framework: flutter test, flutter analyze and a Flutter SDK count wherever dart test, dart analyze and a Dart SDK do. A build/ directory next to a pubspec is a build tree and is never read.

The compiled-language checks that need a C-family compiler (hardening, build types, extensions, sanitizers) do not apply, and nor do type checking (Dart is statically typed, with sound null safety), fuzz testing and mutation testing (no fuzzer or mutation tool for Dart is known).

tests-run

test(), testWidgets() or group() calls in test/**/*_test.dart, run by dart test, flutter test, dart run test or very_good test.

coverage

dart test --coverage=<dir> and flutter test --coverage write line coverage; with --branch-coverage (Dart 2.17+), branches too, which is what is asked for. dart run coverage:test_with_coverage (package:coverage) is the same collection; very_good test --coverage counts lines.

platform-matrix

The toolchains are Dart or Flutter SDK versions, read from the setup actions' inputs: dart-lang/setup-dart's sdk (a version or a channel: 3.5, stable; stable when not given), subosito/flutter-action's flutter-version, or its channel when no version is given (stable when neither is); and from the images, dart:3.5 and the cirruslabs Flutter image.

compiler-warnings

The analyzer reports what other compilers warn about, so two things are asked for: a lint set included in analysis_options.yaml (package:lints/recommended.yaml, flutter_lints, very_good_analysis, lint/strict) and dart analyze (or flutter analyze) run in CI.

warnings-as-errors

dart analyze fails on errors and warnings already; dart analyze --fatal-infos makes the infos, the lints' level, fatal too.

code-formatting

dart format --set-exit-if-changed (with --output=none, without writing), which fails on a file it would change; plain dart format rewrites, and --output=none alone only lists. The style is the formatter's own.

static-analysis

dart analyze (or flutter analyze), with its lints and analyzer: settings in analysis_options.yaml; custom_lint (dart run custom_lint); DCM (dcm analyze).

security-scanning

semgrep, which reads Dart; CodeQL and GitLab SAST do not.

dependency-audit

osv-scanner or trivy, which read pubspec.lock; snyk and GitLab Dependency Scanning do not.

dependency-management

pub's guidance: an application (publish_to: none) commits pubspec.lock; a package that may be published leaves it out, so a publishable package without one passes.

committed-artifacts

.dart_tool/ and build/.

vcs-ignore

.dart_tool/; build/ and coverage/ are worth ignoring too.

function-limits

lizard parses Dart, so CI runs it with a length limit.