57 lines
2.5 KiB
Python
Executable File
57 lines
2.5 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
""" takes results of compatibility tests and compie into one file """
|
|
|
|
import os
|
|
import sys
|
|
import itertools
|
|
|
|
def normalize(files):
|
|
presort = [ "pass", "fail", "na" ]
|
|
return [(list(g) + [ [0, k.split('.')[0], k.split('.')[1], k.split('.')[2], 'na'] ])[0] for (k, g) in itertools.groupby(sorted(files, key = lambda k: f"{k[1]}.{k[2]}.{k[3]}.{presort.index(k[4]) if k[4] in presort else 9}"), key = lambda k: f"{k[1]}.{k[2]}.{k[3]}")]
|
|
|
|
def stats(files):
|
|
""" Print statistics """
|
|
total = len([f for f in files if f[4] != 'na'])
|
|
passed = len([f for f in files if f[4] == 'pass'])
|
|
print(f"Compatibility rate: {round(100*passed/total,1) if total > 0 else 0}% ({passed} passed out of {total})")
|
|
print("")
|
|
|
|
def matrix(files):
|
|
""" Prints matrix """
|
|
archs = [k for k, _ in itertools.groupby(sorted(files, key = lambda ft: ft[3]), key = lambda ft: ft[3])]
|
|
# sort by priority of archs
|
|
presort = [ "amd64", "arm64", "arm32v7" ]
|
|
archs_sorted = sorted(archs, key = lambda k: f"{presort.index(k) if k in presort else 9}{k}")
|
|
# caption
|
|
print('|'.join(["OSes and distros"] + archs_sorted))
|
|
print('|'.join(['-'] + ['-' for a in archs_sorted]))
|
|
|
|
oses = [k for k, _ in itertools.groupby(sorted(files, key = lambda ft: ft[2]), key = lambda ft: ft[2])]
|
|
for o in oses:
|
|
results_raw = [list(filter(lambda ft: ft[2] == o and ft[3] == a, files)) for a in archs_sorted]
|
|
results = ["N/A" if len(r) == 0 or r[0][4] == "na" else (r[0][4] + ("" if r[0][0] == 0 else " (src)")) for r in results_raw]
|
|
print('|'.join([o] + results))
|
|
|
|
def main():
|
|
""" param: folder """
|
|
folder = sys.argv[1] if len(sys.argv) > 1 else "."
|
|
files = [f for f in os.listdir(folder) if not os.path.isdir(f)]
|
|
fts = [[os.path.getsize(os.path.join(folder,f))] + f.split('.') for f in files if len(f.split('.')) == 4]
|
|
print("## Minimal Effort Compatibility")
|
|
print("Checks if icloudpd can be installed using minimal effort. Minimal effort may require installing default version of package manager using OS tools")
|
|
print("")
|
|
stats(fts)
|
|
print("Legend:")
|
|
print("- N/A - not applicable/available")
|
|
print("- pass - test pass")
|
|
print("- fail - test fail")
|
|
print("- pass (src) - test pass using src (for pip)")
|
|
print("")
|
|
groups = [(k, list(g)) for k, g in itertools.groupby(sorted(fts, key = lambda ft: ft[1]), key = lambda ft: ft[1])]
|
|
for (g, f) in groups:
|
|
print(f"### {g}")
|
|
stats(f)
|
|
matrix(f)
|
|
|
|
if __name__ == "__main__":
|
|
main() |