1
0
Fork 1
mirror of https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git synced 2025-07-13 03:19:47 +03:00
pmbootstrap/pmb/helpers/lint.py
Caleb Connolly de4c912692
WIP: 2024-06-05: args hacking and more (MR 2252)
Continue removing args and do some other optimisations.

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

49 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.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)})