Release 3.10.0

Aelin (4):
      pmb.qemu: Remove support for direct kernel boot
      pmb.build: If clang is used, don't install GCC
      pmb.qemu: Remove QEMU dep handling for Alpine 3.12
      pmb.sideload: Fix sudo detection

Anri Dellal (1):
      pmb.helpers.ui: Do not fail if UI APKBUILD is missing

Aster Boese (5):
      pmb.chroot.init: bootstrap the bin-merge by creating symlinks
      gitlab-ci: change ci-common pull from master to main
      pmb: add run0 support
      docs: add run0 support to documentation
      treewide: replace 'master' strings with 'main'

Casey Connolly (2):
      remove ondev support
      pmb.build.autodetect: Use cross-native2 for noarch packages

Clayton Craft (1):
      pmb.helpers.run_core: fix 100% cpu busy loop

Gregory Kietzman (2):
      pmb.install: Fix broken parameters
      pmb.parse, pmb.helpers: Fix docstrings

Hugo Osvaldo Barrera (2):
      pmb.helpers.aportupgrade: remove obsolete command
      docs: explain how to install keys for mirrors

Hugo Posnic (5):
      pmb: Migrate status away from legacy frontend
      pmb: Migrate update away from legacy frontend
      pmb: Migrate initfs away from legacy frontend
      pmb: Migrate work_migrate away from legacy frontend
      pmb: Migrate repo_missing away from legacy frontend

Newbyte (1):
      pmb: Remove lint subcommand

Pablo Correa Gómez (9):
      pmb.helpers.package: do not add packages to the queue that are already there
      pmb.helpers.package: use sets for queue and ret in depends_recurse
      pmb.helpers.package: do not queue providers of packages we have seen
      test.helpers.test_package: add test for remove_operators
      pmb.helpers.pmaports: make check_version_constraints more generic
      pmb.helpers: move check_version_constraints from pmaports to package
      pmb.helpers.package: also track the original names of the packages
      pmb.helpers.package: remove unused import
      pmb.parse.apkindex: only select provider if it matches constraints

Paul Adam (7):
      docs: fix order of command modules
      pmb: Migrate stats away from legacy frontend
      pmb: Migrate build_init away from legacy frontend
      pmb: Migrate newapkbuild away from legacy frontend
      pmb: Migrate apkindex_parse away from legacy frontend
      pmb: Migrate bootimg_analyze away from legacy frontend
      pmb: Migrate chroot away from legacy frontend

Rakshit Kumar Singh (1):
      pmb: Migrate apkbuild_parse away from legacy frontend

Rudraksha Gupta (1):
      pmb.qemu.run: Add armv7 display support

