Loading pkgs/os-specific/linux/kernel/update-mainline.py +23 −19 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 ])" from enum import Enum from bs4 import BeautifulSoup, NavigableString, Tag from dataclasses import dataclass import json import os import pathlib import re import subprocess import urllib.request import sys import os import urllib.request from dataclasses import dataclass from enum import Enum from bs4 import BeautifulSoup, NavigableString, Tag HERE = pathlib.Path(__file__).parent ROOT = HERE.parent.parent.parent.parent VERSIONS_FILE = HERE / "kernels-org.json" class KernelNature(Enum): MAINLINE = 1 STABLE = 2 LONGTERM = 3 @dataclass class KernelRelease: nature: KernelNature Loading @@ -30,20 +31,21 @@ class KernelRelease: link: str eol: bool = False def parse_release(release: Tag) -> KernelRelease | None: columns: list[Tag] = list(release.find_all('td')) columns: list[Tag] = list(release.find_all("td")) try: nature = KernelNature[columns[0].get_text().rstrip(':').upper()] nature = KernelNature[columns[0].get_text().rstrip(":").upper()] except KeyError: return None version = columns[1].get_text().rstrip(' [EOL]') version = columns[1].get_text().rstrip(" [EOL]") date = columns[2].get_text() link = columns[3].find('a') link = columns[3].find("a") if link is not None and isinstance(link, Tag): link = link.attrs.get('href') assert link is not None, f'link for kernel {version} is non-existent' eol = bool(release.find(class_='eolkernel')) link = link.attrs.get("href") assert link is not None, f"link for kernel {version} is non-existent" eol = bool(release.find(class_="eolkernel")) return KernelRelease( nature=nature, Loading @@ -54,14 +56,16 @@ def parse_release(release: Tag) -> KernelRelease | None: eol=eol, ) def get_branch(version: str): # This is a testing kernel. if 'rc' in version: return 'testing' if "rc" in version: return "testing" else: major, minor, *_ = version.split(".") return f"{major}.{minor}" def get_hash(kernel: KernelRelease): if kernel.branch == "testing": args = ["--unpack"] Loading @@ -83,19 +87,19 @@ def commit(message): def main(): kernel_org = urllib.request.urlopen("https://kernel.org/") soup = BeautifulSoup(kernel_org.read().decode(), "lxml") release_table = soup.find(id='releases') release_table = soup.find(id="releases") if not release_table or isinstance(release_table, NavigableString): print(release_table) print('Failed to find the release table on https://kernel.org') print("Failed to find the release table on https://kernel.org") sys.exit(1) releases = release_table.find_all('tr') releases = release_table.find_all("tr") parsed_releases = filter(None, [parse_release(release) for release in releases]) all_kernels = json.load(VERSIONS_FILE.open()) for kernel in parsed_releases: branch = get_branch(kernel.version) nixpkgs_branch = branch.replace('.', '_') nixpkgs_branch = branch.replace(".", "_") old_version = all_kernels.get(branch, {}).get("version") if old_version == kernel.version: Loading Loading
pkgs/os-specific/linux/kernel/update-mainline.py +23 −19 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 ])" from enum import Enum from bs4 import BeautifulSoup, NavigableString, Tag from dataclasses import dataclass import json import os import pathlib import re import subprocess import urllib.request import sys import os import urllib.request from dataclasses import dataclass from enum import Enum from bs4 import BeautifulSoup, NavigableString, Tag HERE = pathlib.Path(__file__).parent ROOT = HERE.parent.parent.parent.parent VERSIONS_FILE = HERE / "kernels-org.json" class KernelNature(Enum): MAINLINE = 1 STABLE = 2 LONGTERM = 3 @dataclass class KernelRelease: nature: KernelNature Loading @@ -30,20 +31,21 @@ class KernelRelease: link: str eol: bool = False def parse_release(release: Tag) -> KernelRelease | None: columns: list[Tag] = list(release.find_all('td')) columns: list[Tag] = list(release.find_all("td")) try: nature = KernelNature[columns[0].get_text().rstrip(':').upper()] nature = KernelNature[columns[0].get_text().rstrip(":").upper()] except KeyError: return None version = columns[1].get_text().rstrip(' [EOL]') version = columns[1].get_text().rstrip(" [EOL]") date = columns[2].get_text() link = columns[3].find('a') link = columns[3].find("a") if link is not None and isinstance(link, Tag): link = link.attrs.get('href') assert link is not None, f'link for kernel {version} is non-existent' eol = bool(release.find(class_='eolkernel')) link = link.attrs.get("href") assert link is not None, f"link for kernel {version} is non-existent" eol = bool(release.find(class_="eolkernel")) return KernelRelease( nature=nature, Loading @@ -54,14 +56,16 @@ def parse_release(release: Tag) -> KernelRelease | None: eol=eol, ) def get_branch(version: str): # This is a testing kernel. if 'rc' in version: return 'testing' if "rc" in version: return "testing" else: major, minor, *_ = version.split(".") return f"{major}.{minor}" def get_hash(kernel: KernelRelease): if kernel.branch == "testing": args = ["--unpack"] Loading @@ -83,19 +87,19 @@ def commit(message): def main(): kernel_org = urllib.request.urlopen("https://kernel.org/") soup = BeautifulSoup(kernel_org.read().decode(), "lxml") release_table = soup.find(id='releases') release_table = soup.find(id="releases") if not release_table or isinstance(release_table, NavigableString): print(release_table) print('Failed to find the release table on https://kernel.org') print("Failed to find the release table on https://kernel.org") sys.exit(1) releases = release_table.find_all('tr') releases = release_table.find_all("tr") parsed_releases = filter(None, [parse_release(release) for release in releases]) all_kernels = json.load(VERSIONS_FILE.open()) for kernel in parsed_releases: branch = get_branch(kernel.version) nixpkgs_branch = branch.replace('.', '_') nixpkgs_branch = branch.replace(".", "_") old_version = all_kernels.get(branch, {}).get("version") if old_version == kernel.version: Loading