Unverified Commit 3a8a371e authored by K900's avatar K900 Committed by GitHub
Browse files

Merge pull request #256670 from K900/more-kernel-cleanups

linux: more update-script cleanups
parents 0b0169e4 eadfc7b1
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
{
    "testing": {
        "version": "6.6-rc1",
        "hash": "02zh3dnikyhhlas9xccia963d4yqmzq0m4b8s10x8mjng3na45hd"
        "version": "6.6-rc2",
        "hash": "sha256:1hbva5vsfi48h82ll4kmhzm5hxp7340bj2smwgvjikam26icaj54"
    },
    "6.5": {
        "version": "6.5.4",
        "hash": "0s8nzd8yaq06bq8byk7aakbk95gh0rhlif26h1biw94v48anrxxx"
        "hash": "sha256:0s8nzd8yaq06bq8byk7aakbk95gh0rhlif26h1biw94v48anrxxx"
    },
    "6.4": {
        "version": "6.4.16",
        "hash": "0zgj1z97jyx7wf12zrnlcp0mj4cl43ais9qsy6dh1jwylf2fq9ln"
        "hash": "sha256:0zgj1z97jyx7wf12zrnlcp0mj4cl43ais9qsy6dh1jwylf2fq9ln"
    },
    "6.1": {
        "version": "6.1.54",
        "hash": "09sfrq2l8f777mx2n9mhb6bgz1064bl04921byqnmk87si31w653"
        "hash": "sha256:09sfrq2l8f777mx2n9mhb6bgz1064bl04921byqnmk87si31w653"
    },
    "5.15": {
        "version": "5.15.132",
        "hash": "1b0qjsaqjw2rk86shmmrj2aasblkn27acjmc761vnjg7sv2baxs1"
        "hash": "sha256:1b0qjsaqjw2rk86shmmrj2aasblkn27acjmc761vnjg7sv2baxs1"
    },
    "5.10": {
        "version": "5.10.195",
        "hash": "0n4vg2i9sq89wnz85arlyvwysh9s83cgzs5bk2wh98bivi5fwfs1"
        "hash": "sha256:0n4vg2i9sq89wnz85arlyvwysh9s83cgzs5bk2wh98bivi5fwfs1"
    },
    "5.4": {
        "version": "5.4.256",
        "hash": "0fim5q9xakwnjfg48bpsic9r2r8dvrjlalqqkm9vh1rml9mhi967"
        "hash": "sha256:0fim5q9xakwnjfg48bpsic9r2r8dvrjlalqqkm9vh1rml9mhi967"
    },
    "4.19": {
        "version": "4.19.294",
        "hash": "03x0xsb8a369zdr81hg6xdl5n5v48k6iwnhj6r29725777lvvbfc"
        "hash": "sha256:03x0xsb8a369zdr81hg6xdl5n5v48k6iwnhj6r29725777lvvbfc"
    },
    "4.14": {
        "version": "4.14.325",
        "hash": "117p1mdha57f6d3kdwac9jrbmib7g77q4xhir8ghl6fmrs1f2sav"
        "hash": "sha256:117p1mdha57f6d3kdwac9jrbmib7g77q4xhir8ghl6fmrs1f2sav"
    }
}
+17 −8
Original line number Diff line number Diff line
{ branch, lib, fetchurl, buildLinux, ... } @ args:
{ branch, lib, fetchurl, fetchzip, buildLinux, ... } @ args:

let
  allKernels = builtins.fromJSON (builtins.readFile ./kernels-org.json);
  thisKernel = allKernels.${branch};

  args' = (builtins.removeAttrs args ["branch"]) // rec {
  inherit (thisKernel) version;
    modDirVersion = lib.versions.pad 3 version;
    extraMeta.branch = branch;

    src = fetchurl {
  src =
    # testing kernels are a special case because they don't have tarballs on the CDN
    if branch == "testing"
      then fetchzip {
        url = "https://git.kernel.org/torvalds/t/linux-${version}.tar.gz";
        inherit (thisKernel) hash;
      }
      else fetchurl {
        url = "mirror://kernel/linux/kernel/v${lib.versions.major version}.x/linux-${version}.tar.xz";
      sha256 = thisKernel.hash;
        inherit (thisKernel) hash;
      };

  args' = (builtins.removeAttrs args ["branch"]) // {
    inherit src version;

    modDirVersion = lib.versions.pad 3 version;
    extraMeta.branch = branch;
  } // (args.argsOverride or {});
in
buildLinux args'
+49 −23
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 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
    version: str
    branch: str
    date: str
    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,
        branch=get_branch(version),
        version=version,
        date=date,
        link=link,
        eol=eol,
    )

    return KernelRelease(nature=nature, version=version, date=date, link=link, 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(url: str):
    return subprocess.check_output(["nix-prefetch-url", url]).decode().strip()
def get_hash(kernel: KernelRelease):
    if kernel.branch == "testing":
        args = ["--unpack"]
    else:
        args = []

    hash = (
        subprocess.check_output(["nix-prefetch-url", kernel.link] + args)
        .decode()
        .strip()
    )
    return f"sha256:{hash}"


def commit(message):
@@ -65,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:
@@ -91,12 +113,16 @@ def main():

        print(message)

        all_kernels[branch] = {"version": kernel.version, "hash": get_hash(kernel.link)}
        all_kernels[branch] = {
            "version": kernel.version,
            "hash": get_hash(kernel),
        }

        with VERSIONS_FILE.open("w") as fd:
            json.dump(all_kernels, fd, indent=4)
            fd.write("\n")  # makes editorconfig happy

        if os.environ.get("COMMIT") == "1":
            commit(message)