Move maintainers script to python
"A true interpretation is realised when not one line of the original remains" Contributors: harryyoud, javelinanddart, luk1337, mccreary, zifnab Change-Id: Iec07c8a62ec6cb41317c2cdb00db6ae0be73f780
This commit is contained in:
2
maintainer-checks/README.md
Normal file
2
maintainer-checks/README.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
1. Use Python 3.2 or higher
|
||||||
|
2. `pip3 install -r requirements.txt`
|
||||||
80
maintainer-checks/maintainers.py
Executable file
80
maintainer-checks/maintainers.py
Executable file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
import yaml
|
||||||
|
import re
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
|
||||||
|
# Paths to certain repos
|
||||||
|
repo = {
|
||||||
|
"updater": "../../updater",
|
||||||
|
"wiki": "../../wiki",
|
||||||
|
"hudson": "../../jenkins",
|
||||||
|
"cve": "../../cve"
|
||||||
|
}
|
||||||
|
|
||||||
|
# List of all codenames in hudson
|
||||||
|
codenames = []
|
||||||
|
# List of devices in cve tracker
|
||||||
|
cve_entries = []
|
||||||
|
# List of devices with updater pages
|
||||||
|
updater_pages = []
|
||||||
|
|
||||||
|
# Open file and input lines as items in list
|
||||||
|
hudson_file = repo["hudson"] + "/lineage-build-targets"
|
||||||
|
with open(hudson_file) as f:
|
||||||
|
for line in f:
|
||||||
|
# Ignore blank lines or lines with comments
|
||||||
|
if re.match(r"^\s*$", line) or re.match(r"#", line):
|
||||||
|
continue
|
||||||
|
# Add codenames to list
|
||||||
|
codenames.append(re.sub(r" .*", "", line.strip()))
|
||||||
|
|
||||||
|
# Sort codenames alphabetically
|
||||||
|
codenames.sort()
|
||||||
|
|
||||||
|
# Create list of devices in cve tracker
|
||||||
|
cve_json_file = repo["cve"] + "/kernels.json"
|
||||||
|
with open(cve_json_file) as f:
|
||||||
|
json_file = json.load(f)
|
||||||
|
|
||||||
|
for kernel in json_file:
|
||||||
|
for device in json_file[kernel]:
|
||||||
|
device = re.sub(r"android_device_[a-zA-Z0-9]*_", "", device)
|
||||||
|
cve_entries.append(device)
|
||||||
|
|
||||||
|
# CVE tracker checking
|
||||||
|
for codename in codenames:
|
||||||
|
if codename not in cve_entries:
|
||||||
|
print("{} doesn't have an entry in the CVE tracker".format(codename))
|
||||||
|
|
||||||
|
# Create list of updater pages
|
||||||
|
updater_json_file = repo["updater"] + "/devices.json"
|
||||||
|
with open(updater_json_file) as f:
|
||||||
|
json_file = json.load(f)
|
||||||
|
for device in json_file:
|
||||||
|
updater_pages.append(device["model"])
|
||||||
|
|
||||||
|
# Updater checking
|
||||||
|
for codename in codenames:
|
||||||
|
if codename not in updater_pages:
|
||||||
|
print("{} doesn't have an updater page".format(codename))
|
||||||
|
|
||||||
|
# Wiki checking
|
||||||
|
for codename in codenames:
|
||||||
|
wiki_yml_file = repo["wiki"] + "/_data/devices/" + codename + ".yml"
|
||||||
|
if not os.path.isfile(wiki_yml_file):
|
||||||
|
print("{} doesn't have a wiki page".format(codename))
|
||||||
|
continue
|
||||||
|
with open(wiki_yml_file) as f:
|
||||||
|
yml = yaml.load(f)
|
||||||
|
try:
|
||||||
|
if not yml["maintainers"]:
|
||||||
|
print("{} doesn't have a maintainer listed".format(codename))
|
||||||
|
except KeyError:
|
||||||
|
print("{} doesn't have a maintainers field".format(codename))
|
||||||
|
try:
|
||||||
|
if not yml["install_method"] or "TODO" in yml["install_method"]:
|
||||||
|
print("{} doesn't have an install method listed".format(codename))
|
||||||
|
except KeyError:
|
||||||
|
print("{} doesn't have an install method field".format(codename))
|
||||||
1
maintainer-checks/requirements.txt
Normal file
1
maintainer-checks/requirements.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pyyaml
|
||||||
118
maintainers.sh
118
maintainers.sh
@@ -1,118 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Run this with no arguments for default functionality
|
|
||||||
# Run with anything as an argument and all maintainers and devices
|
|
||||||
# will be printed first, followed by regular functionality
|
|
||||||
|
|
||||||
updaterrepolocation="../updater"
|
|
||||||
wikirepolocation="../wiki"
|
|
||||||
jenkinsrepolocation="../jenkins"
|
|
||||||
cverepolocation="../cve"
|
|
||||||
showallmaintainers=false
|
|
||||||
if ! [ -z $1 ]; then showallmaintainers=true; fi
|
|
||||||
if ! [ -d $wikirepolocation ]; then
|
|
||||||
echo "wiki folder you specified doesn't exist, quitting" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if ! [ -d $updaterrepolocation ]; then
|
|
||||||
echo "updater folder you specified doesn't exist, quitting" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if ! [ -d $jenkinsrepolocation ]; then
|
|
||||||
echo "jenkins folder you specified doesn't exist, quitting" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
hudsonlist=$(cat $jenkinsrepolocation/lineage-build-targets | cut -f1 -d ' ' | sort | uniq | grep -v '^#' | grep -ve '^$')
|
|
||||||
|
|
||||||
# Print list of maintainers if told to
|
|
||||||
if [ $showallmaintainers == true ]; then
|
|
||||||
echo "## Maintainers of all devices in hudson according to the wiki:"
|
|
||||||
for codename in $hudsonlist; do
|
|
||||||
if [ -f $wikirepolocation/_data/devices/$codename.yml ]; then
|
|
||||||
wiki_maintainers=$(grep maintainer $wikirepolocation/_data/devices/$codename.yml | cut -d ':' -f2 | awk '{$1=$1};1')
|
|
||||||
if [[ $wiki_maintainers = *\[\'\'\]* ]]; then
|
|
||||||
wiki_maintainers="no maintainers"
|
|
||||||
fi
|
|
||||||
wiki_maintainers=$(echo $wiki_maintainers | tr -d \[\])
|
|
||||||
printf "%-15s%-40s\n" "$codename:" "$wiki_maintainers"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
printf "\n"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if a wiki page exists for each device
|
|
||||||
echo "## Devices present in hudson, but have no wiki page:"
|
|
||||||
wikipagefail=0
|
|
||||||
for codename in $hudsonlist; do
|
|
||||||
if ! [ -f $wikirepolocation/_data/devices/$codename.yml ]; then
|
|
||||||
echo $codename
|
|
||||||
((wikipagefail++))
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $wikipagefail = 0 ]; then echo "none"; else echo "total = $wikipagefail"; fi
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
# Check devices that have a wiki page have maintainers
|
|
||||||
echo "## Devices present in hudson, but with no maintainers on the wiki:"
|
|
||||||
wikimaintainerfail=0
|
|
||||||
for codename in $hudsonlist; do
|
|
||||||
if [ -f $wikirepolocation/_data/devices/$codename.yml ]; then
|
|
||||||
WIKI_MAINTAINERS=$(grep maintainer $wikirepolocation/_data/devices/$codename.yml | cut -d ':' -f2 | awk '{$1=$1};1')
|
|
||||||
if [[ $WIKI_MAINTAINERS = *\[\'\'\]* ]]; then
|
|
||||||
echo $codename
|
|
||||||
((wikimaintainerfail++))
|
|
||||||
fi
|
|
||||||
unset WIKI_MAINTAINERS
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $wikimaintainerfail = 0 ]; then echo "none"; else echo "total = $wikimaintainerfail"; fi
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
# Check devices that have a wiki page but no install_method
|
|
||||||
echo "## Devices present in hudson, but with install_method set as TODO on the wiki:"
|
|
||||||
wikiinstallmethodfail=0
|
|
||||||
for codename in $hudsonlist; do
|
|
||||||
if [ -f $wikirepolocation/_data/devices/$codename.yml ]; then
|
|
||||||
wiki_installmethod=$(grep install_method $wikirepolocation/_data/devices/$codename.yml | cut -d ':' -f2)
|
|
||||||
if [[ $wiki_installmethod = *TODO* ]]; then
|
|
||||||
echo $codename
|
|
||||||
((wikiinstallmethodfail++))
|
|
||||||
fi
|
|
||||||
unset wiki_installmethod
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ $wikiinstallmethodfail = 0 ]; then echo "none"; else echo "total = $wikiinstallmethodfail"; fi
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
# Check that devices have an update page
|
|
||||||
echo "## Devices present in hudson, but don't have an update page:"
|
|
||||||
updaterfail=0
|
|
||||||
if [ -f $updaterrepolocation/devices.json ]; then
|
|
||||||
for codename in $hudsonlist; do
|
|
||||||
if ! grep -q "model\": \"$codename\"" $updaterrepolocation/devices.json; then
|
|
||||||
echo $codename
|
|
||||||
((updaterfail++))
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo "$updaterrepolocation/devices.json doesn't exist"
|
|
||||||
((updaterfail++))
|
|
||||||
fi
|
|
||||||
if [ $updaterfail = 0 ]; then echo "none"; else echo "total = $updaterfail"; fi
|
|
||||||
printf "\n"
|
|
||||||
|
|
||||||
# Check that devices are listed in CVE tracker
|
|
||||||
echo "## Devices present in hudson, but don't have a kernel listed for them in CVE tracker:"
|
|
||||||
cvefail=0
|
|
||||||
if [ -f $cverepolocation/kernels.json ]; then
|
|
||||||
for codename in $hudsonlist; do
|
|
||||||
if ! grep -q "android_device_"'.*'"_$codename" $cverepolocation/kernels.json; then
|
|
||||||
echo $codename
|
|
||||||
((cvefail++))
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo "$cverepolocation/kernels.json doesn't exist"
|
|
||||||
((cvefail++))
|
|
||||||
fi
|
|
||||||
if [ $cvefail = 0 ]; then echo "none"; else echo "total = $cvefail"; fi
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user