summaryrefslogtreecommitdiffstats
path: root/check
diff options
context:
space:
mode:
authorMartin Klozik <martinx.klozik@intel.com>2017-02-02 13:43:17 +0000
committerMartin Klozik <martinx.klozik@intel.com>2017-02-16 10:39:47 +0000
commita4a8e7598a82189d16f68a4e113447fc344464c7 (patch)
treee625d51f578eaef924f804609cd50e5ab0c20e34 /check
parentca9c9275ed6d5d852987c69a378e88a3502cb2ab (diff)
ci: Execute pylint checks by VERIFY and MERGE jobs
Pylint should be executed automatically for every patch to assure, that new code meets vsperf coding standards. JIRA: VSPERF-114 Change-Id: Icb1000e207b2d728497ff3d349fb3cb8334baac7 Signed-off-by: Martin Klozik <martinx.klozik@intel.com>
Diffstat (limited to 'check')
-rwxr-xr-xcheck71
1 files changed, 57 insertions, 14 deletions
diff --git a/check b/check
index f7fca3da..1d67e293 100755
--- a/check
+++ b/check
@@ -1,6 +1,6 @@
#!/bin/bash
-# Copyright 2015 Intel Corporation.
+# Copyright 2017 Intel Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -19,9 +19,10 @@
PYLINT="pylint"
PYLINT_RC='pylintrc'
PYLINT_RATING_GATE="10"
-FILE_REGEX="(vsperf|.*\.py)"
-FIND_OPTIONS="-regextype posix-egrep -iregex (./)?$FILE_REGEX"
+PYLINT_RATING_MIN=$PYLINT_RATING_GATE
+FILE_REGEX="(^vsperf|\.py)$"
FILE_LIST="/tmp/vsperf_check_list.txt"
+BC=`which bc`
# print usage if requested
function usage() {
@@ -39,8 +40,10 @@ Otherwise gained pylint rating will be displayed.
-h, --help Script usage
+ -b, --black Suppress colours. Output will be black&white.
-m, --modified Script will check python files, which have
been modified within current repository.
+
Examples:
./check
@@ -64,9 +67,27 @@ EOM
# compare pylint result with predefined gate
function rating_is_ok() {
# bc is not part of basic Centos installation
- # so let us do integer comparison only
- int_rating=`echo $1 | sed -e 's/\..*$//'`
- [ $int_rating -ge $PYLINT_RATING_GATE ]
+ # so let us check if it is available
+ if [ "x$BC" == "x" ] ; then
+ # no bc, so do integer comparison only
+ int_rating=`echo $1 | sed -e 's/\..*$//'`
+ int_rating_min=`echo $PYLINT_RATING_MIN | sed -e 's/\..*$//'`
+ [ $int_rating -lt $int_rating_min ] && PYLINT_RATING_MIN=$int_rating
+ if [ $int_rating -lt $PYLINT_RATING_GATE ] ; then
+ return 1
+ else
+ return 0
+ fi
+ else
+ if (( $(echo "$1<$PYLINT_RATING_MIN" | bc -l) )) ; then
+ PYLINT_RATING_MIN=$1
+ fi
+ if (( $(echo "$1<$PYLINT_RATING_GATE" | bc -l) )) ; then
+ return 1
+ else
+ return 0
+ fi
+ fi
}
##### MAIN #####
@@ -76,6 +97,19 @@ if [ "x$1" == "x-h" -o "x$1" == "x--help" ] ; then
exit 0
fi
+# set colours
+if [ "x$1" == "x-b" -o "x$1" == "x--black" ] ; then
+ shift
+ RED=""
+ GREEN=""
+ BLACK=""
+else
+ RED="\e[31m"
+ GREEN="\e[32m"
+ BLACK="\e[0m"
+fi
+
+
# check if pylint is available
if ! which $PYLINT &>/dev/null ; then
echo "$PYLINT is not available, thus check can't be executed"
@@ -95,14 +129,14 @@ EXCLUDED_MODULES=`grep "^ *EXCLUDE_MODULES" conf/00_common.conf | tr '"' "'"`
rm $FILE_LIST &> /dev/null
if [ "x$1" == "x-m" -o "x$1" == "x--modified" ] ; then
# check of modified files requested
- git status --porcelain | cut -b4- | egrep -i "^${FILE_REGEX}$" > $FILE_LIST
+ git status --porcelain | cut -b4- | egrep -i "${FILE_REGEX}" | sort > $FILE_LIST
elif [ "x$*" == "x" ] ; then
# list is empty, check all python files
- find . -type f $FIND_OPTIONS > $FILE_LIST
+ git ls-tree --name-only -r HEAD | egrep -i "${FILE_REGEX}" | sort > $FILE_LIST
else
for item in $* ; do
if [ -d $item ] ; then
- find $item -type f $FIND_OPTIONS >> $FILE_LIST
+ git ls-tree --name-only -r HEAD $item | egrep -i "${FILE_REGEX}" | sort >> $FILE_LIST
elif [ -f $item ] ; then
echo $item >> $FILE_LIST
else
@@ -113,22 +147,26 @@ else
fi
# check if there is anything to check
+echo "Execution of pylint checks:"
if [ -s $FILE_LIST ] ; then
for pyfile in `cat $FILE_LIST | sort` ; do
# get base name
pyfile_basename="'"`basename $pyfile .py`"'"
# and check if it should be excluded or not
if ( echo $EXCLUDED_MODULES | grep -w $pyfile_basename > /dev/null ) ; then
- printf "%-70s \e[32m%-6s\e[0m\n" $pyfile "EXCLUDED"
+ printf " %-70s %-6s\n" $pyfile "EXCLUDED"
continue
fi
# run pylint and extract final rating
rating=`$PYLINT --rcfile $PYLINT_RC $pyfile 2>/dev/null | tail -n3 | grep rated | sed -e 's/^.*rated at \([0-9.]*\).*$/\1/'`
# evaluate and display aquired rating
- if rating_is_ok $rating ; then
- printf "%-70s \e[32m%-6s\e[0m\n" $pyfile "OK"
+ if [ "x$rating" == "x" ] ; then
+ # rating is not available for files without python statements
+ printf " %-70s %-6s\n" $pyfile "NA"
+ elif rating_is_ok $rating ; then
+ printf " %-70s ${GREEN}%-6s${BLACK}\n" $pyfile "OK"
else
- printf "%-70s \e[31m%-6s\e[0m\n" $pyfile $rating
+ printf " %-70s ${RED}%-6s${BLACK}\n" $pyfile $rating
fi
done
else
@@ -139,5 +177,10 @@ fi
# clean up
rm $FILE_LIST &> /dev/null
-exit 0
+if [ "$PYLINT_RATING_MIN" != "$PYLINT_RATING_GATE" ] ; then
+ echo -e "Pylint check has failed. All files must have score ${PYLINT_RATING_GATE}.\n"
+ exit 1
+else
+ exit 0
+fi
##### MAIN end #####