From 5e7a6643ea7a94ce1f63e52280596e730c277525 Mon Sep 17 00:00:00 2001 From: Frank Conrads Date: Wed, 8 Apr 2026 13:52:30 +0200 Subject: [PATCH] Revert tool to last version, bump internal version to 1.1.5 --- check_new_version.bat | 61 ++++ check_new_version.py | 121 ++++++++ endoflifeapi.json | 655 ++++++++++++++++++++++++++++++++++++++++++ latestversion.ini | 6 + 4 files changed, 843 insertions(+) create mode 100644 check_new_version.bat create mode 100644 check_new_version.py create mode 100644 endoflifeapi.json create mode 100644 latestversion.ini diff --git a/check_new_version.bat b/check_new_version.bat new file mode 100644 index 0000000..4de60b1 --- /dev/null +++ b/check_new_version.bat @@ -0,0 +1,61 @@ +@echo off +setlocal EnableExtensions EnableDelayedExpansion + +set UPDATE_DIR=%~dp0updates +if not exist "%UPDATE_DIR%" mkdir "%UPDATE_DIR%" + +set TMP_OUT=%TEMP%\update_check_%RANDOM%.txt +set TMP_OUT_2=%TEMP%\update_check_%RANDOM%.txt + +python check_new_version.py > "%TMP_OUT%" +set EXITCODE=%ERRORLEVEL% + +if %EXITCODE%==20 ( + echo Fehler beim Update-Check + goto :END +) + +if %EXITCODE%==0 ( + echo Keine Updates verfuegbar. + goto :END +) + +echo. +type "%TMP_OUT%" + +choice /c jn /m "Wollen Sie die Updates-Packages herunterladen?" + +if errorlevel 2 goto :END + + +if exist "%TMP_OUT%" ( + + + findstr /b "PYTHON_DOWNLOAD=" "%TMP_OUT%" >nul + if not errorlevel 1 ( + for /f "tokens=1,* delims==" %%a in ( + 'findstr /b "PYTHON_DOWNLOAD=" "%TMP_OUT%"' + ) do ( + echo Downloading Python update from PYTHON_DOWNLOAD + powershell -NoProfile -Command ^ + "Invoke-WebRequest '%%b' -OutFile '%UPDATE_DIR%\python-embed.zip'" + ) + ) + + findstr /b "CAESIUM_DOWNLOAD=" "%TMP_OUT_2%" >nul + if not errorlevel 1 ( + for /f "tokens=1,* delims==" %%a in ( + 'findstr /b "CAESIUM_DOWNLOAD=" "%TMP_OUT_2%"' + ) do ( + echo Downloading caesiumclt update from CAESIUM_DOWNLOAD + + powershell -NoProfile -Command ^ + "Invoke-WebRequest '%%b' -OutFile '%UPDATE_DIR%\caesiumclt.zip'" + ) + ) +) + +:END +del "%TMP_OUT%" >nul 2>&1 +del "%TMP_OUT_2%" >nul 2>&1 +endlocal \ No newline at end of file diff --git a/check_new_version.py b/check_new_version.py new file mode 100644 index 0000000..aa00ae1 --- /dev/null +++ b/check_new_version.py @@ -0,0 +1,121 @@ +import argparse +import configparser +import json +import sys +import urllib.request +from pathlib import Path + +INI_FILE = Path("latestversion.ini") +PYTHON_API = "https://endoflife.date/api/v1/products/python" +CAESIUM_API = "https://api.github.com/repos/Lymphatus/caesium-clt/tags" + +EXIT_NO_UPDATE = 0 +EXIT_UPDATE_AVAILABLE = 10 +EXIT_ERROR = 20 + + +def fetch_json(url): + with urllib.request.urlopen(url, timeout=15) as r: + return json.loads(r.read().decode("utf-8")) + + +def load_ini(): + cfg = configparser.ConfigParser() + cfg.read(INI_FILE, encoding="utf-8") + return cfg + + +def save_ini(cfg): + with open(INI_FILE, "w", encoding="utf-8") as f: + cfg.write(f) + + +def check_python(cfg, result): + used = cfg["DEFAULT"].get("python_used_version", "").strip() + major_minor = ".".join(used.split(".")[:2]) + + data = fetch_json(PYTHON_API) + releases = data.get("result", {}).get("releases", []) + + for rel in releases: + if rel.get("name") != major_minor: + continue + + latest = rel.get("latest", {}).get("name", "") + is_maintained = rel.get("isMaintained", True) + + cfg["DEFAULT"]["python_latest_version"] = latest + + if used != latest: + result["updates"].append({ + "tool": "python", + "used": used, + "latest": latest, + "maintained": is_maintained, + "url": ( + f"https://www.python.org/ftp/python/{latest}/" + f"python-{latest}-embed-amd64.zip" + ) + }) + + +def check_caesium(cfg, result): + used = cfg["DEFAULT"].get("caesiumclt_used_version", "").strip() + + tags = fetch_json(CAESIUM_API) + latest = tags[0]["name"] + + cfg["DEFAULT"]["caesiumclt_latest_version"] = latest + + if used != latest: + result["updates"].append({ + "tool": "caesiumclt", + "used": used, + "latest": latest, + "maintained": True, + "url": ( + f"https://github.com/Lymphatus/caesium-clt/releases/download/{latest}/" + f"caesiumclt-{latest}-x86_64-pc-windows-msvc.zip" + ) + }) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--yes", action="store_true") + parser.add_argument("--json", action="store_true") + args = parser.parse_args() + + cfg = load_ini() + result = {"updates": []} + + try: + check_python(cfg, result) + check_caesium(cfg, result) + except Exception as e: + print(f"ERROR: {e}") + sys.exit(EXIT_ERROR) + + save_ini(cfg) + + if args.json: + print(json.dumps(result, indent=2)) + else: + for u in result["updates"]: + print( + f"{u['tool'].capitalize()}: aktuell genutzt {u['used']}, " + f"neu {u['latest']}, download?" + ) + print(f"{u['tool'].upper()}_DOWNLOAD={u['url']}") + + if not u["maintained"]: + print( + f"WARNING: Achtung Version {u['latest']} " + "wird nicht mehr gewartet!" + ) + + sys.exit(EXIT_UPDATE_AVAILABLE if result["updates"] else EXIT_NO_UPDATE) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/endoflifeapi.json b/endoflifeapi.json new file mode 100644 index 0000000..47c8b10 --- /dev/null +++ b/endoflifeapi.json @@ -0,0 +1,655 @@ +{ + "schema_version": "1.2.0", + "generated_at": "2026-04-08T07:17:19+00:00", + "last_modified": "2026-04-08T00:10:16+00:00", + "result": { + "name": "python", + "aliases": [], + "label": "Python", + "category": "lang", + "tags": [ + "lang" + ], + "versionCommand": "python --version\n\n# or alternatively\npython3 --version", + "identifiers": [ + { + "type": "purl", + "id": "pkg:generic/python" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.14" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.13" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.12" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.11" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.10" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.9" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.8" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.7" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.6" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.5" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.4" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.3" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.2" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.1" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python3.0" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.7" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.6" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.5" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.4" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.3" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.2" + }, + { + "type": "purl", + "id": "pkg:deb/ubuntu/python2.1" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.14" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.13" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.11" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.9" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.7" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.5" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.4" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.2" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python3.1" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.7" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.6" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.5" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.4" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.3" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.2" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python2.1" + }, + { + "type": "purl", + "id": "pkg:deb/debian/python1.5" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.14" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.13" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.12" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.11" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.10" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.9" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.8" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.6" + }, + { + "type": "purl", + "id": "pkg:rpm/fedora/python3.5" + }, + { + "type": "purl", + "id": "pkg:rpm/amzn/python" + }, + { + "type": "purl", + "id": "pkg:rpm/amzn/python2" + }, + { + "type": "purl", + "id": "pkg:rpm/amzn/python3" + }, + { + "type": "purl", + "id": "pkg:rpm/redhat/python" + }, + { + "type": "purl", + "id": "pkg:rpm/redhat/python2" + }, + { + "type": "purl", + "id": "pkg:rpm/redhat/python3" + }, + { + "type": "purl", + "id": "pkg:rpm/centos/python" + }, + { + "type": "purl", + "id": "pkg:rpm/centos/python2" + }, + { + "type": "purl", + "id": "pkg:rpm/centos/python3" + }, + { + "type": "purl", + "id": "pkg:docker/library/python" + }, + { + "type": "purl", + "id": "pkg:docker/circleci/python" + }, + { + "type": "purl", + "id": "pkg:docker/bitnami/python" + }, + { + "type": "purl", + "id": "pkg:github/python/cpython" + }, + { + "type": "repology", + "id": "python" + }, + { + "type": "cpe", + "id": "cpe:/a:python:python" + }, + { + "type": "cpe", + "id": "cpe:2.3:a:python:python" + } + ], + "labels": { + "eoas": "Active Support", + "discontinued": null, + "eol": "Security Support", + "eoes": null + }, + "links": { + "icon": "https://cdn.jsdelivr.net/npm/simple-icons/icons/python.svg", + "html": "https://endoflife.date/python", + "releasePolicy": "https://devguide.python.org/versions/" + }, + "releases": [ + { + "name": "3.14", + "codename": null, + "label": "3.14", + "releaseDate": "2025-10-07", + "isLts": false, + "ltsFrom": null, + "isEoas": false, + "eoasFrom": "2027-10-01", + "isEol": false, + "eolFrom": "2030-10-31", + "isMaintained": true, + "latest": { + "name": "3.14.4", + "date": "2026-04-07", + "link": "https://www.python.org/downloads/release/python-3144/" + }, + "custom": { + "pep": "PEP-0745" + } + }, + { + "name": "3.13", + "codename": null, + "label": "3.13", + "releaseDate": "2024-10-07", + "isLts": false, + "ltsFrom": null, + "isEoas": false, + "eoasFrom": "2026-10-01", + "isEol": false, + "eolFrom": "2029-10-31", + "isMaintained": true, + "latest": { + "name": "3.13.13", + "date": "2026-04-07", + "link": "https://www.python.org/downloads/release/python-31313/" + }, + "custom": { + "pep": "PEP-0719" + } + }, + { + "name": "3.12", + "codename": null, + "label": "3.12", + "releaseDate": "2023-10-02", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2025-04-02", + "isEol": false, + "eolFrom": "2028-10-31", + "isMaintained": true, + "latest": { + "name": "3.12.13", + "date": "2026-03-03", + "link": "https://www.python.org/downloads/release/python-31213/" + }, + "custom": { + "pep": "PEP-0693" + } + }, + { + "name": "3.11", + "codename": null, + "label": "3.11", + "releaseDate": "2022-10-24", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2024-04-01", + "isEol": false, + "eolFrom": "2027-10-31", + "isMaintained": true, + "latest": { + "name": "3.11.15", + "date": "2026-03-03", + "link": "https://www.python.org/downloads/release/python-31115/" + }, + "custom": { + "pep": "PEP-0664" + } + }, + { + "name": "3.10", + "codename": null, + "label": "3.10", + "releaseDate": "2021-10-04", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2023-04-05", + "isEol": false, + "eolFrom": "2026-10-31", + "isMaintained": true, + "latest": { + "name": "3.10.20", + "date": "2026-03-03", + "link": "https://www.python.org/downloads/release/python-31020/" + }, + "custom": { + "pep": "PEP-0619" + } + }, + { + "name": "3.9", + "codename": null, + "label": "3.9", + "releaseDate": "2020-10-05", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2022-05-17", + "isEol": true, + "eolFrom": "2025-10-31", + "isMaintained": false, + "latest": { + "name": "3.9.25", + "date": "2025-10-31", + "link": "https://www.python.org/downloads/release/python-3925/" + }, + "custom": { + "pep": "PEP-0596" + } + }, + { + "name": "3.8", + "codename": null, + "label": "3.8", + "releaseDate": "2019-10-14", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2021-05-03", + "isEol": true, + "eolFrom": "2024-10-07", + "isMaintained": false, + "latest": { + "name": "3.8.20", + "date": "2024-09-06", + "link": "https://www.python.org/downloads/release/python-3820/" + }, + "custom": { + "pep": "PEP-0569" + } + }, + { + "name": "3.7", + "codename": null, + "label": "3.7", + "releaseDate": "2018-06-27", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2020-06-27", + "isEol": true, + "eolFrom": "2023-06-27", + "isMaintained": false, + "latest": { + "name": "3.7.17", + "date": "2023-06-05", + "link": "https://www.python.org/downloads/release/python-3717/" + }, + "custom": { + "pep": "PEP-0537" + } + }, + { + "name": "3.6", + "codename": null, + "label": "3.6", + "releaseDate": "2016-12-23", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": "2018-12-24", + "isEol": true, + "eolFrom": "2021-12-23", + "isMaintained": false, + "latest": { + "name": "3.6.15", + "date": "2021-09-03", + "link": "https://www.python.org/downloads/release/python-3615/" + }, + "custom": { + "pep": "PEP-0494" + } + }, + { + "name": "3.5", + "codename": null, + "label": "3.5", + "releaseDate": "2015-09-13", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2020-09-30", + "isMaintained": false, + "latest": { + "name": "3.5.10", + "date": "2020-09-05", + "link": "https://www.python.org/downloads/release/python-3510/" + }, + "custom": { + "pep": "PEP-0478" + } + }, + { + "name": "3.4", + "codename": null, + "label": "3.4", + "releaseDate": "2014-03-16", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2019-03-18", + "isMaintained": false, + "latest": { + "name": "3.4.10", + "date": "2019-03-18", + "link": "https://www.python.org/downloads/release/python-3410/" + }, + "custom": { + "pep": "PEP-0429" + } + }, + { + "name": "3.3", + "codename": null, + "label": "3.3", + "releaseDate": "2012-09-29", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2017-09-29", + "isMaintained": false, + "latest": { + "name": "3.3.7", + "date": "2017-09-19", + "link": "https://www.python.org/downloads/release/python-337/" + }, + "custom": { + "pep": "PEP-0398" + } + }, + { + "name": "3.2", + "codename": null, + "label": "3.2", + "releaseDate": "2011-02-20", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2016-02-20", + "isMaintained": false, + "latest": { + "name": "3.2.6", + "date": "2014-10-12", + "link": "https://www.python.org/downloads/release/python-326/" + }, + "custom": { + "pep": "PEP-0392" + } + }, + { + "name": "2.7", + "codename": null, + "label": "2.7", + "releaseDate": "2010-07-03", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2020-01-01", + "isMaintained": false, + "latest": { + "name": "2.7.18", + "date": "2020-04-19", + "link": "https://www.python.org/downloads/release/python-2718/" + }, + "custom": { + "pep": "PEP-0373" + } + }, + { + "name": "3.1", + "codename": null, + "label": "3.1", + "releaseDate": "2009-06-27", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2012-04-09", + "isMaintained": false, + "latest": { + "name": "3.1.5", + "date": "2012-04-06", + "link": "https://www.python.org/downloads/release/python-315/" + }, + "custom": { + "pep": "PEP-0375" + } + }, + { + "name": "3.0", + "codename": null, + "label": "3.0", + "releaseDate": "2008-12-03", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2009-06-27", + "isMaintained": false, + "latest": { + "name": "3.0.1", + "date": "2009-02-12", + "link": "https://www.python.org/downloads/release/python-301/" + }, + "custom": { + "pep": "PEP-0361" + } + }, + { + "name": "2.6", + "codename": null, + "label": "2.6", + "releaseDate": "2008-10-01", + "isLts": false, + "ltsFrom": null, + "isEoas": true, + "eoasFrom": null, + "isEol": true, + "eolFrom": "2013-10-29", + "isMaintained": false, + "latest": { + "name": "2.6.9", + "date": "2013-10-29", + "link": "https://www.python.org/downloads/release/python-269/" + }, + "custom": { + "pep": "PEP-0361" + } + } + ] + } +} \ No newline at end of file diff --git a/latestversion.ini b/latestversion.ini new file mode 100644 index 0000000..b6c48f7 --- /dev/null +++ b/latestversion.ini @@ -0,0 +1,6 @@ +[DEFAULT] +python_used_version = 3.14.4 +python_latest_version = 3.14.4 +caesiumclt_used_version = v1.3.0 +caesiumclt_latest_version = v1.3.0 +