Start with the Cartesian product

For ordinary static axes, multiply the number of values in each axis. Two Node.js versions and three databases produce six job copies:

strategy:
  matrix:
    node: [18, 20]
    database: [postgres, mysql, sqlite]
2 Node versions × 3 databases = 6 job copies

include, exclude, dynamic expressions, and reusable workflows can change that result. A trustworthy analyzer should model the combinations it can prove and mark the rest as approximate or unknown—not silently call them free.

Combine copies with the runner rate

CI Bill Doctor’s beta signal for one runtime minute is:

public runner rate × static matrix copies

Its catalog reviewed on August 1, 2026 records standard GitHub-hosted Linux at USD 0.006 per minute and standard macOS at USD 0.062 per minute. Always verify the current values in GitHub’s official runner pricing; the project also keeps a versioned catalog.

A small diff, a large structural change

Consider a base workflow with two Linux copies and a proposed workflow with six macOS copies:

Base: 2 × $0.006 = $0.012 per workflow runtime minute Proposed: 6 × $0.062 = $0.372 per workflow runtime minute

The delta is USD 0.360 for every minute represented by that static structure. That is not the final bill: actual duration, run frequency, included quotas, discounts, credits, taxes, retries, and other repositories still matter. It is a review signal showing that the proposed workflow is structurally much more expensive at public list rates.

Validated example. The project reproduced this comparison in a public consumer-lab pull request. The Action reports its assumptions beside the number.

What to review before merging

These are review prompts, not automatic edits. The correct combination set depends on the project’s compatibility promise.

What this calculation cannot tell you

A static matrix signal cannot reconcile an invoice. Dynamic matrices, larger runners, custom labels, self-hosted infrastructure, changing duration, and organization-specific pricing require additional evidence. Unknown must remain unknown.

Check your workflow locally

Paste base and proposed YAML into the free browser scanner. Analysis runs in the current tab; CI Bill Doctor receives no workflow content or telemetry.

Open the local scanner