summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Keith <javelinanddart@gmail.com>2017-05-20 08:19:44 +0100
committerPaul Keith <javelinanddart@gmail.com>2017-05-20 08:21:04 -0500
commitf0ab2a92ae9bad668c58509b6ad2437625fabf95 (patch)
tree838069c0f693c0baa2f4f0749abaa9d681ec77fb
parentc71ce736241a050570956e704bf26acf1f2e63d2 (diff)
downloadscripts-f0ab2a92ae9bad668c58509b6ad2437625fabf95.tar.gz
scripts-f0ab2a92ae9bad668c58509b6ad2437625fabf95.tar.bz2
scripts-f0ab2a92ae9bad668c58509b6ad2437625fabf95.zip
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
-rw-r--r--maintainer-checks/README.md2
-rwxr-xr-xmaintainer-checks/maintainers.py80
-rw-r--r--maintainer-checks/requirements.txt1
-rwxr-xr-xmaintainers.sh118
4 files changed, 83 insertions, 118 deletions
diff --git a/maintainer-checks/README.md b/maintainer-checks/README.md
new file mode 100644
index 0000000..3ae6401
--- /dev/null
+++ b/maintainer-checks/README.md
@@ -0,0 +1,2 @@
+1. Use Python 3.2 or higher
+2. `pip3 install -r requirements.txt`
diff --git a/maintainer-checks/maintainers.py b/maintainer-checks/maintainers.py
new file mode 100755
index 0000000..099bc98
--- /dev/null
+++ b/maintainer-checks/maintainers.py
@@ -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))
diff --git a/maintainer-checks/requirements.txt b/maintainer-checks/requirements.txt
new file mode 100644
index 0000000..c3726e8
--- /dev/null
+++ b/maintainer-checks/requirements.txt
@@ -0,0 +1 @@
+pyyaml
diff --git a/maintainers.sh b/maintainers.sh
deleted file mode 100755
index 980e9bd..0000000
--- a/maintainers.sh
+++ /dev/null
@@ -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
-