endoflife-ai/eol-check

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

ci
end-of-life
eol
github-actions
lifecycle
security
Browse cluster: GitHub Actions CI/CD and DevOps Automation

README

eol-check — fail CI when your stack runs end-of-life software

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'

What it detects automatically

SourceProduct
.nvmrc, .node-version, package.json engines.nodeNode.js
.python-versionPython
.ruby-versionRuby
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/postgresqlpostgresql).

Inputs

InputDefaultMeaning
products''Extra slug:version pairs, comma-separated
scantrueAuto-detect from repo files
fail-oneoleol | approaching | never
warn-days90Warn when EOL is within this many days

Outputs

eol-count, approaching-count, checked-count, and report (the markdown table also written to the job summary).

Example output

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:

ProductStatusEOL dateFound in
nodejs 18🔴 EOL2025-04-30.nvmrc
python 3.10🟡 EOL in 72d2026-10-31Dockerfile
go 1.24🟢 supported2026-08-12go.mod

README badge

Show a live EOL status badge for any version you ship against:

![Node 22 EOL status](https://api.endoflife.ai/v1/badge/nodejs/22)

Data

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).

License

MIT

Contributors

OL3378

2 commits

endoflife-ai/eol-check

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

ci
end-of-life
eol
github-actions
lifecycle
security
Browse cluster: GitHub Actions CI/CD and DevOps Automation

README

eol-check — fail CI when your stack runs end-of-life software

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'

What it detects automatically

SourceProduct
.nvmrc, .node-version, package.json engines.nodeNode.js
.python-versionPython
.ruby-versionRuby
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/postgresqlpostgresql).

Inputs

InputDefaultMeaning
products''Extra slug:version pairs, comma-separated
scantrueAuto-detect from repo files
fail-oneoleol | approaching | never
warn-days90Warn when EOL is within this many days

Outputs

eol-count, approaching-count, checked-count, and report (the markdown table also written to the job summary).

Example output

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:

ProductStatusEOL dateFound in
nodejs 18🔴 EOL2025-04-30.nvmrc
python 3.10🟡 EOL in 72d2026-10-31Dockerfile
go 1.24🟢 supported2026-08-12go.mod

README badge

Show a live EOL status badge for any version you ship against:

![Node 22 EOL status](https://api.endoflife.ai/v1/badge/nodejs/22)

Data

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).

License

MIT

Contributors

OL3378

2 commits

Languages

JavaScript

99.3%