Bellwether

Configuration

Everything bellwether.toml can set: always-run tests, exclusions, global files that select everything, and flake thresholds.

Bellwether works without a configuration file. When you need one, put bellwether.toml in the repository root and commit it.

A complete example

[select]
# Tests that run on every pull request, whatever changed.
always_run = ["spec/smoke/**", "spec/contracts/payments_spec.rb"]

# Tests Bellwether should never select (you run them elsewhere).
exclude = ["spec/load/**"]

# Files upstream of everything: changing one selects the whole suite.
global = ["Dockerfile.base", "Gemfile.lock", ".ci/**"]

[flakes]
isolation_reruns = 3
release_after = 50

[report]
retention_days = 400

always_run

Glob patterns for tests that are selected on every run. These get the verdict pinned in the skip report. Keep the list short: a smoke suite and contract tests are the usual candidates.

exclude

Tests that are never selected, usually because a separate job runs them. These get the verdict excluded.

global

Files that every test depends on in a way the recorder cannot see: the base image, the lockfile, the CI definition. A change to any of them selects the whole suite. The defaults cover the common lockfiles; add your own here.

flakes

isolation_reruns is how many times a test that flipped is rerun before it is quarantined (1 to 5). release_after is how many clean runs in a row release it.