Ctrl K
ComunidadGuías…

scripts/qualify-released-upgrade.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/usr/bin/env python3
"""Optional Linux qualification against caller-supplied official release assets.

No downloads. Use a disk-backed scratch directory outside /tmp. The default
offline Rust gate uses the checked-in SQL schema instead of this binary.
"""
import argparse
import hashlib
import os
import subprocess
import tarfile
from pathlib import Path

DIGEST = "0402df3eff13904ca1417d5b52758ccbe98a2d7f5360b84cb04cde5972a5c4f3"
ARCHIVE = "kei-linux-x86_64.tar.gz"


def main():
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--assets", type=Path, required=True,
                        help="directory containing v0.24.0 archive and SHA256SUMS.txt")
    parser.add_argument("--scratch", type=Path, required=True,
                        help="new or existing isolated disk-backed qualification directory")
    args = parser.parse_args()
    archive = args.assets / ARCHIVE
    actual = hashlib.sha256(archive.read_bytes()).hexdigest()
    checksums = (args.assets / "SHA256SUMS.txt").read_text().splitlines()
    if actual != DIGEST:
        parser.error(f"unexpected release archive: {actual}")
    if not any(line.split() == [DIGEST, ARCHIVE] for line in checksums):
        parser.error("release checksum mismatch")
    scratch = args.scratch.resolve()
    if scratch == Path("/tmp") or Path("/tmp") in scratch.parents:
        parser.error("--scratch must be outside /tmp")
    scratch.mkdir(parents=True, exist_ok=True)
    # Extract only the expected regular binary, never arbitrary archive paths.
    binary = scratch / "kei-v0.24.0"
    with tarfile.open(archive) as release:
        members = [m for m in release.getmembers() if m.name in ("kei", "./kei") and m.isfile()]
        if len(members) != 1:
            parser.error("archive must contain exactly one kei binary")
        with release.extractfile(members[0]) as stream:
            binary.write_bytes(stream.read())
    binary.chmod(0o700)
    output = subprocess.check_output(
        ["unshare", "-Urn", str(binary), "--version"], env={"PATH": os.defpath}, text=True
    ).strip()
    if output != "kei 0.24.0":
        parser.error(f"unexpected binary version: {output}")
    temp = scratch / "tmp"
    temp.mkdir(exist_ok=True)
    env = dict(os.environ, KEI_TEST_RELEASED_V0240=str(binary), TMPDIR=str(temp))
    # Require the caller's explicit disk-backed build cache, not a /tmp build.
    target = Path(env.get("CARGO_TARGET_DIR", scratch / "target")).resolve()
    if target == Path("/tmp") or Path("/tmp") in target.parents:
        parser.error("CARGO_TARGET_DIR must be outside /tmp")
    env["CARGO_TARGET_DIR"] = str(target)
    print(f"Verified {ARCHIVE}: sha256:{actual}; {output}", flush=True)
    print("Released tag commit: aec13c42ce476edd8f8e0019bf58da1fd5d1b879", flush=True)
    for target_args in (["--test", "behavioral"], ["--lib"]):
        command = ["unshare", "-Urn", "sh", "-ec",
                   'ip link set lo up; exec "$@"', "kei-upgrade",
                   "cargo", "test", "--offline", *target_args,
                   "released_v0240_", "--", "--nocapture"]
        print("Network-disabled command:", " ".join(command), flush=True)
        subprocess.run(command, cwd=Path(__file__).resolve().parents[1], env=env, check=True)



if __name__ == "__main__":
    main()