diff --git a/.ruff.toml b/.ruff.toml index 5245594a..78196bc4 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -1,6 +1,7 @@ select = [ "E", # pycodestyle errors "F", # pyflakes errors + "I", # isort "ISC", # flake8-implicit-str-concat "PGH", # pygrep-hooks "RUF100", # unused noqa (yesqa) diff --git a/latest.py b/latest.py index 44cf23be..bcc77088 100644 --- a/latest.py +++ b/latest.py @@ -1,15 +1,16 @@ import argparse -import logging -import frontmatter +import datetime import json +import logging import os import re -import datetime +from os.path import exists from pathlib import Path + +import frontmatter +from packaging.version import InvalidVersion, Version from ruamel.yaml import YAML from ruamel.yaml.resolver import Resolver -from packaging.version import Version, InvalidVersion -from os.path import exists """ Updates the `release`, `latest` and `latestReleaseDate` property in automatically updated pages diff --git a/report.py b/report.py index 5e666135..a68c3bc7 100755 --- a/report.py +++ b/report.py @@ -1,8 +1,9 @@ -import frontmatter import sys import time from glob import glob +import frontmatter + products = {} count = 0 count_auto = 0 diff --git a/src/amazon-neptune.py b/src/amazon-neptune.py index 8bc839c8..9b9548ec 100644 --- a/src/amazon-neptune.py +++ b/src/amazon-neptune.py @@ -1,8 +1,7 @@ import re import xml.dom.minidom -from common import http -from common import dates -from common import endoflife + +from common import dates, endoflife, http """Fetches Amazon Neptune versions from its RSS feed on docs.aws.amazon.com.""" diff --git a/src/apache-http-server.py b/src/apache-http-server.py index 80783d0d..fc4fc7bd 100644 --- a/src/apache-http-server.py +++ b/src/apache-http-server.py @@ -1,6 +1,6 @@ import re -from common import dates -from common import endoflife + +from common import dates, endoflife from common.git import Git """Fetches Apache HTTP Server versions and release date from its git repository diff --git a/src/apple.py b/src/apple.py index 6adcd20a..f12e8ff8 100644 --- a/src/apple.py +++ b/src/apple.py @@ -1,9 +1,8 @@ import logging import re + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetches and parses version and release date information from Apple's support website for macOS, iOS, iPadOS, and watchOS. While all URLs are fetched once for performance reasons, the actual diff --git a/src/artifactory.py b/src/artifactory.py index be29bc5a..e965ac05 100644 --- a/src/artifactory.py +++ b/src/artifactory.py @@ -1,6 +1,6 @@ import datetime -from common import dates -from common import endoflife + +from common import dates, endoflife from requests_html import HTMLSession """Fetches Artifactory versions from https://jfrog.com, using requests_html because JavaScript is diff --git a/src/aws-lambda.py b/src/aws-lambda.py index 27fc2094..eed94f63 100644 --- a/src/aws-lambda.py +++ b/src/aws-lambda.py @@ -1,7 +1,7 @@ import datetime + from bs4 import BeautifulSoup -from common import http -from common import endoflife +from common import endoflife, http """Fetches AWS lambda runtimes from https://docs.aws.amazon.com. diff --git a/src/cgit.py b/src/cgit.py index 5689ece1..65aaefeb 100644 --- a/src/cgit.py +++ b/src/cgit.py @@ -1,8 +1,7 @@ import sys + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetches versions from repositories managed with cgit, such as the Linux kernel repository. Ideally we would want to use the git repository directly, but cgit-managed repositories don't support partial clone.""" diff --git a/src/coldfusion.py b/src/coldfusion.py index a3d02ef0..2cdb8efb 100644 --- a/src/coldfusion.py +++ b/src/coldfusion.py @@ -1,10 +1,9 @@ import re -from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife from datetime import datetime +from bs4 import BeautifulSoup +from common import dates, endoflife, http + """Fetches versions from Adobe ColdFusion release notes on helpx.adobe.com. x.y.0 release dates are unfortunately not available in the release notes and have to updated them manually each time a diff --git a/src/common/endoflife.py b/src/common/endoflife.py index 3ce36f54..a5d2cc0f 100644 --- a/src/common/endoflife.py +++ b/src/common/endoflife.py @@ -1,11 +1,13 @@ -import frontmatter import json import logging import os import re from datetime import datetime from glob import glob + +import frontmatter from liquid import Template + logging.basicConfig(format=logging.BASIC_FORMAT, level=logging.INFO) # Handle versions having at least 2 digits (ex. 1.2) and at most 4 digits (ex. 1.2.3.4), with an optional leading "v". diff --git a/src/common/http.py b/src/common/http.py index 4191a67a..109ac531 100644 --- a/src/common/http.py +++ b/src/common/http.py @@ -1,5 +1,6 @@ import logging from concurrent.futures import as_completed + from requests import Response from requests.adapters import HTTPAdapter from requests.exceptions import ChunkedEncodingError diff --git a/src/confluence.py b/src/confluence.py index 5cb94344..76464b6f 100644 --- a/src/confluence.py +++ b/src/confluence.py @@ -1,6 +1,5 @@ +from common import dates, endoflife from requests_html import HTMLSession -from common import dates -from common import endoflife """Fetches Confluence versions from www.atlassian.com. diff --git a/src/cos.py b/src/cos.py index f1418231..c5120def 100644 --- a/src/cos.py +++ b/src/cos.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http MILESTONE_PATTERN = re.compile(r'COS \d+ LTS') VERSION_PATTERN = re.compile(r"^(cos-\d+-\d+-\d+-\d+)") diff --git a/src/couchbase-server.py b/src/couchbase-server.py index b4463984..fe968d0d 100644 --- a/src/couchbase-server.py +++ b/src/couchbase-server.py @@ -1,10 +1,9 @@ import re -from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife from datetime import datetime +from bs4 import BeautifulSoup +from common import dates, endoflife, http + """Fetches versions from release notes of each minor version on docs.couchbase.com. Dates are not available for all versions, so they must be set manually in some cases. diff --git a/src/debian.py b/src/debian.py index 776a1dd7..9db85116 100644 --- a/src/debian.py +++ b/src/debian.py @@ -1,8 +1,8 @@ -from common import dates -from common import endoflife -from common.git import Git from subprocess import run +from common import dates, endoflife +from common.git import Git + """Fetch Debian versions by parsing news in www.debian.org source repository.""" diff --git a/src/distrowatch.py b/src/distrowatch.py index 319f44bb..31477e61 100644 --- a/src/distrowatch.py +++ b/src/distrowatch.py @@ -1,8 +1,7 @@ import sys + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http METHOD = 'distrowatch' diff --git a/src/docker_hub.py b/src/docker_hub.py index 44b184c7..35d342f2 100644 --- a/src/docker_hub.py +++ b/src/docker_hub.py @@ -1,7 +1,6 @@ import sys -from common import dates -from common import endoflife -from common import http + +from common import dates, endoflife, http """Fetches releases from the Docker Hub API. diff --git a/src/eks.py b/src/eks.py index c3c58392..292a5dbb 100644 --- a/src/eks.py +++ b/src/eks.py @@ -1,7 +1,5 @@ from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetches EKS versions from AWS docs. Now that AWS no longer publishes docs on GitHub, we use the Web Archive to still get the older versions.""" diff --git a/src/firefox.py b/src/firefox.py index a99089c4..017bce8b 100644 --- a/src/firefox.py +++ b/src/firefox.py @@ -1,9 +1,8 @@ import re import urllib.parse + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetch Firefox versions with their dates from https://www.mozilla.org/. diff --git a/src/git.py b/src/git.py index c164d5ce..6338fc37 100644 --- a/src/git.py +++ b/src/git.py @@ -1,6 +1,6 @@ import sys -from common import dates -from common import endoflife + +from common import dates, endoflife from common.git import Git """Fetches versions from tags in a git repository. This replace the old update.rb script.""" diff --git a/src/github-releases.py b/src/github-releases.py index 95f4d15b..0ff54c78 100644 --- a/src/github-releases.py +++ b/src/github-releases.py @@ -1,9 +1,9 @@ import json import logging -import sys import subprocess -from common import dates -from common import endoflife +import sys + +from common import dates, endoflife """Fetches versions from GitHub releases using the GraphQL API and the GitHub CLI. diff --git a/src/gke.py b/src/gke.py index 0b1fbf74..1ecd5563 100644 --- a/src/gke.py +++ b/src/gke.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http # https://regex101.com/r/zPxBqT/1 VERSION_PATTERN = re.compile(r"\d.\d+\.\d+-gke\.\d+") diff --git a/src/graalvm.py b/src/graalvm.py index 2ebc5576..817b3396 100644 --- a/src/graalvm.py +++ b/src/graalvm.py @@ -1,7 +1,5 @@ from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http product = endoflife.Product("graalvm") print(f"::group::{product.name}") diff --git a/src/haproxy.py b/src/haproxy.py index a1d169db..7a0ea3c7 100644 --- a/src/haproxy.py +++ b/src/haproxy.py @@ -1,9 +1,9 @@ import re -from bs4 import BeautifulSoup -from common import http -from common import endoflife from datetime import datetime +from bs4 import BeautifulSoup +from common import endoflife, http + CYCLE_PATTERN = re.compile(r"^(\d+\.\d+)/$") DATE_AND_VERSION_PATTERN = re.compile(r"^(\d{4})/(\d{2})/(\d{2})\s+:\s+(\d+\.\d+\.\d.?)$") # https://regex101.com/r/1JCnFC/1 diff --git a/src/ibm-aix.py b/src/ibm-aix.py index 9b0de490..6e9c08c3 100644 --- a/src/ibm-aix.py +++ b/src/ibm-aix.py @@ -1,7 +1,5 @@ from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http URLS = [ "https://web.archive.org/web/20210123024247/https://www.ibm.com/support/pages/aix-support-lifecycle-information", diff --git a/src/jira.py b/src/jira.py index b1652fe3..0960072e 100644 --- a/src/jira.py +++ b/src/jira.py @@ -1,6 +1,5 @@ +from common import dates, endoflife from requests_html import HTMLSession -from common import dates -from common import endoflife """Fetches Jira versions from www.atlassian.com. diff --git a/src/looker.py b/src/looker.py index 9e445c5a..9f32eb9a 100644 --- a/src/looker.py +++ b/src/looker.py @@ -1,9 +1,8 @@ import re import xml.dom.minidom + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetch Looker versions from the Google Cloud release notes RSS feed. """ diff --git a/src/maven.py b/src/maven.py index f187688e..b101ee26 100644 --- a/src/maven.py +++ b/src/maven.py @@ -1,7 +1,7 @@ import datetime import sys -from common import http -from common import endoflife + +from common import endoflife, http METHOD = "maven" diff --git a/src/npm.py b/src/npm.py index 4a1e9f2a..016d3ddf 100644 --- a/src/npm.py +++ b/src/npm.py @@ -1,7 +1,6 @@ import sys -from common import dates -from common import http -from common import endoflife + +from common import dates, endoflife, http METHOD = "npm" diff --git a/src/nutanix.py b/src/nutanix.py index 65a7c04c..38b93755 100644 --- a/src/nutanix.py +++ b/src/nutanix.py @@ -1,6 +1,4 @@ -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http """Fetch Nutanix products versions from https://portal.nutanix.com/api/v1.""" diff --git a/src/oracle-jdk.py b/src/oracle-jdk.py index 43539724..043602cf 100644 --- a/src/oracle-jdk.py +++ b/src/oracle-jdk.py @@ -1,6 +1,5 @@ +from common import dates, endoflife from requests_html import HTMLSession -from common import dates -from common import endoflife """Fetch Java versions from https://www.java.com/releases/. diff --git a/src/palo-alto-networks.py b/src/palo-alto-networks.py index a743f226..94ebd635 100644 --- a/src/palo-alto-networks.py +++ b/src/palo-alto-networks.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http IDENTIFIERS_BY_PRODUCT = { "pan-os": "pan-os-panorama", diff --git a/src/php.py b/src/php.py index c2a4937b..cf3bc700 100644 --- a/src/php.py +++ b/src/php.py @@ -1,6 +1,4 @@ -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http MAIN_URL = "https://www.php.net/releases/index.php?json&max=-1" diff --git a/src/plesk.py b/src/plesk.py index d9c608b9..05c4c812 100644 --- a/src/plesk.py +++ b/src/plesk.py @@ -1,7 +1,5 @@ from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetches versions from Plesk's change log. diff --git a/src/pypi.py b/src/pypi.py index 231d1c48..c7b0d38f 100644 --- a/src/pypi.py +++ b/src/pypi.py @@ -1,7 +1,6 @@ import sys -from common import http -from common import dates -from common import endoflife + +from common import dates, endoflife, http METHOD = "pypi" diff --git a/src/rds.py b/src/rds.py index ecff69b1..5dec0fed 100644 --- a/src/rds.py +++ b/src/rds.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http """Fetches Amazon RDS versions from the version management pages on AWS docs. diff --git a/src/red-hat-openshift.py b/src/red-hat-openshift.py index 949af534..0d0bf397 100644 --- a/src/red-hat-openshift.py +++ b/src/red-hat-openshift.py @@ -1,6 +1,6 @@ import re -from common import dates -from common import endoflife + +from common import dates, endoflife from common.git import Git """Fetches Red Hat OpenShift versions from the documentation's git repository""" diff --git a/src/redhat-satellite.py b/src/redhat-satellite.py index 873c5043..649c054c 100644 --- a/src/redhat-satellite.py +++ b/src/redhat-satellite.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http """Fetches Satellite versions from access.redhat.com. diff --git a/src/rhel.py b/src/rhel.py index 443a1c88..9539264a 100644 --- a/src/rhel.py +++ b/src/rhel.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http # https://regex101.com/r/877ibq/1 VERSION_PATTERN = re.compile(r"RHEL (?P\d)(\. ?(?P\d+))?(( Update (?P\d))| GA)?") diff --git a/src/rockylinux.py b/src/rockylinux.py index 732f1cdb..6cfcb124 100644 --- a/src/rockylinux.py +++ b/src/rockylinux.py @@ -1,6 +1,4 @@ -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http product = endoflife.Product("rockylinux") print(f"::group::{product.name}") diff --git a/src/ros.py b/src/ros.py index 7f0d754b..e77064e9 100644 --- a/src/ros.py +++ b/src/ros.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http # https://regex101.com/r/c1ribd/1 VERSION_PATTERN = re.compile(r"^ROS (?P(\w| )+)") diff --git a/src/sles.py b/src/sles.py index 540057e7..f6d7b570 100644 --- a/src/sles.py +++ b/src/sles.py @@ -1,8 +1,7 @@ import logging + from bs4 import BeautifulSoup -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http product = endoflife.Product("sles") print(f"::group::{product.name}") diff --git a/src/splunk.py b/src/splunk.py index ab3dcd88..eb26c998 100644 --- a/src/splunk.py +++ b/src/splunk.py @@ -1,8 +1,7 @@ import re + from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http VERSION_DATE_PATTERN = re.compile(r"Splunk Enterprise (?P\d+\.\d+(?:\.\d+)*) was (?:first )?released on (?P\w+\s\d\d?,\s\d{4})\.", re.MULTILINE) diff --git a/src/typo3.py b/src/typo3.py index c77ac5df..e4e1eea2 100644 --- a/src/typo3.py +++ b/src/typo3.py @@ -1,6 +1,4 @@ -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http product = endoflife.Product("typo3") print(f"::group::{product.name}") diff --git a/src/unity.py b/src/unity.py index 0a1f5f4a..ee60b9f2 100644 --- a/src/unity.py +++ b/src/unity.py @@ -1,7 +1,5 @@ from bs4 import BeautifulSoup -from common import dates -from common import endoflife -from common import http +from common import dates, endoflife, http # Fetches the Unity LTS releases from the Unity website. Non-LTS releases are not listed there, # so this automation is only partial. diff --git a/src/unrealircd.py b/src/unrealircd.py index 3cc70322..2b1215e3 100644 --- a/src/unrealircd.py +++ b/src/unrealircd.py @@ -1,8 +1,7 @@ -import mwparserfromhell import re -from common import dates -from common import endoflife -from common import http + +import mwparserfromhell +from common import dates, endoflife, http DATE_PATTERN = re.compile(r"\d{4}-\d{2}-\d{2}") diff --git a/src/visualstudio.py b/src/visualstudio.py index 6a2683a9..e54ebc70 100644 --- a/src/visualstudio.py +++ b/src/visualstudio.py @@ -1,7 +1,5 @@ from bs4 import BeautifulSoup -from common import http -from common import dates -from common import endoflife +from common import dates, endoflife, http # There is no build history for versions 2015 and below. # This is not a big deal because there was no version for those release in a very long time. diff --git a/update.py b/update.py index 75faf823..232a0cae 100644 --- a/update.py +++ b/update.py @@ -5,9 +5,10 @@ import subprocess import sys import time from base64 import b64encode -from deepdiff import DeepDiff from pathlib import Path +from deepdiff import DeepDiff + def github_output(name, value): if "GITHUB_OUTPUT" not in os.environ: