biomejs/biome GitHub Actions scorecard

Public GitHub Actions data, last 30 days. Updated .

Data sourced from public GitHub. GitSpider is not affiliated with or endorsed by this repository's owners. Request removal.

341 min/mo
recoverable (~16% of CI time) · across 27 patterns · ≈$2/mo
Estimated from wall-clock time · public repos pay $0, $ = private-repo equivalent
See all 27 fixes, each with the exact YAML ↓
4.8%
failure rate, 30d
4m
avg time to recover from a failure
Since : findings 26 → 27 · recoverable ~356 → ~341 min/mo
39 workflows · 500 runs (16.7/day) · 2,073 CI-min (wall-clock) · ≈$12 at private-repo rates (30d)

Where the minutes go (30d)

Pull request Node.js~578 min · 41 runs
Benchmarks~456 min · 42 runs
Pull request~335 min · 40 runs
or track on every push →

Waste detected

Biggest wins first, each with the exact config fix.

Missing dependency cache · Benchmarks

~137 min/mo · ≈$1/mo

Add `Swatinem/rust-cache@v2` (the de-facto cargo cache), or an `actions/cache@v4` step keyed on `Cargo.lock`.

- uses: Swatinem/rust-cache@v2

Full guide: how to fix this →

Missing dependency cache · Pull request

~101 min/mo · ≈$1/mo

Add `Swatinem/rust-cache@v2` (the de-facto cargo cache), or an `actions/cache@v4` step keyed on `Cargo.lock`.

- uses: Swatinem/rust-cache@v2

Full guide: how to fix this →

No concurrency control · Benchmarks

~46 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No concurrency control · autofix.ci

~22 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

Missing dependency cache · Parser conformance and comparison

~15 min/mo

Add `Swatinem/rust-cache@v2` (the de-facto cargo cache), or an `actions/cache@v4` step keyed on `Cargo.lock`.

- uses: Swatinem/rust-cache@v2

Full guide: how to fix this →

No concurrency control · Benchmarks Markdown

~10 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No concurrency control · Lint Pull Request Titles

~4 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No concurrency control · Label PRs

~3 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No concurrency control · GitHub Actions Security Analysis with zizmor 🌈

~2 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No concurrency control · Pull request Markdown

~1 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

Also found: 17 more config fixes with negligible recoverable minutes: timeouts, retention, path filters

No job timeout · Pull request

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

Premium runners (macOS / Windows) · Pull request

~0 min/mo

macOS bills ~10x and Windows ~2x a Linux minute. The cost estimate above assumes Linux, so your real spend is higher. Move any job that doesn't need them to `ubuntu-latest`.

jobs:
  build:
    runs-on: ubuntu-latest  # ~10x cheaper than macos-latest

Full guide: how to fix this →

No job timeout · Pull request JS

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Label PRs

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Parser conformance and comparison

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No concurrency control · Label issue

~0 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No job timeout · Label issue

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Lint Pull Request Titles

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Needs reproduction

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Pull request Node.js

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Pull request Markdown

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · autofix.ci

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · Lint rule docs

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No job timeout · GitHub Actions Security Analysis with zizmor 🌈

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

No path filters on triggers · GitHub Actions Security Analysis with zizmor 🌈

~0 min/mo

Runs on every push/PR with no `paths:` filter, so docs-only changes still trigger full CI. Add a `paths:` filter if that's common.

on:
  pull_request:
    paths:
      - 'src/**'
      - 'package.json'

Full guide: how to fix this →

No concurrency control · AgentScan

~0 min/mo

Add a `concurrency:` block keyed on branch to cancel superseded runs when devs push twice quickly.

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Full guide: how to fix this →

No job timeout · AgentScan

~0 min/mo

No job sets `timeout-minutes`, so a hung step can run to GitHub's 6-hour default. Add `timeout-minutes` to each job.

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

Full guide: how to fix this →

Copy every fix as one block (5 snippets, annotated per workflow)
# Missing dependency cache (cargo) (applies to: Benchmarks, Pull request, Parser conformance and comparison)
- uses: Swatinem/rust-cache@v2

# No concurrency control (applies to: Benchmarks, autofix.ci, Benchmarks Markdown, Lint Pull Request Titles, Label PRs, GitHub Actions Security Analysis with zizmor 🌈, Pull request Markdown, Label issue, AgentScan)
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

# No job timeout (applies to: Pull request, Pull request JS, Label PRs, Parser conformance and comparison, Label issue, Lint Pull Request Titles, Needs reproduction, Pull request Node.js, Pull request Markdown, autofix.ci, Lint rule docs, GitHub Actions Security Analysis with zizmor 🌈, AgentScan)
jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 15

# Premium runners (macOS / Windows) (applies to: Pull request)
jobs:
  build:
    runs-on: ubuntu-latest  # ~10x cheaper than macos-latest

# No path filters on triggers (applies to: GitHub Actions Security Analysis with zizmor 🌈)
on:
  pull_request:
    paths:
      - 'src/**'
      - 'package.json'

Each snippet is representative. Merge into the named workflow files rather than pasting wholesale.

Add the badge to your README

Live CI-health badge → GitSpider badge

[![GitSpider](https://gitspider.com/badge/biomejs/biome.svg)](https://gitspider.com/scan/biomejs/biome)

Want this on every push?

This scorecard is a one-time snapshot. Install the free GitHub App to track this repo continuously: new regressions caught as they land, trends over time, on your public and private repos. Team adds the offending commit on the PR + Slack alerts.

Install & monitor this repo →

💬 On Team, this same analysis posts automatically to every PR: the regression, and the exact commit that caused it, right where your team already looks. See plans →

Not ready to install? Get this report by email. No spam, unsubscribe anytime.

Share this scorecard: https://gitspider.com/scan/biomejs/biome