forked from Mirror/pmbootstrap
We use a custom verbose log level in pmbootstrap, unfortunately it isn't possible to correctly type this due to some limitations in the logging library [1], [2]. Given that our usecase is fairly simple, we can just wrap the module with our own so we only have to tell mypy to ignore the error once instead of at every callsite. [1]: https://github.com/cryptax/droidlysis/issues/15 [2]: https://github.com/python/typing/discussions/980 Signed-off-by: Caleb Connolly <caleb@postmarketos.org>
47 lines
1.7 KiB
Python
47 lines
1.7 KiB
Python
# Copyright 2023 Danct12 <danct12@disroot.org>
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
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 = "/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 os.path.exists(aport + "/APKBUILD"):
|
|
raise ValueError("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)})
|