A command-line tool for tracking software end-of-life (EOL) dates across multiple products.
- Track EOL dates for hundreds of software products in one place
- Display upcoming EOL dates chronologically, with urgency indicators
- Export data to CSV or JSON for further analysis
- Configurable EOL policies for different products
- Colorized output for easy identification of urgent EOLs
- List all products with optional YAML output
- Filter by YAML file for multiple product names
# Clone the repository
git clone <repository-url>
cd endoflife-timeline
# Install dependencies
pip install -r requirements.txt
# Install the package in development mode
pip install -e .- Python 3.12+
- Dependencies listed in
requirements.txt
- Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install development dependencies:
pip install -r requirements.txt
pip install -r requirements-dev.txt- Set up the release data directory:
mkdir -p release-data-main/2025-05-19/releases- Basic usage:
# List upcoming EOL dates
eol list --root release-data-main
# List all products
eol products --root release-data-main- Using a policy file:
# Create a policy file
echo "defaults:
years_after_release: 3" > eol_policies.yaml
eol list --root release-data-main --policy eol_policies.yaml- Using a YAML products file:
# Create a products file
echo "products:
- Python
- Ubuntu" > products.yaml
eol list --root release-data-main --products-yaml products.yaml- Exporting data:
eol export --root release-data-main --format csv --out eol_data.csvRun tests using pytest:
pytest eol_timeline/tests/ -v- Build and run with Docker:
# Build development container
docker build -f Dockerfile.dev -t eol-timeline-dev .
# Run tests in Docker
docker run --rm -v "$PWD":/app -e PYTHONPATH=/app eol-timeline-dev pytest eol_timeline/tests/ -v
# Run the application
docker run --rm -v "$PWD":/app -e PYTHONPATH=/app eol-timeline-dev eol list --root release-data-main- Build production container:
docker build -f Dockerfile -t eol-timeline .EOL_DATA_ROOT: Root directory containing release-dataPYTHONPATH: Python path for module imports
# List all upcoming EOL dates starting from today
eol list --root /path/to/release-data-mainUsage: eol [OPTIONS] COMMAND [ARGS]...
Options:
--root TEXT Root directory containing release-data. [env: EOL_DATA_ROOT]
--today DATE Override today's date (YYYY‑MM‑DD).
--policy FILE YAML file defining EOL rules.
--verbose / --quiet
--log-json Emit structured logs to STDERR.
--version Show app version.
Commands:
list Display upcoming EOL dates.
products List all available products.
export Write results to CSV/JSON.
validate Sanity‑check JSON dataset and policy file.
# List EOL dates for specific products
eol list --product "Python" --product "Ubuntu"
# Filter by YAML file
eol list --products-yaml products.yaml
# List all available products
eol products
# Save products to YAML file
eol products --output products.yaml
# Filter by date range
eol list --from 2025-06-01 --to 2025-12-31
# Filter by time period from today
eol list --max-age 1m # Show EOL dates within 1 month
eol list --max-age 1y # Show EOL dates within 1 year
# Export to CSV
eol export --format csv --out eol_data.csv
# Validate data and policy files
eol validate --policy custom_policy.yamlCreate a YAML policy file (eol_policies.yaml) to define custom EOL rules:
defaults:
years_after_release: 3
products:
Ubuntu:
lts_years: 10
amazon-cdk:
years_after_release: 1The application expects a specific directory structure:
release-data-main/
└── YYYY-MM-DD/
└── releases/
├── product-1.json
├── product-2.json
└── ...
Each JSON file should follow one of these formats:
- With explicit EOL dates:
{
"releases": {
"3.9": {
"name": "3.9",
"releaseDate": "2020-10-05",
"eol": "2025-10-31"
}
},
"versions": {
"3.9.20": {
"name": "3.9.20",
"date": "2024-09-06"
}
}
}- With only release dates:
{
"releases": {},
"versions": {
"2.196.0": {
"name": "2.196.0",
"date": "2025-05-15"
}
}
}MIT License