We only disable LOG015 rule, as in the simple situation of pmaports, it doesn't matter too much if in pytest we are using the root logger or a custom one. Signed-off-by: Pablo Correa Gómez <pabloyoyoista@postmarketos.org> Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9363>
93 lines
3.3 KiB
Python
Executable File
93 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
# Copyright 2025 Pablo Correa Gomez
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
import os
|
|
import sys
|
|
|
|
# Same dir
|
|
import common
|
|
|
|
# pmbootstrap
|
|
import pmb.core
|
|
from pmb.core.context import get_context
|
|
|
|
|
|
def verify_checksums(packages):
|
|
if len(packages) == 0:
|
|
print("no packages changed, not doing any checksums verification")
|
|
return
|
|
|
|
print("verifying checksums: " + ", ".join(packages))
|
|
common.run_pmbootstrap(["build_init"])
|
|
common.run_pmbootstrap(
|
|
["--details-to-stdout", "checksum", "--verify"] + list(packages)
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Get and print modified packages
|
|
packages = common.get_changed_packages()
|
|
|
|
# Load context
|
|
sys.argv = ["pmbootstrap.py", "chroot"]
|
|
args = pmb.parse.arguments()
|
|
context = get_context()
|
|
|
|
# Get set of all buildable packages for the enabled repos, for skipping unbuildable
|
|
# aports later. We might be given a changed aport from e.g. extra-repos/systemd when
|
|
# that repo is not enabled
|
|
buildable_pkgs = set()
|
|
archived = set()
|
|
for path in pmb.core.pkgrepo.pkgrepo_iter_package_dirs():
|
|
# Store archived packages for matching later
|
|
if os.path.split(os.path.split(path)[0])[1] == "archived":
|
|
archived.add(os.path.basename(path))
|
|
continue
|
|
buildable_pkgs.add(os.path.basename(path))
|
|
|
|
# To store a list of packages from extra-repos/systemd for special handling
|
|
# later:
|
|
systemd_pkgs = []
|
|
|
|
# Filter out packages are not found in enabled repos or are in archived
|
|
# (Iterate over copy of packages, because we modify it in this loop)
|
|
for package in packages.copy():
|
|
if package not in buildable_pkgs:
|
|
# Specifically handle archived since it could include packages
|
|
# who's sources are dead
|
|
if package in archived:
|
|
print(f"{package}: archived, skipping")
|
|
packages.remove(package)
|
|
continue
|
|
print(f"{package}: not in current repo, skipping")
|
|
packages.remove(package)
|
|
# FIXME: this should probably be more generic, if other repos are added
|
|
# later?
|
|
# This just tosses the package into the list of packages to try
|
|
# building later w/ systemd enabled, and assumes it'll be found
|
|
# there.
|
|
print(f"{package}: adding to list of packages to check in systemd repo")
|
|
systemd_pkgs.append(package)
|
|
continue
|
|
|
|
# No packages: skip build
|
|
if len(packages) == 0:
|
|
print("no packages to check for the current repo")
|
|
else:
|
|
verify_checksums(packages)
|
|
|
|
# FIXME: this should probably be more generic, if other repos are added later?
|
|
if systemd_pkgs:
|
|
common.run_pmbootstrap(["config", "systemd", "always"])
|
|
# To fix the ERROR: Chroot 'native' is for the 'edge' channel, but you are on the
|
|
# 'systemd-edge' channel. Run 'pmbootstrap zap' to delete your chroots and try again.
|
|
# To do this automatically, run 'pmbootstrap config auto_zap_misconfigured_chroots yes'.
|
|
common.run_pmbootstrap(["config", "auto_zap_misconfigured_chroots", "yes"])
|
|
|
|
# No packages: skip build
|
|
if len(systemd_pkgs) == 0:
|
|
print("no packages to check for the systemd repo")
|
|
|
|
else:
|
|
verify_checksums(systemd_pkgs)
|