diff options
author | Martin Klozik <martinx.klozik@intel.com> | 2017-02-02 13:43:17 +0000 |
---|---|---|
committer | Martin Klozik <martinx.klozik@intel.com> | 2017-02-16 10:39:47 +0000 |
commit | a4a8e7598a82189d16f68a4e113447fc344464c7 (patch) | |
tree | e625d51f578eaef924f804609cd50e5ab0c20e34 /check | |
parent | ca9c9275ed6d5d852987c69a378e88a3502cb2ab (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-x | check | 71 |
1 files changed, 57 insertions, 14 deletions
@@ -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 ##### |