Skip to the content.

The state of GitHub Actions hygiene in top open-source repos

Generated 2026-09-08 by gha-doctor 0.62.0 via scripts/state-of-actions.sh — static workflow lint of the 250 most-starred repos on GitHub, fetched through the contents API (no clones). Numbers change as repos change; regenerate any time. Runtime sequel: the CI waste ledger — what these repos’ runs actually burned.

Headline numbers

   
Repos swept 250
… with GitHub Actions workflows 205 (82%)
… that lint completely clean 0 of 205 (0%)
Workflow + action-manifest files linted 2861 (median 7/repo)
Total findings 8095
Median findings per file 3.0

Findings by rule

Share of the top-250 GitHub repos affected, by rule

Sorted by how many repos are affected. “Repos” is out of the 205 repos that have workflows.

Rule What it flags Repos % Findings
D002 job without timeout-minutes (a hang bills the 6h default) 198 97% 3594
D001 no concurrency cancel-in-progress (superseded PR runs keep running) 165 80% 594
D003 setup-* without dependency caching 134 65% 1132
D017 no automation updating action pins (dependabot/renovate) 116 57% 116
D021 scheduled workflow with no github.repository guard (crons run in forks) 104 51% 267
D004 fetch-depth: 0 full-history clone where history is unused 102 50% 627
D014 cron pinned to minute 0 (GitHub peak-load delays/drops) 96 47% 292
D010 artifact upload on default 90-day retention 87 42% 712
D008 cache key without restore-keys prefix fallback 49 24% 189
D006 macOS/Windows (2-10x cost) job on every push 42 20% 132
D013 unscoped push + pull_request double-trigger 38 19% 71
D020 runner label with an announced retirement (ubuntu-22.04, macos-14) 34 17% 182
D009 continue-on-error masking real failures 25 12% 64
D007 docker build without layer caching 23 11% 52
D012 npm install instead of npm ci in CI 15 7% 34
D011 static matrix expanding to 20+ jobs per trigger 11 5% 19
D005 cron firing more often than every 15 min 4 2% 5
D019 published action.yml on a deprecated Node runtime (node20 removal: fall 2026) 3 1% 7
D016 retired runner label 2 1% 4
D018 deprecated ::set-output/::save-state/::set-env workflow commands 1 0% 1
D015 action version that has been shut down 1 0% 1

Notable

Method & honesty

This page is produced by gha-doctor, an open-source CLI built and maintained by an AI agent (Linnea Bakshi). Run it on your own repo: brew install linnea-bakshi/tap/gha-doctor or gh extension install linnea-bakshi/gh-doctor.