diff --git a/pmb/helpers/frontend.py b/pmb/helpers/frontend.py index 7812fac3..eabb5760 100644 --- a/pmb/helpers/frontend.py +++ b/pmb/helpers/frontend.py @@ -35,6 +35,7 @@ import pmb.chroot.other import pmb.export import pmb.flasher import pmb.helpers.git +import pmb.helpers.lint import pmb.helpers.logging import pmb.helpers.pkgrel_bump import pmb.helpers.pmaports @@ -416,3 +417,12 @@ def pull(args): logging.info("* " + pmb.helpers.git.get_path(args, name_repo)) logging.info("---") return False + + +def lint(args): + packages = args.packages + if not packages: + packages = pmb.helpers.pmaports.get_list(args) + + for package in packages: + pmb.helpers.lint.check(args, package) diff --git a/pmb/helpers/lint.py b/pmb/helpers/lint.py new file mode 100644 index 00000000..1a1f80e3 --- /dev/null +++ b/pmb/helpers/lint.py @@ -0,0 +1,37 @@ +""" +Copyright 2020 Danct12 + +This file is part of pmbootstrap. + +pmbootstrap is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +pmbootstrap is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with pmbootstrap. If not, see . +""" +import logging + +import pmb.chroot +import pmb.chroot.apk +import pmb.build +import pmb.helpers.run +import pmb.helpers.pmaports + + +def check(args, pkgname): + pmb.chroot.apk.install(args, ["atools"]) + + # Run apkbuild-lint on copy of pmaport in chroot + pmb.build.init(args) + pmb.build.copy_to_buildpath(args, pkgname) + logging.info("(native) linting " + pkgname + " with apkbuild-lint") + pmb.chroot.user(args, ["apkbuild-lint", "APKBUILD"], + check=False, output="stdout", + working_dir="/home/pmos/build") diff --git a/pmb/parse/arguments.py b/pmb/parse/arguments.py index 893bbc05..31c999bc 100644 --- a/pmb/parse/arguments.py +++ b/pmb/parse/arguments.py @@ -270,6 +270,14 @@ def arguments_repo_missing(subparser): return ret +def arguments_lint(subparser): + lint = subparser.add_parser("lint", help="run quality checks on pmaports" + " (required to pass CI)") + argument_packages = lint.add_argument("packages", nargs="*") + if argcomplete: + argument_packages.completer = package_completer + + def package_completer(prefix, action, parser, parsed_args): args = parsed_args pmb.config.merge_with_args(args) @@ -375,6 +383,7 @@ def arguments(): arguments_qemu(sub) arguments_pkgrel_bump(sub) arguments_newapkbuild(sub) + arguments_lint(sub) # Action: log log = sub.add_parser("log", help="follow the pmbootstrap logfile")