A tool for tracking software end-of-life dates
Project description
EOL Timeline
A command-line tool for tracking software end-of-life (EOL) dates across multiple products.
Features
- 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
Installation
From PyPI (recommended)
pip install eol-timeline
From Source
# Clone the repository
git clone https://github.com/yourusername/endoflife-timeline.git
cd endoflife-timeline
# Install the package with development dependencies
pip install -e ".[dev]"
Requirements
- Python 3.12+
- Dependencies listed in
requirements.txt
Local Development
Setting up the Development Environment
- 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
Running the Application
- 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.csv
Testing
Run tests using pytest:
pytest eol_timeline/tests/ -v
Using Docker
- 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 .
Environment Variables
EOL_DATA_ROOT: Root directory containing release-dataPYTHONPATH: Python path for module imports
Usage
Basic Command
# List all upcoming EOL dates starting from today
eol list --root /path/to/release-data-main
Command-line Options
Usage: 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.
Examples
# 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.yaml
Customizing EOL Policies
Create 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: 1
Data Directory Structure
The 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"
}
}
}
License
MIT License
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_timeline-0.1.0.tar.gz.
File metadata
- Download URL: eol_timeline-0.1.0.tar.gz
- Upload date:
- Size: 15.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d28a36b7de9bfbc7f06e432549bf1a2408f69d14850027603b567965ac85bd10
|
|
| MD5 |
e9654f0cc3ee4c41c6ea7f6106bc1dc7
|
|
| BLAKE2b-256 |
489ebed728c28d83dc658ca788b0e63ae471c424c7db8ac2629b86e7e9ccb7a9
|
File details
Details for the file eol_timeline-0.1.0-py3-none-any.whl.
File metadata
- Download URL: eol_timeline-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a8eb985f41e2f9759b14173e9bc6860a90ffd9fd69bd62f94e0410df94b6d14
|
|
| MD5 |
431d746d4c75670e7212aafce4be479e
|
|
| BLAKE2b-256 |
626e50dde6fa5c5751de72e65014943da8f9e444d8673f92e96134e70b863d64
|