PEPAI / tools

ci-bill

Find out which GitHub Actions workflow costs the money, and why.

The problem

ci-bill ranks GitHub Actions cost per repository, workflow and runner SKU, from the detailed usage report CSV that GitHub billing exports.

With your workflow files it points to likely causes with file:line, such as a lint job on a macOS runner or a job without a timeout, and shows the savings per finding.

Example output

$ ci-bill report --usage samples/usage-sample.csv --workflows samples/.github/workflows
USD (from net_amount)
Period: 2026-09-01 .. 2026-09-30
Repositories: example-org/sample-app

Total net: 284.21
Total minutes: 12208
Other products: 0.00

Workflow                                                 Net   Gross  Discount  Minutes   Share
example-org/sample-app .github/workflows/lint.yml     230.14  230.14      0.00     3712  80.98%
  actions_macos                                       230.14  230.14      0.00     3712
  measured 0.00  invoice 230.14  difference 230.14
  lint  samples/.github/workflows/lint.yml:8 = 230.14
  F1 samples/.github/workflows/lint.yml:8: lint on macOS
    savings 207.87 USD (linux_rate)
  F2 samples/.github/workflows/lint.yml:7: default timeout is 360 minutes
    savings 22.32 USD (stuck_run)

Excerpt of the example in the repository README; the sample data is invented, as the README states.

Install

cargo install --locked ci-bill

Needs Rust 1.85 or newer. Ready-made binaries for Linux, Windows and macOS are on the releases page.

What it deliberately does not do

Links

GitHubcrates.ioQuality
← Back to all tools