Stefan Hansson (143):
      pmb.helpers.pkgrel_bump: Remove unnecessary type check
      pmb.parse.kconfigcheck: Simplify get_path()
      pmb.config.init: Simpify ask_for_work_path() using is_relative_to()
      pmb.config.init: Avoid unnecessary string concatenation in get_locales()
      pmb.config.pmaports: Modernise check_version_pmbootstrap() using pathlib
      pmb.parse._apkbuild: Remove attr-defined disable
      pmb.chroot.initfs_hooks: Rename list_aports() to list_hook_packages()
      pmb.chroot.initfs_hooks: Use NonBugError
      envkernel: Add better hint if installing build dependencies fails
      pmb.helpers: Raise CommandFailedError on failed command
      pmb.helpers.frontend: Handle CommandFailedError in chroot()
      pmb.install._install: Use NonBugError for nonexistent kernel
      pmb: Introduce PackagingError
      pmb.chroot.initfs: Use PackagingError if mkinitfs fails
      pmb: Guess checksum package based on cwd if none is specified
      pmb.chroot.apk: Replace Sequence and list with Collection in inputs
      pmb.build._package: Don't needlessly turn set into list
      pmb.chroot.initfs_hooks: Print hook descriptions when listing them
      pmb.aportgen.core: Try to be more helpful on nonexistent aport
      pmb.install._install: Remove args from setup_login_chpasswd_user_from_arg()
      pmb.install._install: Remove args from setup_login()
      pmb.install._install: Remove args from print_sshd_info()
      pmb.install._install: Remove args from generate_binary_list()
      pmb.install._install: Remove args from embed_firmware()
      pmb.install._install: Remove args from write_cgpt_kpart()
      pmb.install._install: Remove args from sanity_check_disk()
      pmb.install._install: Remove args from sanity_check_disk_size()
      pmb.install._install: Remove args from get_ondev_pkgver()
      pmb.install._install: Remove args from sanity_check_ondev_version()
      pmb.install._install: Remove args from create_fstab()
      pmb.install.format: Remove args from format()
      pmb.install._install: Remove args from get_selected_providers()
      pmb.install._install: Remove args from get_recommends()
      pmb.install._install: Remove args from create_device_rootfs()
      pmb.qemu.run: Remove args from create_second_storage()
      pmb.qemu.run: Remove args from install_depends()
      pmb.qemu.run: Remove args from create_gdk_loader_cache()
      pmb.types: Remove qemu_redir_stdio from PmbArgs
      pmb.types: Make PmbArgs.port an int
      pmb.types: Add memory to PmbArgs
      pmb.args: Make some arguments optional
      pmb.qemu.run: Remove PmbArgs
      pmb.export.frontend: Remove PmbArgs from frontend()
      pmb.sideload: Remove PmbArgs from ssh_install_apks()
      pmb.sideload: Remove PmbArgs from ssh_find_arch()
      pmb.sideload: Remove PmbArgs from scp_abuild_key()
      pmb.sideload: Remove PmbArgs from sideload()
      pmb.chroot.initfs: Refactor frontend()
      pmb.helpers.repo_missing: Simplify generate()
      pmb.commands: Use functions intead of classes for most commands
      pmb.build._package: Catch CommandFailedError when build fails
      pmb: Migrate sideload away from legacy frontend
      pmb.meta: Simplify build_key() slightly
      pmb.build._package: Fix instance of cross compile literal
      pmb.helpers.mount: Fix str being compared to Path
      pmb.install.format: Fix sector_size comparison
      pyproject.toml: Set strict_equality = true
      pmb.parse.deviceinfo: Remove validation code
      pmb, test: Remove references to deviceinfo_external_storage
      pmb: Migrate export away from legacy backend
      pmb.parse.deviceinfo: Trim down Deviceinfo class docstring
      pmb: Migrate netboot away from legacy frontend
      pmb.aportgen.core: Properly type replace_simple in rewrite()
      pmb: Migrate build away from legacy frontend
      pmb.helpers.git: Fix infinite loop in get_changed_packages()
      pmb.build.autodetect: Remove dead code
      pmb.helpers.git: Fix always False expression
      pmb.types: Mark disk as optional in PmbArgs
      pmb.install._install: Ignore truthy-bool error in setup_appstream()
      pmb.commands.export: Fix rootfs export hint never appearing
      pyproject.toml: Enable "truthy-bool" error code for mypy
      pmb.build.autodetect: Fix automatic arch detection
      pmb: Migrate checksum away from legacy frontend
      pmb.helpers.logging: Avoid undocumented logging.WARN
      pmb.chroot.test_apk: Remove unnecessary return statement
      pmb.commands.test: Use from keyword to import logging
      pmb.parse.arguments: Simplify package_completer()
      pmb.parse.kconfig: Avoid redundant exception naming
      pmb.parse.arguments: Simplify arguments_status()
      pmb.install.losetup: Avoid redundant exception naming
      pmb.build._package: Simplify get_depends()
      pmb.build._package: Remove unncessary global declaration
      pmb.build.envkernel: Avoid redundant exception naming
      pmb: Use sys.exit() instead of exit()
      pmb.commands.netboot: Avoid redundant exception naming
      pmb.commands.sideload: Simplify ssh_find_arch()
      pmb.core.arch: Remove unncessary global declaration
      pmb.core.chroot: Use dict to avoid repeated equality comparison
      pmb.core.context: Remove unncessary global declaration
      pmb.helpers.other: Simplify folder_size()
      pmb.helpers.pmaports: Simplify _find_apkbuilds()
      pmb.helpers.repo: Avoid redefining "arch" variable
      pmb.helpers.repo_missing: Simplify generate()
      pmb.install._install: Replace if ... else with match
      pmb.install.format: Use dict to avoid repeated equality comparison
      pyproject.toml: Ignore more rules
      pmb.parse.apkindex: Don't bother checking if provides is None
      pmb.build.kernel: Don't bother checking if Match.groups() is None
      pmb.types: Mark name in PmbArgs as optional
      pmb.parse.deviceinfo: Update name validation comment
      pmb.parse.deviceinfo: Make InitfsCompression.from_str() never return None
      pmb.parse.deviceinfo: Reduce setattr() use in Deviceinfo.__init__()
      pmb: Migrate zap away from legacy frontend
      pmb: Migrate qemu away from legacy frontend
      pmb.parse.kconfig: Error on kconfig option not being set correctly
      pmb.commands.kconfig: Raise NonBugError on failed validation
      pmb.core.package_metadata: Use annotations from __future__
      pyproject.toml: Set pretty = true for mypy
      pyproject.toml: Set strict_bytes = true for mypy
      pmb.types: Mark sparse in PmbArgs as optional
      pmb.install._install: Don't bother checking if config.keymap is None
      pmb.types: Mark value in PmbArgs as optional
      pmb.config.other: Don't bother checking if check_option() returns None
      pmb.install.recovery: Remove flavoured initfs compatiblity
      pmb.build._package: Explicitly annotate cross and prev_cross
      test.core.test_arch: Generalise alpine_triple() assert
      test.config.test_config_serde: Generalise config.mirrors assertion
      pmb.core.chroot: Ignore comparison overlap for deviceinfo arch
      pmb.install: Refactor args.split
      pyproject.toml: Set strict_equality_for_none = true for mypy
      pmb.commands.build: Clean up some strings
      pmb.commands.config: Fix type hint
      pmb.install.blockdevice: Use Path.replace()
      pmb.helpers.frontend: Ask for password early with getpass()
      pmb.install: Mount disk early
      pmb.install._install: Simplify setup_timezone()
      pmb.helpers.args: Replace constant attribute delattr() with del keyword
      pmb.chroot.zap: Improve error message if a chroot fails to umount
      pmb.parse.apkindex: Improve overloads for parse()
      pmb.config.init: Remove unreachable return statement
      pmb: Fix apkindex_parse command
      pyproject.toml: Set warn_unreachable = true for mypy
      pmb.commands: Mark newapkbuild as migrated
      pmb.commands: Use args.package for apkindex_parse
      CI: Add APKINDEX parsing integration test
      pmb.install._install: Re-add disk argument to install_system_image()
      pmb.commands.apkindex_parse: Remove redundant type check
      pyproject.toml: Set local_partial_types = true for mypy
      pmb.helpers.ui: Actually skip UI directories without APKBUILDs
      pmb.parse.kconfig: Don't bother catching RuntimeError for read_categories()
      pmb.install._install: Avoid using undefined variable in exception handler
      pmb.helpers.git: Fix MissingSectionHeaderError handling
      Prepare 3.10.0 release

Yohan Boniface (1):
      pmb: migrate config command away from legacy frontend

kersnazzle kersnazzle (1):
      pmb: Migrate ci away from legacy frontend