# Copyright 2023 Danct12 # SPDX-License-Identifier: GPL-3.0-or-later from pathlib import Path from pmb.core.chroot import Chroot from pmb.helpers import logging import os import pmb.chroot import pmb.chroot.apk import pmb.build from pmb.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 """ chroot = Chroot.native() pmb.chroot.apk.install(["atools"], chroot) # 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(pmaports, chroot) # Locate all APKBUILDs and make the paths be relative to the pmaports # root apkbuilds = [] for pkgname in pkgnames: aport = pmb.helpers.pmaports.find(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(["apkbuild-lint"] + apkbuilds, check=False, output="stdout", output_return=True, working_dir=pmaports, env={"CUSTOM_VALID_OPTIONS": " ".join(options)})