#!/usr/bin/env python3 from datetime import date, datetime from json import dump, load from urllib.request import urlopen # Fetch Python version data from endoflife.date with urlopen('https://endoflife.date/api/python.json') as response: versions = load(response) # Get today's date for EOL comparison today = date.today() # Filter for active versions (released and not EOL'd yet) active_versions = [] for version in versions: cycle = version['cycle'] # Skip Python 2.x versions if cycle.startswith('2.'): continue # Check if version has been released release_date_str = version.get('releaseDate') if release_date_str: release_date = datetime.strptime(release_date_str, '%Y-%m-%d').date() if release_date > today: # Skip pre-release versions continue # Check if version is not EOL'd yet eol_str = version.get('eol') if eol_str: eol_date = datetime.strptime(eol_str, '%Y-%m-%d').date() if eol_date >= today: active_versions.append(cycle) # Sort versions active_versions.sort(key=lambda v: tuple(map(int, v.split('.')))) # Determine current version (the latest active version) current_version = active_versions[-1] if active_versions else None # Update .ci-config.json config_path = '.ci-config.json' with open(config_path, 'r') as fh: config = load(fh) config['python_versions_active'] = active_versions config['python_version_current'] = current_version with open(config_path, 'w') as fh: dump(config, fh, indent=2) fh.write('\n') print(f'Updated {config_path}:') print(f' Active versions: {", ".join(active_versions)}') print(f' Current version: {current_version}')