GitHub Action: fail CI when your stack runs end-of-life software — auto-detects runtimes and Docker base images, powered by endoflife.ai
1
stars
2
commits
JavaScript
primary language
Sep 5, 2026
updated
A zero-dependency GitHub Action that scans your repo for runtime versions
(.nvmrc, .python-version, .ruby-version, go.mod, package.json
engines, Dockerfile base images) and checks each one against
endoflife.ai. Anything past end of life fails the
build with a file-anchored annotation; anything close gets a warning and a
date. No API key, no configuration required.
- uses: endoflife-ai/eol-check@v1
That's the whole integration. A fuller example:
name: EOL gate
on:
pull_request:
schedule:
- cron: '0 6 * * 1' # weekly — EOL dates pass whether or not you push code
jobs:
eol:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: endoflife-ai/eol-check@v1
with:
products: 'postgresql:14, kubernetes:1.32' # things not visible in the repo
fail-on: 'eol' # or 'approaching' / 'never'
warn-days: '90'
| Source | Product |
|---|---|
.nvmrc, .node-version, package.json engines.node | Node.js |
.python-version | Python |
.ruby-version | Ruby |
go.mod (go 1.x) | Go |
Dockerfile* FROM images (root + 2 levels) | node, python, ruby, golang, php, nginx, postgres, mysql, mariadb, redis, mongo, alpine, debian, ubuntu |
Anything else — databases, OSes, appliances, 500+ products — via the
products input as slug:version pairs. Slugs are the path segments on
endoflife.ai (e.g. endoflife.ai/postgresql → postgresql).
| Input | Default | Meaning |
|---|---|---|
products | '' | Extra slug:version pairs, comma-separated |
scan | true | Auto-detect from repo files |
fail-on | eol | eol | approaching | never |
warn-days | 90 | Warn when EOL is within this many days |
eol-count, approaching-count, checked-count, and report (the
markdown table also written to the job summary).
error · nodejs 18 is END OF LIFE since 2025-04-30 (477 days ago) — no more security fixes. https://endoflife.ai/score/nodejs/18 warning · python 3.10 reaches end of life in 72 days (2026-10-31). Plan the upgrade.
Plus a job-summary table:
| Product | Status | EOL date | Found in |
|---|---|---|---|
| nodejs 18 | 🔴 EOL | 2025-04-30 | .nvmrc |
| python 3.10 | 🟡 EOL in 72d | 2026-10-31 | Dockerfile |
| go 1.24 | 🟢 supported | 2026-08-12 | go.mod |
Show a live EOL status badge for any version you ship against:

Lifecycle data comes from endoflife.ai — end-of-life dates for 500+ products, verified against vendor sources daily, with EOL Risk Scores and a free API. Underlying community dates from endoflife.date (MIT).
MIT
2 commits
JavaScript
99.3%
GitHub Action: fail CI when your stack runs end-of-life software — auto-detects runtimes and Docker base images, powered by endoflife.ai
1
stars
2
commits
JavaScript
primary language
Sep 5, 2026
updated
A zero-dependency GitHub Action that scans your repo for runtime versions
(.nvmrc, .python-version, .ruby-version, go.mod, package.json
engines, Dockerfile base images) and checks each one against
endoflife.ai. Anything past end of life fails the
build with a file-anchored annotation; anything close gets a warning and a
date. No API key, no configuration required.
- uses: endoflife-ai/eol-check@v1
That's the whole integration. A fuller example:
name: EOL gate
on:
pull_request:
schedule:
- cron: '0 6 * * 1' # weekly — EOL dates pass whether or not you push code
jobs:
eol:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: endoflife-ai/eol-check@v1
with:
products: 'postgresql:14, kubernetes:1.32' # things not visible in the repo
fail-on: 'eol' # or 'approaching' / 'never'
warn-days: '90'
| Source | Product |
|---|---|
.nvmrc, .node-version, package.json engines.node | Node.js |
.python-version | Python |
.ruby-version | Ruby |
go.mod (go 1.x) | Go |
Dockerfile* FROM images (root + 2 levels) | node, python, ruby, golang, php, nginx, postgres, mysql, mariadb, redis, mongo, alpine, debian, ubuntu |
Anything else — databases, OSes, appliances, 500+ products — via the
products input as slug:version pairs. Slugs are the path segments on
endoflife.ai (e.g. endoflife.ai/postgresql → postgresql).
| Input | Default | Meaning |
|---|---|---|
products | '' | Extra slug:version pairs, comma-separated |
scan | true | Auto-detect from repo files |
fail-on | eol | eol | approaching | never |
warn-days | 90 | Warn when EOL is within this many days |
eol-count, approaching-count, checked-count, and report (the
markdown table also written to the job summary).
error · nodejs 18 is END OF LIFE since 2025-04-30 (477 days ago) — no more security fixes. https://endoflife.ai/score/nodejs/18 warning · python 3.10 reaches end of life in 72 days (2026-10-31). Plan the upgrade.
Plus a job-summary table:
| Product | Status | EOL date | Found in |
|---|---|---|---|
| nodejs 18 | 🔴 EOL | 2025-04-30 | .nvmrc |
| python 3.10 | 🟡 EOL in 72d | 2026-10-31 | Dockerfile |
| go 1.24 | 🟢 supported | 2026-08-12 | go.mod |
Show a live EOL status badge for any version you ship against:

Lifecycle data comes from endoflife.ai — end-of-life dates for 500+ products, verified against vendor sources daily, with EOL Risk Scores and a free API. Underlying community dates from endoflife.date (MIT).
MIT
2 commits
JavaScript
99.3%