Skip to main content

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

  1. Create a virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install development dependencies:
pip install -r requirements.txt
pip install -r requirements-dev.txt
  1. Set up the release data directory:
mkdir -p release-data-main/2025-05-19/releases

Running the Application

  1. Basic usage:
# List upcoming EOL dates
eol list --root release-data-main

# List all products
eol products --root release-data-main
  1. 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
  1. 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
  1. 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

  1. 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
  1. Build production container:
docker build -f Dockerfile -t eol-timeline .

Environment Variables

  • EOL_DATA_ROOT: Root directory containing release-data
  • PYTHONPATH: 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:

  1. 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"
    }
  }
}
  1. With only release dates:
{
  "releases": {},
  "versions": {
    "2.196.0": {
      "name": "2.196.0",
      "date": "2025-05-15"
    }
  }
}

License

MIT License

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eol_timeline-0.1.0.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eol_timeline-0.1.0-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

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

Hashes for eol_timeline-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d28a36b7de9bfbc7f06e432549bf1a2408f69d14850027603b567965ac85bd10
MD5 e9654f0cc3ee4c41c6ea7f6106bc1dc7
BLAKE2b-256 489ebed728c28d83dc658ca788b0e63ae471c424c7db8ac2629b86e7e9ccb7a9

See more details on using hashes here.

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

Hashes for eol_timeline-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7a8eb985f41e2f9759b14173e9bc6860a90ffd9fd69bd62f94e0410df94b6d14
MD5 431d746d4c75670e7212aafce4be479e
BLAKE2b-256 626e50dde6fa5c5751de72e65014943da8f9e444d8673f92e96134e70b863d64

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page