CLI tool for endoflife.date API - Check EOL dates and support lifecycles
Project description
EOL CLI
Query end-of-life dates and support lifecycles from the terminal
Overview
EOL CLI is a Python command-line tool for querying the endoflife.date API. It helps you inspect product lifecycles, release cycles, categories, tags, identifiers, and API metadata directly from your terminal.
Key Features
| Feature | Description |
|---|---|
| Product Lookup | Inspect products, release cycles, and release metadata |
| Category Queries | List categories or fetch products by category |
| Tag Queries | List tags or fetch products by tag |
| Identifier Queries | Resolve products by PURL, CPE, and other identifier types |
| API Index | Inspect the API index and available surfaces |
| Rich Output | Human-friendly terminal output with tables and colors |
| Structured Output | JSON, XML, and SARIF output for automation |
| Tag-Based Releases | Publish releases from git tags with GitHub Actions |
Supported Commands
| Command | Purpose |
|---|---|
products list |
List all products |
products get <name> |
Show product details |
products release <product> <release> |
Show a specific release cycle |
categories list |
List categories |
categories get <name> |
Show products in a category |
tags list |
List tags |
tags get <name> |
Show products for a tag |
identifiers list |
List identifier types |
identifiers get <type> |
Show products for an identifier type |
index |
Show API index data |
Installation
From PyPI
pip install eol-cli
From Source
git clone https://github.com/seifreed/eol-cli.git
cd eol-cli
pip install -e .
Development Installation
git clone https://github.com/seifreed/eol-cli.git
cd eol-cli
pip install -e ".[dev]"
Quick Start
# List all available products
eol-cli products list
# Get details for a specific product
eol-cli products get ubuntu
# Get the latest release information
eol-cli products release python latest
# Query products by category
eol-cli categories get os
# Query products by tag
eol-cli tags get linux
Usage
Products
# List all products
eol-cli products list
# List all products with full details
eol-cli products list --full
# Get a specific product
eol-cli products get <product-name>
# Get multiple products (comma-separated)
eol-cli products get <product1>,<product2>,<product3>
# Get all product details
eol-cli products get <product-name> --all
# Get a specific release cycle
eol-cli products release <product-name> <release-cycle>
# Get the latest release cycle
eol-cli products release <product-name> latest
Categories
# List all categories
eol-cli categories list
# Get products in a category
eol-cli categories get <category-name>
Tags
# List all tags
eol-cli tags list
# Get products with a specific tag
eol-cli tags get <tag-name>
Identifiers
# List all identifier types
eol-cli identifiers list
# Get products by identifier type
eol-cli identifiers get <identifier-type>
API Information
# Get API index
eol-cli index
Output Formats
Rich Terminal Output
Rich is the default output format. It renders tables and summaries that are easy to read in a terminal.
JSON Output
Use --json for machine-readable JSON output.
eol-cli products get ubuntu --json
XML Output
Use --xml for XML output.
eol-cli products get ubuntu --xml
SARIF Output
Use --sarif for SARIF output in security and automation workflows.
eol-cli products get ubuntu --sarif
Releases
Releases are published from version tags.
git tag v1.0.0
git push origin v1.0.0
That workflow:
- Builds the package artifacts
- Publishes to PyPI with GitHub Actions OIDC trusted publishing
- Uploads the built files to the GitHub Release assets
Before publishing tag-based releases, configure PyPI trusted publishing for this repository:
- Owner:
seifreed - Repository:
eol-cli - Workflow file:
publish.yml - Environment:
pypi
Development
Setup Development Environment
# Clone the repository
git clone https://github.com/seifreed/eol-cli.git
cd eol-cli
# Create a virtual environment
python3 -m venv venv
source venv/bin/activate
# Install development dependencies
pip install -e ".[dev]"
Running Tests
# Run all tests
pytest
# Run tests without API calls
pytest -q -m "not api" --tb=short
# Run with coverage
pytest --cov=eol_cli --cov-report=term-missing
Code Quality
# Lint
ruff check eol_cli tests
# Format check
black --check eol_cli tests
# Type check
mypy eol_cli tests
Requirements
- Python 3.13 or 3.14
- See pyproject.toml for the full dependency list
Contributing
Contributions are welcome.
- Fork the repository
- Create a feature branch
- Commit your changes
- Push the branch
- Open a pull request
License
This project is licensed under the MIT License. See the LICENSE file for details.
Attribution
- Author: Marc Rivero
- Repository: github.com/seifreed/eol-cli
Built for clean EOL lookups and release automation.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file eol_cli-1.0.0.tar.gz.
File metadata
- Download URL: eol_cli-1.0.0.tar.gz
- Upload date:
- Size: 56.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ff81165f6dc76366d258ca195e69222ad68365d2ea1b805f768636e7619ad65
|
|
| MD5 |
6614b1bfc6e8911644064780ca67df38
|
|
| BLAKE2b-256 |
ff9173123f657dbe81af577753ab58776d9922257876678042007e0831947a35
|
Provenance
The following attestation bundles were made for eol_cli-1.0.0.tar.gz:
Publisher:
publish.yml on seifreed/eol-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eol_cli-1.0.0.tar.gz -
Subject digest:
0ff81165f6dc76366d258ca195e69222ad68365d2ea1b805f768636e7619ad65 - Sigstore transparency entry: 1263125473
- Sigstore integration time:
-
Permalink:
seifreed/eol-cli@442708b1684017fef79000cad54759e1542262f0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/seifreed
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@442708b1684017fef79000cad54759e1542262f0 -
Trigger Event:
push
-
Statement type:
File details
Details for the file eol_cli-1.0.0-py3-none-any.whl.
File metadata
- Download URL: eol_cli-1.0.0-py3-none-any.whl
- Upload date:
- Size: 43.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5bf6415239e901a93861ddbe04c0149f19f0b3c130cbbd2701b0d0b95eec740
|
|
| MD5 |
298795ca016ec4852a2448d2a57d5d80
|
|
| BLAKE2b-256 |
35527c2e3cb30f5f992cb41722e43736245a363ec69a4fdac0b9b787215c2392
|
Provenance
The following attestation bundles were made for eol_cli-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on seifreed/eol-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
eol_cli-1.0.0-py3-none-any.whl -
Subject digest:
b5bf6415239e901a93861ddbe04c0149f19f0b3c130cbbd2701b0d0b95eec740 - Sigstore transparency entry: 1263125535
- Sigstore integration time:
-
Permalink:
seifreed/eol-cli@442708b1684017fef79000cad54759e1542262f0 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/seifreed
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@442708b1684017fef79000cad54759e1542262f0 -
Trigger Event:
push
-
Statement type: