Hamburger Cross Icon
Runtime Supported
+
endoflife.date Collector

Runtime Supported + endoflife.date Collector

Guardrail Collector Beta Security And Compliance

Enforce Runtime Supported using data collected by endoflife.date Collector. Automatically check security and compliance standards on every PR.

Guardrail: Fails if any detected runtime is outside the active support window (`is_supported == false`). For products that distinguish active support from security-only maintenance (e.g. Node.js, Python, .NET), this catches services running on a runtime that's still patched for security but no longer receiving non-security fixes. For products without a separate active-support window (e.g. Go), this check is equivalent to `runtime-not-eol`. Skips cleanly when no EOL data is present.
Data Source: Detects pinned runtime versions (Node.js, Python, Ruby, Go, Java, .NET, PHP) from standard repo files and resolves each against https://endoflife.date. Writes EOL/support data to `.lang.<language>.eol` so policies can flag services running on EOL or out-of-support runtimes.

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.

1
endoflife.date Collector Gathers Data Collector
Extracts metadata from code, configs, and tool outputs
2
{ } Component JSON
Data centralized in structured format for evaluation
3
Runtime Supported Checks Guardrail
Pass/fail result with actionable feedback in PRs

Quick Start Configuration

Add both the collector and policy to your lunar-config.yml to enable this guardrail.

📄 lunar-config.yml
# 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.

Collector code

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/.json and matches the detected version to a cycle (e.g. Go 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.

{ } component.json From endoflife.date Collector
{
  "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.

Works with any process
check AI agent rules & prompt files
check Post-mortem action items
check Security & compliance policies
check Testing & quality requirements
Automate Now
Paste your AGENTS.md or manual process doc and get guardrails in minutes
Book a Demo