forked from Mirror/pmbootstrap
This commit adds two new ignores to the flake8 call: * W504 line break after binary operator * W605 invalid escape sequence 'x' Without these, newer flake8 versions, such as the one shipped by Arch Linux, don't run through on the code base (which leads to not running it at all locally, only in CI). Additional changes: * Don't give the exception instance of subprocess.CalledProcessError a name, so it does not trigger F841 * Dont' advise to run "autopep8" anymore, because that will likely touch unrelated code. For reference, here is the list of error codes: https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes
99 lines
3 KiB
Python
Executable file
99 lines
3 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
|
|
def get_changed_files():
|
|
try:
|
|
branch = os.environ['CI_COMMIT_REF_NAME']
|
|
raw = subprocess.check_output(['git', 'diff', '--name-only',
|
|
'master...{}'.format(branch)])
|
|
except (KeyError, subprocess.CalledProcessError):
|
|
raw = subprocess.check_output(['git', 'diff', '--name-only',
|
|
'HEAD~1'])
|
|
return raw.decode().splitlines()
|
|
|
|
|
|
def get_changed_packages():
|
|
files = get_changed_files()
|
|
packages = set()
|
|
for file in files:
|
|
if not file.startswith("aports/"):
|
|
continue
|
|
name = file.split("/")[2]
|
|
package_path = "/".join(file.split("/")[0:3])
|
|
apkbuild_path = os.path.join(package_path, "APKBUILD")
|
|
if not os.path.exists(apkbuild_path):
|
|
print("No APKBUILD found at {}".format(package_path))
|
|
continue
|
|
packages.add(name)
|
|
return packages
|
|
|
|
|
|
def check_output_always(command):
|
|
try:
|
|
return subprocess.check_output(command)
|
|
except subprocess.CalledProcessError as e:
|
|
return e.output
|
|
|
|
|
|
def check_checksums(package):
|
|
command = ['./pmbootstrap.py', 'checksum', package]
|
|
try:
|
|
subprocess.check_output(command)
|
|
except subprocess.CalledProcessError:
|
|
print("Something gone wrong in pmbootstrap. Log:")
|
|
logfile = os.path.expanduser("~/.local/var/pmbootstrap/log.txt")
|
|
with open(logfile) as log:
|
|
print(log.read())
|
|
print("Test script failed on checksumming package '{}'".format(package))
|
|
exit(1)
|
|
|
|
result = check_output_always(['git', 'status', '--porcelain', '--untracked-files=no']).decode()
|
|
|
|
if result == "":
|
|
print("** The checksums are correct")
|
|
else:
|
|
print(result)
|
|
result = check_output_always(['git', 'diff']).decode()
|
|
print(result)
|
|
print("** The checksums are not correct")
|
|
exit(1)
|
|
|
|
|
|
def check_build(packages):
|
|
# Initialize build environment with less logging
|
|
commands = [["build_init"],
|
|
["--details-to-stdout", "build", "--strict"] + list(packages)]
|
|
for command in commands:
|
|
process = subprocess.Popen(["./pmbootstrap.py"] + command)
|
|
process.communicate()
|
|
if process.returncode != 0:
|
|
print("** Building failed")
|
|
exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# Allow to specify "--build" to build instead of only verifying checksums
|
|
build = False
|
|
if len(sys.argv) > 1:
|
|
if sys.argv[1] == "--build":
|
|
build = True
|
|
else:
|
|
print("usage: {} [--build]".format(sys.argv[0]))
|
|
exit(1)
|
|
|
|
packages = get_changed_packages()
|
|
|
|
if len(packages) == 0:
|
|
print("No aports packages changed in this commit")
|
|
exit(0)
|
|
|
|
if build:
|
|
print("Building in strict mode: " + ", ".join(packages))
|
|
check_build(packages)
|
|
else:
|
|
for package in packages:
|
|
print("Checking {} for correct checksums".format(package))
|
|
check_checksums(package)
|