From 48ee46e8461ee5a6cce56c89bb791dee004e6300 Mon Sep 17 00:00:00 2001 From: opensource-tnbt Date: Mon, 9 Mar 2020 22:14:43 +0530 Subject: CI: Support Jenkins-Verify Jobs in CIRV This patch adds support to run pylint and sanity checks on patch submission. Signed-off-by: Sridhar K. N. Rao Change-Id: Idd66dcee659814b87642f6b368d85caf92731386 --- check | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100755 check (limited to 'check') diff --git a/check b/check new file mode 100755 index 0000000..5b10198 --- /dev/null +++ b/check @@ -0,0 +1,179 @@ +#!/bin/bash + +# 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. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# CIRV code checker + +PYLINT="pylint" +PYLINT_RC='pylintrc' +PYLINT_RATING_GATE="10" +PYLINT_RATING_MIN=$PYLINT_RATING_GATE +FILE_REGEX="(^valid|\.py)$" +FILE_LIST="/tmp/cirv_check_list.txt" +BC=`which bc` + +# print usage if requested +function usage() { + cat </dev/null ; then + echo "$PYLINT is not available, thus check can't be executed" + exit 1 +fi + +# check if we were run within cirv directory +if [ ! -f INFO.yaml 2> /dev/null ] ; then + echo "`basename $0` must be run from root directory" + exit 2 +fi + +# get list of files to be checked +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}" | sort > $FILE_LIST +elif [ "x$*" == "x" ] ; then + # list is empty, check all python files + git ls-tree --name-only -r HEAD | egrep -i "${FILE_REGEX}" | sort > $FILE_LIST +else + for item in $* ; do + if [ -d $item ] ; then + git ls-tree --name-only -r HEAD $item | egrep -i "${FILE_REGEX}" | sort >> $FILE_LIST + elif [ -f $item ] ; then + echo $item >> $FILE_LIST + else + echo "$item doesn't exist, thus check was aborted" + exit 3 + fi + done +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`"'" + # run pylint and extract final rating + output=`$PYLINT --rcfile $PYLINT_RC $pyfile 2>/dev/null` + rating=`echo -e $output | tail -n3 | grep rated | sed -e 's/^.*rated at \(-\?[0-9.]*\).*$/\1/'` + # evaluate and display aquired rating + 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 + echo -e "$output" | awk '/^\*+ Module|^[A-Z]\:/' + printf " %-70s ${RED}%-6s${BLACK}\n" $pyfile $rating + fi + done +else + echo "Nothing to check." + exit 4 +fi + +# clean up +rm $FILE_LIST &> /dev/null + +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 ##### -- cgit 1.2.3-korg