From 86c199e3f7ebbe135ab678281300ea48c205b85e Mon Sep 17 00:00:00 2001
From: Raphael Defosseux <raphael.defosseux@eurecom.fr>
Date: Wed, 1 Aug 2018 14:36:46 +0200
Subject: [PATCH] CI:   Adding a build stage on CentOS (only one variant : -w
 USRP --eNB)   Should not trigger a fail for the moment

Signed-off-by: Raphael Defosseux <raphael.defosseux@eurecom.fr>
---
 ci-scripts/Jenkinsfile-gitlab    |  44 +++++++
 ci-scripts/buildOnRH.sh          | 209 +++++++++++++++++++++++++++++++
 ci-scripts/reportBuildLocally.sh |  17 ++-
 3 files changed, 269 insertions(+), 1 deletion(-)
 create mode 100755 ci-scripts/buildOnRH.sh

diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index 00f45355dc..2b777f1505 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -30,6 +30,8 @@ def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
     }
 }
 
+def doRedHatBuild = false
+
 pipeline {
     agent {
         label 'bellatrix'
@@ -42,6 +44,30 @@ pipeline {
     }
 
     stages {
+        stage ("Verify Parameters") {
+            steps {
+                script {
+                    echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
+                    def allParametersPresent = true
+
+                    if (params.RedHatRemoteServer == null) {
+                        allParametersPresent = false
+                    }
+                    if (params.RedHatRemoteCredentials == null) {
+                        allParametersPresent = false
+                    }
+                    if (params.RedHatWorkingPath == null) {
+                        allParametersPresent = false
+                    }
+                    if (allParametersPresent) {
+			echo "Performing Red Hat Build"
+                        doRedHatBuild = true
+                    } else {
+                        doRedHatBuild = false
+                    }
+                }
+            }
+        }
         stage ("Verify Guidelines") {
             steps {
                 echo "Git URL         is ${GIT_URL}"
@@ -165,6 +191,24 @@ pipeline {
                         }
                     }
                 }
+                stage ("Build eNb-USRP on Red Hat") {
+                    when {
+                        expression {doRedHatBuild}
+                    }
+                    steps {
+                        script {
+                            try {
+                                withCredentials([
+                                    [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.RedHatRemoteCredentials}", usernameVariable: 'RH_Username', passwordVariable: 'RH_Password']
+                                ]) {
+                                    sh "./ci-scripts/buildOnRH.sh --workspace $WORKSPACE --job-name ${JOB_NAME} --build-id ${BUILD_ID} --remote-host ${params.RedHatRemoteServer} --remote-path ${params.RedHatWorkingPath} --remote-user-name ${RH_Username} --remote-password ${RH_Password}"
+                                }
+                            } catch (Exception e) {
+                                echo "Red Hat build failed not an error now"
+                            }
+                        }
+                    }
+                }
             }
             post {
                 always {
diff --git a/ci-scripts/buildOnRH.sh b/ci-scripts/buildOnRH.sh
new file mode 100755
index 0000000000..ce5b24dc49
--- /dev/null
+++ b/ci-scripts/buildOnRH.sh
@@ -0,0 +1,209 @@
+#!/bin/bash
+#/*
+# * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+# * contributor license agreements.  See the NOTICE file distributed with
+# * this work for additional information regarding copyright ownership.
+# * The OpenAirInterface Software Alliance licenses this file to You under
+# * the OAI Public License, Version 1.1  (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.openairinterface.org/?page_id=698
+# *
+# * 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.
+# *-------------------------------------------------------------------------------
+# * For more information about the OpenAirInterface (OAI) Software Alliance:
+# *      contact@openairinterface.org
+# */
+
+function usage {
+    echo "OAI RedHat Build Check script"
+    echo "   Original Author: Raphael Defosseux"
+
+    echo ""
+    echo "Usage:"
+    echo "------"
+    echo "    buildOnRH.sh [OPTIONS]"
+    echo ""
+    echo "Options:"
+    echo "--------"
+    echo "    --job-name #### OR -jn ####"
+    echo "    Specify the name of the Jenkins job."
+    echo ""
+    echo "    --build-id #### OR -id ####"
+    echo "    Specify the build ID of the Jenkins job."
+    echo ""
+    echo "    --workspace #### OR -ws ####"
+    echo "    Specify the workspace."
+    echo ""
+    echo "    --remote-host #### OR -rh ####"
+    echo "    Specify the RedHat remote server."
+    echo ""
+    echo "    --remote-user-name #### OR -ru ####"
+    echo "    Specify the RedHat remote server username."
+    echo ""
+    echo "    --remote-password #### OR -rp ####"
+    echo "    Specify the RedHat remote server password."
+    echo ""
+    echo "    --remote-path #### OR -ra ####"
+    echo "    Specify the RedHat remote server path to work on."
+    echo ""
+}
+
+if [ $# -lt 1 ] || [ $# -gt 14 ]
+then
+    echo "Syntax Error: not the correct number of arguments"
+    echo ""
+    usage
+    exit 1
+fi
+
+RH_HOST=XX
+RH_USER=XX
+RH_PASSWD=XX
+RH_PATH=XX
+JOB_NAME=XX
+BUILD_ID=XX
+
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+    -h|--help)
+    shift
+    usage
+    exit 0
+    ;;
+    -jn|--job-name)
+    JOB_NAME="$2"
+    shift
+    shift
+    ;;
+    -id|--build-id)
+    BUILD_ID="$2"
+    shift
+    shift
+    ;;
+    -ws|--workspace)
+    JENKINS_WKSP="$2"
+    shift
+    shift
+    ;;
+    -rh|--remote-host)
+    RH_HOST="$2"
+    shift
+    shift
+    ;;
+    -ru|--remote-user-name)
+    RH_USER="$2"
+    shift
+    shift
+    ;;
+    -rp|--remote-password)
+    RH_PASSWD="$2"
+    shift
+    shift
+    ;;
+    -ra|--remote-path)
+    RH_PATH="$2"
+    shift
+    shift
+    ;;
+    *)
+    echo "Syntax Error: unknown option: $key"
+    echo ""
+    usage
+    exit 1
+esac
+done
+
+if [ ! -f $JENKINS_WKSP/localZip.zip ]
+then
+    echo "Missing localZip.zip file!"
+    exit 1
+fi
+
+if [ "$JOB_NAME" == "XX" ] || [ "$BUILD_ID" == "XX" ] || [ "$RH_HOST" == "XX" ] || [ "$RH_USER" == "XX" ] || [ "$RH_PASSWD" == "XX" ] || [ "$RH_PATH" == "XX" ]
+then
+    echo "Missing options"
+    usage
+    exit 1
+fi
+
+echo "############################################################"
+echo "Copying GIT repo into RedHat Server" 
+echo "############################################################"
+echo "rm -Rf ${RH_PATH}" >> rh-cmd.txt
+echo "mkdir -p ${RH_PATH}" >> rh-cmd.txt
+
+sshpass -p ${RH_PASSWD} ssh -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST} < rh-cmd.txt
+rm -f rh-cmd.txt
+
+echo "############################################################"
+echo "Running install and build script on RedHat Server"
+echo "############################################################"
+sshpass -p ${RH_PASSWD} scp -o 'StrictHostKeyChecking no' $JENKINS_WKSP/localZip.zip ${RH_USER}@${RH_HOST}:${RH_PATH}
+
+echo "cd ${RH_PATH}" > rh-cmd.txt
+echo "unzip -qq localZip.zip" >> rh-cmd.txt
+echo "source oaienv" >> rh-cmd.txt
+echo "cd cmake_targets" >> rh-cmd.txt
+echo "mkdir -p log" >> rh-cmd.txt
+echo "./build_oai -I -w USRP --eNB > log/install-build.txt 2>&1" >> rh-cmd.txt
+sshpass -p ${RH_PASSWD} ssh -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST} < rh-cmd.txt
+
+rm -f rh-cmd.txt
+
+echo "############################################################"
+echo "Creating a tmp folder to store results and artifacts"
+echo "############################################################"
+if [ ! -d $JENKINS_WKSP/archives ]
+then
+    mkdir -p $JENKINS_WKSP/archives
+fi
+
+ARCHIVES_LOC=$JENKINS_WKSP/archives/red_hat
+if [ ! -d $ARCHIVES_LOC ]
+then
+    mkdir -p $ARCHIVES_LOC
+fi
+
+sshpass -p ${RH_PASSWD} scp -o 'StrictHostKeyChecking no' ${RH_USER}@${RH_HOST}:${RH_PATH}/cmake_targets/log/*.txt $ARCHIVES_LOC
+
+echo "############################################################"
+echo "Checking build status" 
+echo "############################################################"
+
+LOG_PATTERN=.Rel14.txt
+NB_PATTERN_FILES=4
+
+LOG_FILES=`ls $ARCHIVES_LOC/*.txt`
+STATUS=0
+NB_FOUND_FILES=0
+
+for FULLFILE in $LOG_FILES
+do
+    if [[ $FULLFILE == *"$LOG_PATTERN"* ]]
+    then
+        filename=$(basename -- "$FULLFILE")
+        PASS_PATTERN=`echo $filename | sed -e "s#$LOG_PATTERN##"`
+        LOCAL_STAT=`egrep -c "Built target $PASS_PATTERN" $FULLFILE`
+        if [ $LOCAL_STAT -eq 0 ]; then STATUS=-1; fi
+        NB_FOUND_FILES=$((NB_FOUND_FILES + 1))
+    fi
+done
+
+if [ $NB_PATTERN_FILES -ne $NB_FOUND_FILES ]; then STATUS=-1; fi
+
+if [ $STATUS -eq 0 ]
+then
+    echo "STATUS seems OK"
+else
+    echo "STATUS failed?"
+fi
+exit $STATUS
diff --git a/ci-scripts/reportBuildLocally.sh b/ci-scripts/reportBuildLocally.sh
index f8a48d9c17..80b8154018 100755
--- a/ci-scripts/reportBuildLocally.sh
+++ b/ci-scripts/reportBuildLocally.sh
@@ -498,6 +498,8 @@ then
     echo "   </table>" >> ./build_results.html
 fi
 
+echo "   <h2>Ubuntu 16.04 LTS -- Summary</h2>" >> ./build_results.html
+
 sca_summary_table_header "OAI Static Code Analysis with CPPCHECK"
 sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized variable" uninitvar
 sca_summary_table_row ./archives/cppcheck/cppcheck.xml "Uninitialized struct member" uninitStructMember
@@ -547,6 +549,15 @@ summary_table_row "RB Tools - Release 14" ./archives/ue_eth/rb_tool.Rel14.txt "B
 summary_table_row "NAS Mesh - Release 14" ./archives/ue_eth/nasmesh.Rel14.txt "Built target nasmesh" ./ue_eth_row6.html
 summary_table_footer
 
+echo "   <h2>Red Hat (CentOS Linux release 7.4.1708) -- Summary</h2>" >> ./build_results.html
+
+summary_table_header "Red Hat -- OAI Build eNB -- USRP option"
+summary_table_row "LTE SoftModem - Release 14" ./archives/red_hat/lte-softmodem.Rel14.txt "Built target lte-softmodem" ./enb_usrp_rh_row1.html
+summary_table_row "Coding - Release 14" ./archives/red_hat/coding.Rel14.txt "Built target coding" ./enb_usrp_rh_row2.html
+summary_table_row "OAI USRP device if - Release 14" ./archives/red_hat/oai_usrpdevif.Rel14.txt "Built target oai_usrpdevif" ./enb_usrp_rh_row3.html
+summary_table_row "Parameters Lib Config - Release 14" ./archives/red_hat/params_libconfig.Rel14.txt "Built target params_libconfig" ./enb_usrp_rh_row4.html
+summary_table_footer
+
 echo "   <h3>Details</h3>" >> ./build_results.html
 
 for DETAILS_TABLE in `ls ./enb_usrp_row*.html`
@@ -569,7 +580,11 @@ for DETAILS_TABLE in `ls ./ue_eth_row*.html`
 do
     cat $DETAILS_TABLE >> ./build_results.html
 done
-rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html
+for DETAILS_TABLE in `ls ./enb_usrp_rh_row*.html`
+do
+    cat $DETAILS_TABLE >> ./build_results.html
+done
+rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html ./enb_usrp_rh_row*.html
 
 echo "</body>" >> ./build_results.html
 echo "</html>" >> ./build_results.html
-- 
2.26.2