From 831044de250ccadaf0d6c81fd4a711a44cb6639d Mon Sep 17 00:00:00 2001 From: Raphael Defosseux Date: Fri, 1 Mar 2019 12:03:26 +0100 Subject: [PATCH] CI: adding notification when added CPPCHECK errors/warnings are detected. Signed-off-by: Raphael Defosseux --- ci-scripts/Jenkinsfile-gitlab | 11 ++ ci-scripts/reportBuildLocally.sh | 183 +++++++++++++++++++++++++------ 2 files changed, 158 insertions(+), 36 deletions(-) diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab index ff0030d3c4..4954cc141e 100644 --- a/ci-scripts/Jenkinsfile-gitlab +++ b/ci-scripts/Jenkinsfile-gitlab @@ -290,6 +290,17 @@ pipeline { } if ("MERGE".equals(env.gitlabActionType)) { sh "./ci-scripts/oai-ci-vm-tool report-build --workspace $WORKSPACE --git-url ${GIT_URL} --job-name ${JOB_NAME} --build-id ${BUILD_ID} --trigger merge-request --src-branch ${env.gitlabSourceBranch} --src-commit ${env.gitlabMergeRequestLastCommit} --target-branch ${env.gitlabTargetBranch} --target-commit ${GIT_COMMIT}" + // If the merge request has introduced more CPPCHECK errors or warnings, notifications in GitLab + if (fileExists('oai_cppcheck_added_errors.txt')) { + def ret=readFile('./oai_cppcheck_added_errors.txt').trim(); + if ("0".equals(ret)) { + echo "No added cppcheck warnings/errors in this merge request" + } else { + def message = "OAI " + JOB_NAME + " build (" + BUILD_ID + "): Some modified files in Merge Request MAY have INTRODUCED up to " + ret + " CPPCHECK errors/warnings" + addGitLabMRComment comment: message + } + } + // If the merge request has introduced compilation warnings, notifications in GitLab sh "./ci-scripts/checkAddedWarnings.sh --src-branch ${env.gitlabSourceBranch} --target-branch ${env.gitlabTargetBranch}" def res=readFile('./oai_warning_files.txt').trim(); if ("0".equals(res)) { diff --git a/ci-scripts/reportBuildLocally.sh b/ci-scripts/reportBuildLocally.sh index 08d2f78443..3e385fb810 100755 --- a/ci-scripts/reportBuildLocally.sh +++ b/ci-scripts/reportBuildLocally.sh @@ -218,6 +218,22 @@ function sca_summary_table_header { echo "

$2

" >> ./build_results.html NB_ERRORS=`egrep -c "severity=\"error\"" $1` NB_WARNINGS=`egrep -c "severity=\"warning\"" $1` + ADDED_ERRORS="0" + ADDED_WARNINGS="0" + if [ $MR_TRIG -eq 1 ] + then + if [ -d ../../cppcheck_archives ] + then + if [ -d ../../cppcheck_archives/$JOB_NAME ] + then + ADDED_ERRORS=`diff $1 ../../cppcheck_archives/$JOB_NAME/cppcheck.xml | egrep --color=never "^<" | egrep -c "severity=\"error"` + ADDED_WARNINGS=`diff $1 ../../cppcheck_archives/$JOB_NAME/cppcheck.xml | egrep --color=never "^<" | egrep -c "severity=\"warning"` + fi + fi + local TOTAL_NUMBER=$[$ADDED_ERRORS+$ADDED_WARNINGS] + if [ -f $JENKINS_WKSP/oai_cppcheck_added_errors.txt ]; then rm -f $JENKINS_WKSP/oai_cppcheck_added_errors.txt; fi + echo "$TOTAL_NUMBER" > $JENKINS_WKSP/oai_cppcheck_added_errors.txt + fi if [ $NB_ERRORS -eq 0 ] && [ $NB_WARNINGS -eq 0 ] then echo "
" >> ./build_results.html @@ -227,16 +243,54 @@ function sca_summary_table_header { if [ $NB_ERRORS -eq 0 ] then echo "
" >> ./build_results.html - echo " CPPCHECK found NO error and $NB_WARNINGS warnings " >> ./build_results.html + if [ $PU_TRIG -eq 1 ] + then + echo " CPPCHECK found NO error and $NB_WARNINGS warnings " >> ./build_results.html + fi + if [ $MR_TRIG -eq 1 ] + then + if [ $ADDED_WARNINGS -eq 0 ] + then + echo " CPPCHECK found NO error and $NB_WARNINGS warnings " >> ./build_results.html + else + echo " CPPCHECK found NO error and $NB_WARNINGS warnings " >> ./build_results.html + fi + fi echo "
" >> ./build_results.html else echo "
" >> ./build_results.html - echo " CPPCHECK found $NB_ERRORS errors and $NB_WARNINGS warnings " >> ./build_results.html + if [ $PU_TRIG -eq 1 ] + then + echo " CPPCHECK found $NB_ERRORS errors and $NB_WARNINGS warnings " >> ./build_results.html + fi + if [ $MR_TRIG -eq 1 ] + then + if [ $ADDED_ERRORS -eq 0 ] && [ $ADDED_WARNINGS -eq 0 ] + then + echo " CPPCHECK found $NB_ERRORS errors and $NB_WARNINGS warnings " >> ./build_results.html + else + echo " CPPCHECK found $NB_ERRORS errors and $NB_WARNINGS warnings " >> ./build_results.html + echo "
" >> ./build_results.html + echo "
" >> ./build_results.html + echo " This Merge Request may have introduced up to $ADDED_ERRORS errors and $ADDED_WARNINGS warnings.
" >> ./build_results.html + fi + fi echo "
" >> ./build_results.html fi fi + if [ $PU_TRIG -eq 1 ] + then + if [ -d ../../cppcheck_archives ] + then + if [ -d ../../cppcheck_archives/$JOB_NAME ] + then + cp $1 ../../cppcheck_archives/$JOB_NAME + fi + fi + fi echo " " >> ./build_results.html echo "
" >> ./build_results.html + echo "
" >> ./build_results.html echo " " >> ./build_results.html echo " " >> ./build_results.html echo " " >> ./build_results.html @@ -301,6 +355,43 @@ function sca_summary_table_footer { echo "
Error / Warning Type
" >> ./build_results.html echo "

Full details in zipped artifact (cppcheck/cppcheck.xml)

" >> ./build_results.html echo "

Graphical Interface tool : cppcheck-gui -l cppcheck/cppcheck.xml

" >> ./build_results.html + + if [ $MR_TRIG -eq 1 ] + then + if [ $ADDED_ERRORS -ne 0 ] || [ $ADDED_WARNINGS -ne 0 ] + then + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + SEVERITY="none" + POTENTIAL_FILES=`diff $1 ../../cppcheck_archives/$JOB_NAME/cppcheck.xml | egrep --color=never "^<" | egrep "location file|severity" | sed -e "s# #@#g"` + for POT_FILE in $POTENTIAL_FILES + do + if [ `echo $POT_FILE | grep -c location` -eq 1 ] + then + FILENAME=`echo $POT_FILE | sed -e "s#^.*file=\"##" -e "s#\"@line.*/>##"` + LINE=`echo $POT_FILE | sed -e "s#^.*line=\"##" -e "s#\"/>##"` + if [[ $SEVERITY != *"none" ]] + then + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + echo " " >> ./build_results.html + fi + else + SEVERITY=`echo $POT_FILE | sed -e "s#^.*severity=\"##" -e "s#\"@msg=.*##"` + MESSAGE=`echo $POT_FILE | sed -e "s#^.*msg=\"##" -e "s#\"@verbose=.*##" -e "s#@# #g"` + fi + done + echo "
Potential File(s) impacted by added errors/warningsLine NumberSeverityMessage
$FILENAME$LINE$SEVERITY$MESSAGE
" >> ./build_results.html + fi + fi echo "
" >> ./build_results.html } @@ -522,41 +613,61 @@ function report_build { echo " " >> ./build_results.html echo "
" >> ./build_results.html - for DETAILS_TABLE in `ls ./enb_usrp_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - for DETAILS_TABLE in `ls ./basic_sim_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - for DETAILS_TABLE in `ls ./phy_sim_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - - for DETAILS_TABLE in `ls ./gnb_usrp_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - for DETAILS_TABLE in `ls ./nrue_usrp_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - for DETAILS_TABLE in `ls ./enb_eth_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - for DETAILS_TABLE in `ls ./ue_eth_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done - if [ -e ./archives/red_hat ] + if [ -f ./enb_usrp_row1.html ] || [ -f ./enb_usrp_row2.html ] || [ -f ./enb_usrp_row3.html ] || [ -f ./enb_usrp_row4.html ] then - for DETAILS_TABLE in `ls ./enb_usrp_rh_row*.html` - do - cat $DETAILS_TABLE >> ./build_results.html - done + for DETAILS_TABLE in `ls ./enb_usrp_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./basic_sim_row1.html ] || [ -f ./basic_sim_row2.html ] || [ -f ./basic_sim_row3.html ] + then + for DETAILS_TABLE in `ls ./basic_sim_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./phy_sim_row1.html ] || [ -f ./phy_sim_row2.html ] || [ -f ./phy_sim_row3.html ] + then + for DETAILS_TABLE in `ls ./phy_sim_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./gnb_usrp_row1.html ] || [ -f ./gnb_usrp_row2.html ] || [ -f ./gnb_usrp_row3.html ] || [ -f ./gnb_usrp_row4.html ] + then + for DETAILS_TABLE in `ls ./gnb_usrp_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./nrue_usrp_row1.html ] || [ -f ./nrue_usrp_row2.html ] || [ -f ./nrue_usrp_row3.html ] || [ -f ./nrue_usrp_row4.html ] + then + for DETAILS_TABLE in `ls ./nrue_usrp_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./enb_eth_row1.html ] || [ -f ./enb_eth_row2.html ] || [ -f ./enb_eth_row3.html ] || [ -f ./enb_eth_row4.html ] || [ -f ./enb_eth_row5.html ] || [ -f ./enb_eth_row6.html ] + then + for DETAILS_TABLE in `ls ./enb_eth_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./ue_eth_row1.html ] || [ -f ./ue_eth_row2.html ] || [ -f ./ue_eth_row3.html ] || [ -f ./ue_eth_row4.html ] || [ -f ./ue_eth_row5.html ] || [ -f ./ue_eth_row6.html ] + then + for DETAILS_TABLE in `ls ./ue_eth_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done + fi + if [ -f ./enb_usrp_rh_row1.html ] || [ -f ./enb_usrp_rh_row2.html ] || [ -f ./enb_usrp_rh_row3.html ] || [ -f ./enb_usrp_rh_row4.html ] + then + for DETAILS_TABLE in `ls ./enb_usrp_rh_row*.html` + do + cat $DETAILS_TABLE >> ./build_results.html + done fi rm -f ./*_row*.html