Skip to content
Latchkey

The Open Source CI Health Report

We graded 80 real workflows from popular open-source projects on four CI best practices: dependency caching, run de-duplication, job timeouts, and pinning actions to a commit SHA. Here is how open source's CI stacks up. Grade your own.

A: 19 · B: 5 · C: 43 · D: 10 · F: 3

How we grade

Each workflow starts at 100 and loses points for each missing best practice: no dependency cache, no concurrency group to cancel superseded runs, no job timeout, and any third-party action pinned to a movable tag instead of a commit SHA. The score maps to a letter grade, so a workflow that nails the fundamentals still grades well even if it skips one. It is the same check the free grader runs on your workflow, in your browser.

Every project, ranked

GradeWorkflowProject
Aagent-scan workflow (storybookjs/storybook)storybookjs/storybook
AAI Moderator workflow (appwrite/appwrite)appwrite/appwrite
Aautoclose comment workflow (scikit-learn/scikit-learn)scikit-learn/scikit-learn
Aautofix.ci # For security reasons, the workflow in which the autofix.ci action is used must be named "autofix.ci". workflow (prettier/eslint-config-prettier)prettier/eslint-config-prettier
ABenchmark workflow (django/django)django/django
ABenchmark workflow (swc-project/swc)swc-project/swc
ABuild workflow (grafana/alloy)grafana/alloy
ABundler Friendly workflow (prettier/prettier)prettier/prettier
ACI workflow (google/guava)google/guava
ACI workflow (sveltejs/kit)sveltejs/kit
ACI workflow (sveltejs/svelte)sveltejs/svelte
ACI workflow (vitejs/vite)vitejs/vite
ACI workflow (vitest-dev/vitest)vitest-dev/vitest
ADependabot auto-merge workflow (prometheus/prometheus)prometheus/prometheus
ADocs Alias Failure Notification workflow (vercel/turbo)vercel/turbo
Ahandle the /support command workflow (kubernetes/kubeadm)kubernetes/kubeadm
AHiredis-py integration tests workflow (redis/redis-py)redis/redis-py
APrepare Release workflow (tailwindlabs/tailwindcss)tailwindlabs/tailwindcss
Arelease workflow (AsahiLinux/asahi-installer)AsahiLinux/asahi-installer
BBlossom-CI workflow (pytorch/TensorRT)pytorch/TensorRT
BBuild Aarch64 Linux Wheels workflow (pytorch/audio)pytorch/audio
BBuild custom engine branch if needed workflow (prisma/prisma)prisma/prisma
Bci workflow (fastify/fastify)fastify/fastify
BDocker workflow (argoproj/argo-rollouts)argoproj/argo-rollouts
C(Compiler) Playground workflow (facebook/react)facebook/react
C[ruff] Build Docker image workflow (astral-sh/ruff)astral-sh/ruff
CActions CI workflow (airbnb/streamalert)airbnb/streamalert
CAdd model like runner workflow (huggingface/transformers)huggingface/transformers
Cautofix.ci # needed to securely identify the workflow workflow (biomejs/biome)biomejs/biome
Cbabel-loader workflow (babel/babel-loader)babel/babel-loader
CBuild and Push Docker Images workflow (huggingface/OpenEnv)huggingface/OpenEnv
CBuild Docs workflow (tiangolo/sqlmodel)tiangolo/sqlmodel
Cbuild workflow (helm/chartmuseum)helm/chartmuseum
Cci workflow (expressjs/cors)expressjs/cors
Cci workflow (expressjs/morgan)expressjs/morgan
CCI workflow (prometheus/pushgateway)prometheus/pushgateway
Cci workflow (vuejs/core)vuejs/core
CCI/CD workflow (supabase/supabase-py)supabase/supabase-py
CCode Checks workflow (pandas-dev/pandas)pandas-dev/pandas
CCode Freeze workflow (vercel/next.js)vercel/next.js
CCodeQL workflow (nestjs/nest)nestjs/nest
Ccopy-webpack-plugin workflow (webpack/copy-webpack-plugin)webpack/copy-webpack-plugin
CDeploy docs workflow (tensorflow/transform)tensorflow/transform
CDeploying adev preview to Firebase workflow (angular/angular)angular/angular
Cdiff-shades workflow (psf/black)psf/black
CDocker build and publish workflowactions/starter-workflows
CE2E tests workflow (babel/babel)babel/babel
CFix flaky tests workflow (microsoft/playwright)microsoft/playwright
CMake Linux Plugin workflow (grpc/grpc-web)grpc/grpc-web
Cmini-css-extract-plugin workflow (webpack/mini-css-extract-plugin)webpack/mini-css-extract-plugin
CNode CI workflow (apache/echarts)apache/echarts
CNode.js CI workflowactions/starter-workflows
Cpre-commit workflow (pallets/click)pallets/click
CPublish Website workflow (microsoft/monaco-editor)microsoft/monaco-editor
CPublish workflow (pallets/flask)pallets/flask
CRelease Proposal Approval Tracker workflow (caddyserver/caddy)caddyserver/caddy
Crelease workflow (remix-run/history)remix-run/history
CSCIP workflow (sourcegraph/checkup)sourcegraph/checkup
CSDK Benchmark Tests workflow (open-telemetry/opentelemetry-python)open-telemetry/opentelemetry-python
CSnyk Software Composition Analysis Scan workflow (cypress-io/cypress)cypress-io/cypress
Ctag-release workflow (kubernetes/node-problem-detector)kubernetes/node-problem-detector
CTest and Build workflow (hashicorp/go-memdb)hashicorp/go-memdb
CTest Suite workflow (encode/starlette)encode/starlette
CTest Suite workflow (encode/uvicorn)encode/uvicorn
CTest workflow (protocolbuffers/protobuf-go)protocolbuffers/protobuf-go
Ctests workflow (pypa/setuptools)pypa/setuptools
CTests: node.js workflow (airbnb/javascript)airbnb/javascript
DBuild Burr workflow (apache/burr)apache/burr
DBuild Docs workflow (tiangolo/fastapi)tiangolo/fastapi
DBuild workflow (psf/pyperf)psf/pyperf
DCI workflow (nodejs/undici)nodejs/undici
DCI workflow (tailwindlabs/heroicons)tailwindlabs/heroicons
DCross-Platform Builds workflow (ampproject/amphtml)ampproject/amphtml
DPull request workflow workflow (vuejs/vuepress)vuejs/vuepress
DPython application workflowactions/starter-workflows
DRelease Project workflow (google/closure-compiler)google/closure-compiler
DTest workflow (django/django-localflavor)django/django-localflavor
FCI workflow (eslint/eslint)eslint/eslint
FCI workflow (evanw/esbuild)evanw/esbuild
FNightly Cron workflow (facebook/Ax)facebook/Ax