pmbootstrap-meow/pmb/helpers/lint.py
Caleb Connolly 31cc898dd5
treewide: adopt pathlib.Path and type hinting (MR 2252)
With the new chroot type, we can now write fancy paths in the pythonic
way. Convert most of the codebase over, as well as adding various other
type hints.

Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
2024-06-23 12:38:37 +02:00

47 lines
1.7 KiB
Python

# Copyright 2023 Danct12 <danct12@disroot.org>
# SPDX-License-Identifier: GPL-3.0-or-later
from pathlib import Path
from pmb.helpers import logging
import os
import pmb.chroot
import pmb.chroot.apk
import pmb.build
from pmb.core.types import PmbArgs
import pmb.helpers.run
import pmb.helpers.pmaports
def check(args: PmbArgs, pkgnames):
"""Run apkbuild-lint on the supplied packages.
:param pkgnames: Names of the packages to lint
"""
pmb.chroot.apk.install(args, ["atools"])
# Mount pmaports.git inside the chroot so that we don't have to copy the
# package folders
pmaports = Path("/mnt/pmaports")
pmb.build.mount_pmaports(args, pmaports)
# Locate all APKBUILDs and make the paths be relative to the pmaports
# root
apkbuilds = []
for pkgname in pkgnames:
aport = pmb.helpers.pmaports.find(args, pkgname)
if not (aport / "APKBUILD").exists():
raise ValueError(f"Path does not contain an APKBUILD file: {aport}")
relpath = os.path.relpath(aport, args.aports)
apkbuilds.append(f"{relpath}/APKBUILD")
# Run apkbuild-lint in chroot from the pmaports mount point. This will
# print a nice source identifier à la "./cross/grub-x86/APKBUILD" for
# each violation.
pkgstr = ", ".join(pkgnames)
logging.info(f"(native) linting {pkgstr} with apkbuild-lint")
options = pmb.config.apkbuild_custom_valid_options
return pmb.chroot.root(args, ["apkbuild-lint"] + apkbuilds,
check=False, output="stdout",
output_return=True,
working_dir=pmaports,
env={"CUSTOM_VALID_OPTIONS": " ".join(options)})