Runtime Supported + endoflife.date Collector
Enforce Runtime Supported using data collected by endoflife.date Collector. Automatically check security and compliance standards on every PR.
How endoflife.date Collector Powers This Guardrail
The endoflife.date Collector gathers metadata from your languages systems. This data flows into Lunar's Component JSON, where the Runtime Supported guardrail evaluates it against your standards.
When enabled, this check runs automatically on every PR and in AI coding workflows, providing real-time enforcement with actionable feedback.
Quick Start Configuration
Add both the collector and policy to your lunar-config.yml to enable this guardrail.
# Step 1: Enable the endoflife.date Collector
collectors:
- uses: github://earthly/lunar-lib/collectors/endoflife@v1.0.5
# with: ...
# Step 2: Enable the End-of-Life Runtime Guardrails
policies:
- uses: github://earthly/lunar-lib/policies/endoflife@v1.0.5
include: [runtime-supported]
# with: ...
What endoflife.date Collector Collects
This collector gathers the following data that the Runtime Supported guardrail evaluates.
runtime
Walks the cloned repo for runtime version pins across Node.js, Python,
Ruby, Go, Java, .NET, and PHP. For each detected runtime, queries
https://endoflife.date/api/1.21.5 → cycle 1.21). Writes the
normalized result to .lang.<language>.eol with cycle,
detected_version, is_eol, is_supported, eol_date,
support_until, lts, latest_in_cycle, and source. Stores the
raw matched cycle object under .lang.<language>.native.endoflife.cycle
(alongside a .product string sibling).
Runs on the code hook so the data refreshes on every push without
depending on a separate cron schedule. If no runtime can be resolved
for a given language, the language is silently skipped — only
languages with a confirmed pin produce output.
Example Data Flow
Here's an example of the data that endoflife.date Collector writes to the Component JSON, which Runtime Supported then evaluates.
{
"lang": {
"go": {
"version": "1.21",
"eol": {
"source": {
"tool": "endoflife.date",
"integration": "api",
"collected_at": "2026-04-27T12:00:00Z"
},
"product": "go",
"cycle": "1.21",
"detected_version": "1.21",
"is_eol": true,
"is_supported": false,
"eol_date": "2024-08-13",
"support_until": null,
"lts": false,
"latest_in_cycle": "1.21.13"
},
"native": {
"endoflife": {
"product": "go",
"cycle": {
"cycle": "1.21",
"releaseDate": "2023-08-08",
"eol": "2024-08-13",
"latest": "1.21.13",
"latestReleaseDate": "2024-08-06",
"lts": false
}
}
}
},
"nodejs": {
"version": "20.11.1",
"eol": {
"source": {
"tool": "endoflife.date",
"integration": "api",
"collected_at": "2026-04-27T12:00:00Z"
},
"product": "nodejs",
"cycle": "20",
"detected_version": "20.11.1",
"is_eol": false,
"is_supported": false,
"eol_date": "2026-04-30",
"support_until": "2024-10-22",
"lts": true,
"latest_in_cycle": "20.19.0"
},
"native": {
"endoflife": {
"product": "nodejs",
"cycle": {
"cycle": "20",
"releaseDate": "2023-04-18",
"lts": "2023-10-24",
"eol": "2026-04-30",
"latest": "20.19.0",
"support": "2024-10-22"
}
}
}
}
}
}
Configuration Options
endoflife.date Collector Inputs
| Input | Required | Default | Description |
|---|---|---|---|
endoflife_base_url |
Optional |
https://endoflife.date/api
|
endoflife.date API base URL. Override only if you proxy/mirror the API internally. |
java_product |
Optional |
eclipse-temurin
|
endoflife.date product slug used for Java. There is no generic `java` product — pick the JDK distribution that matches your runtime. Common values: `eclipse-temurin` (default), `amazon-corretto`, `azul-zulu`, `microsoft-build-of-openjdk`, `redhat-build-of-openjdk`, `oracle-jdk`, `sapmachine`, `bellsoft-liberica`, `ibm-semeru-runtime`. |
dotnet_product |
Optional |
dotnet
|
endoflife.date product slug used for .NET. Use `dotnet` for modern .NET (.NET 5+, .NET Core) or `dotnetfx` for legacy .NET Framework. |
End-of-Life Runtime Guardrails Inputs
| Input | Required | Default | Description |
|---|
Ready to Automate Your Standards?
See how Lunar can turn your AGENTS.md, engineering wiki, compliance docs, or postmortem action items into automated guardrails with our 200+ built-in guardrails.