blob: 779f006afc557a860866e8db792720070241cfff [file] [log] [blame]
#!/usr/bin/env python
import sys
import subprocess
import re
import os
import xml.etree.ElementTree as ET
DOCS_WARNING_FILE = "doc.warnings"
commit_range = os.environ['COMMIT_RANGE']
cwd = os.environ['ZEPHYR_BASE']
def run_gitlint(tc):
proc = subprocess.Popen('gitlint --commits %s' %(commit_range),
cwd=cwd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
msg = ""
if proc.wait() != 0:
msg = proc.stdout.read()
if msg != "":
failure = ET.SubElement(tc, 'failure', type="failure", message="commit message error on range: %s" %commit_range)
failure.text = (str(msg))
return 1
return 0
def run_checkpatch(tc):
output = None
out = ""
diff = subprocess.Popen(('git', 'diff', '%s' %(commit_range)), stdout=subprocess.PIPE)
try:
output = subprocess.check_output(('%s/scripts/checkpatch.pl' %cwd,
'--mailback', '--no-tree', '-'), stdin=diff.stdout,
stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as ex:
m = re.search("([1-9][0-9]*) errors,", str(ex.output))
if m:
failure = ET.SubElement(tc, 'failure', type="failure", message="checkpatch issues")
failure.text = (str(ex.output))
return 1
return 0
def check_doc(tc):
if os.path.exists(DOCS_WARNING_FILE) and os.path.getsize(DOCS_WARNING_FILE) > 0:
with open(DOCS_WARNING_FILE, "r") as f:
log = f.read()
failure = ET.SubElement(tc, 'failure', type="failure",
message="documentation issues")
failure.text = (str(log))
return 1
return 0
tests = { "gitlint":run_gitlint, "checkpatch":run_checkpatch, "documentation":check_doc }
def run_tests():
run = "Commit"
eleTestsuite = None
fails = 0
passes = 0
errors = 0
total = 0
filename = "compliance.xml"
eleTestsuites = ET.Element('testsuites')
eleTestsuite = ET.SubElement(eleTestsuites, 'testsuite', name=run,
tests="%d" %(errors + passes + fails), failures="%d" %fails, errors="%d" %errors, skip="0")
for test in tests.keys():
total += 1
eleTestcase = ET.SubElement(eleTestsuite, 'testcase', name="%s" %(test),
time="0")
fails += tests[test](eleTestcase)
eleTestsuite.set("tests", "%s" %total)
eleTestsuite.set("failures", "%s" %fails)
result = ET.tostring(eleTestsuites)
f = open(filename, 'wb')
f.write(result)
f.close()
return fails
fails = run_tests()
print(fails)
sys.exit(fails)