Loading pkgs/os-specific/linux/kernel/update-mainline.py +24 −16 Original line number Diff line number Diff line #!/usr/bin/env nix-shell #!nix-shell -i python3 -p "python3.withPackages (ps: [ ps.beautifulsoup4 ps.lxml ps.packaging ])" from functools import cached_property from itertools import groupby import json import os Loading Loading @@ -29,20 +30,33 @@ class KernelNature(Enum): class KernelRelease: nature: KernelNature version: str branch: str date: str link: str eol: bool = False @cached_property def parsed_version(self) -> Version: return parse_version(self.version) @cached_property def branch(self) -> str: version = self.parsed_version # This is a testing kernel. if version.is_prerelease: return "testing" else: return f"{version.major}.{version.minor}" def parse_release(release: Tag) -> KernelRelease | None: columns: list[Tag] = list(release.find_all("td")) try: nature = KernelNature[columns[0].get_text().rstrip(":").upper()] except KeyError: # skip linux-next return None version = parse_version(columns[1].get_text().rstrip(" [EOL]")) version = columns[1].get_text().rstrip(" [EOL]") date = columns[2].get_text() link = columns[3].find("a") if link is not None and isinstance(link, Tag): Loading @@ -52,7 +66,6 @@ def parse_release(release: Tag) -> KernelRelease | None: return KernelRelease( nature=nature, branch=get_branch(version), version=version, date=date, link=link, Loading @@ -60,14 +73,6 @@ def parse_release(release: Tag) -> KernelRelease | None: ) def get_branch(version: Version): # This is a testing kernel. if version.is_prerelease: return "testing" else: return f"{version.major}.{version.minor}" def get_hash(kernel: KernelRelease): if kernel.branch == "testing": args = ["--unpack"] Loading Loading @@ -108,16 +113,19 @@ def main(): sys.exit(1) releases = release_table.find_all("tr") parsed_releases = filter(None, [parse_release(release) for release in releases]) parsed_releases = [ parsed for release in releases if (parsed := parse_release(release)) is not None ] all_kernels = json.load(VERSIONS_FILE.open()) oldest_branch = get_oldest_branch() for (branch, kernels) in groupby(parsed_releases, lambda kernel: get_branch(kernel.version)): kernel = max(kernels, key=lambda kernel: kernel.version) for (branch, kernels) in groupby(parsed_releases, lambda kernel: kernel.branch): kernel = max(kernels, key=lambda kernel: kernel.parsed_version) nixpkgs_branch = branch.replace(".", "_") old_version = parse_version(all_kernels.get(branch, {}).get("version")) old_version = all_kernels.get(branch, {}).get("version") if old_version == kernel.version: print(f"linux_{nixpkgs_branch}: {kernel.version} is latest, skipping...") continue Loading @@ -144,7 +152,7 @@ def main(): print(message, file=sys.stderr) all_kernels[branch] = { "version": str(kernel.version), "version": kernel.version, "hash": get_hash(kernel), } Loading Loading
pkgs/os-specific/linux/kernel/update-mainline.py +24 −16 Original line number Diff line number Diff line #!/usr/bin/env nix-shell #!nix-shell -i python3 -p "python3.withPackages (ps: [ ps.beautifulsoup4 ps.lxml ps.packaging ])" from functools import cached_property from itertools import groupby import json import os Loading Loading @@ -29,20 +30,33 @@ class KernelNature(Enum): class KernelRelease: nature: KernelNature version: str branch: str date: str link: str eol: bool = False @cached_property def parsed_version(self) -> Version: return parse_version(self.version) @cached_property def branch(self) -> str: version = self.parsed_version # This is a testing kernel. if version.is_prerelease: return "testing" else: return f"{version.major}.{version.minor}" def parse_release(release: Tag) -> KernelRelease | None: columns: list[Tag] = list(release.find_all("td")) try: nature = KernelNature[columns[0].get_text().rstrip(":").upper()] except KeyError: # skip linux-next return None version = parse_version(columns[1].get_text().rstrip(" [EOL]")) version = columns[1].get_text().rstrip(" [EOL]") date = columns[2].get_text() link = columns[3].find("a") if link is not None and isinstance(link, Tag): Loading @@ -52,7 +66,6 @@ def parse_release(release: Tag) -> KernelRelease | None: return KernelRelease( nature=nature, branch=get_branch(version), version=version, date=date, link=link, Loading @@ -60,14 +73,6 @@ def parse_release(release: Tag) -> KernelRelease | None: ) def get_branch(version: Version): # This is a testing kernel. if version.is_prerelease: return "testing" else: return f"{version.major}.{version.minor}" def get_hash(kernel: KernelRelease): if kernel.branch == "testing": args = ["--unpack"] Loading Loading @@ -108,16 +113,19 @@ def main(): sys.exit(1) releases = release_table.find_all("tr") parsed_releases = filter(None, [parse_release(release) for release in releases]) parsed_releases = [ parsed for release in releases if (parsed := parse_release(release)) is not None ] all_kernels = json.load(VERSIONS_FILE.open()) oldest_branch = get_oldest_branch() for (branch, kernels) in groupby(parsed_releases, lambda kernel: get_branch(kernel.version)): kernel = max(kernels, key=lambda kernel: kernel.version) for (branch, kernels) in groupby(parsed_releases, lambda kernel: kernel.branch): kernel = max(kernels, key=lambda kernel: kernel.parsed_version) nixpkgs_branch = branch.replace(".", "_") old_version = parse_version(all_kernels.get(branch, {}).get("version")) old_version = all_kernels.get(branch, {}).get("version") if old_version == kernel.version: print(f"linux_{nixpkgs_branch}: {kernel.version} is latest, skipping...") continue Loading @@ -144,7 +152,7 @@ def main(): print(message, file=sys.stderr) all_kernels[branch] = { "version": str(kernel.version), "version": kernel.version, "hash": get_hash(kernel), } Loading