#!/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 top_usage { echo "OAI CI VM script" echo " Original Author: Raphael Defosseux" echo " Requirements:" echo " -- uvtool uvtool-libvirt apt-cacher" echo " -- xenial image already synced" echo "" echo "Usage:" echo "------" echo " oai-ci-vm-tool (-h|--help) {create,destroy,build,wait,test,report-build,report-test} ..." echo "" } function variant_usage { echo " # OpenAirInterface Build Variants" echo " --variant enb-usrp OR -v1" echo " --variant basic-sim OR -v2" echo " --variant phy-sim OR -v3" echo " --variant cppcheck OR -v4" echo " --variant enb-ethernet OR -v7" echo " --variant ue-ethernet OR -v8" echo " # non-OSA Build Variants" echo " --variant flexran-rtc OR -v10" echo " # OpenAirInterface Test Variants" echo " --variant l1-sim OR -v20" echo " --variant rf-sim OR -v21" echo " --variant l2-sim OR -v22" } MY_DIR=$(dirname $(readlink -f $0)) . $MY_DIR/createVM.sh . $MY_DIR/buildOnVM.sh . $MY_DIR/waitBuildOnVM.sh . $MY_DIR/destroyAllRunningVM.sh . $MY_DIR/runTestOnVM.sh . $MY_DIR/reportBuildLocally.sh . $MY_DIR/reportTestLocally.sh if [ $# -lt 1 ] then echo "Syntax Error: too few arguments" echo "" top_usage exit 1 fi VM_TEMPLATE=ci- JOB_NAME=XX BUILD_ID=XX VM_NAME=ci-enb-usrp VM_MEMORY=2048 VM_CPU=4 ARCHIVES_LOC=enb_usrp LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=7 BUILD_OPTIONS="--eNB -w USRP" KEEP_VM_ALIVE=0 RUN_OPTIONS="none" DAEMON=0 MR_TRIG=0 PU_TRIG=0 HELP_CMD=0 CREATE_CMD=0 BUILD_CMD=0 WAIT_CMD=0 DESTROY_CMD=0 TEST_CMD=0 REPORT_BUILD_CMD=0 REPORT_TEST_CMD=0 NBARGS=0 while [[ $# -gt 0 ]] do key="$1" case $key in -h|--help) HELP_CMD=1 shift ;; create) CREATE_CMD=1 # It is implied to keep the VM when creating it KEEP_VM_ALIVE=1 shift ;; build) BUILD_CMD=1 shift ;; wait) WAIT_CMD=1 shift ;; test) TEST_CMD=1 shift ;; destroy) DESTROY_CMD=1 shift ;; report-build) REPORT_BUILD_CMD=1 shift ;; report-test) REPORT_TEST_CMD=1 shift ;; -jn|--job-name) JOB_NAME="$2" NBARGS=$[$NBARGS+1] shift shift ;; -id|--build-id) BUILD_ID="$2" NBARGS=$[$NBARGS+2] shift shift ;; -ws|--workspace) JENKINS_WKSP="$2" NBARGS=$[$NBARGS+4] shift shift ;; -k|--keep-vm-alive) KEEP_VM_ALIVE=1 NBARGS=$[$NBARGS+8] shift ;; -D|--daemon) DAEMON=1 NBARGS=$[$NBARGS+16] shift ;; -gu|--git-url) GIT_URL="$2" NBARGS=$[$NBARGS+32] shift shift ;; --trigger) TRIG="$2" case $TRIG in merge-request) MR_TRIG=1 ;; push) PU_TRIG=1 ;; *) echo "" echo "Syntax Error: Invalid Trigger option -> $TRIG" echo "" trigger_usage exit ;; esac NBARGS=$[$NBARGS+64] shift shift ;; -mr) MR_TRIG=1 NBARGS=$[$NBARGS+64] shift ;; -pu) PU_TRIG=1 NBARGS=$[$NBARGS+64] shift ;; -sb|--src-branch) SOURCE_BRANCH="$2" NBARGS=$[$NBARGS+1024] shift shift ;; -sc|--src-commit) SOURCE_COMMIT_ID="$2" NBARGS=$[$NBARGS+2048] shift shift ;; -tb|--target-branch) TARGET_BRANCH="$2" NBARGS=$[$NBARGS+4096] shift shift ;; -tc|--target-commit) TARGET_COMMIT_ID="$2" NBARGS=$[$NBARGS+8192] shift shift ;; -br|--branch) SOURCE_BRANCH="$2" NBARGS=$[$NBARGS+16384] shift shift ;; -co|--commit) SOURCE_COMMIT_ID="$2" NBARGS=$[$NBARGS+32768] shift shift ;; -v1) VM_NAME=ci-enb-usrp ARCHIVES_LOC=enb_usrp LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=7 BUILD_OPTIONS="--eNB -w USRP --mu" NBARGS=$[$NBARGS+256] shift ;; -v2) VM_NAME=ci-basic-sim ARCHIVES_LOC=basic_sim LOG_PATTERN=basic_simulator NB_PATTERN_FILES=2 BUILD_OPTIONS="--basic-simulator" VM_MEMORY=8192 VM_CPU=4 RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] shift ;; -v3) VM_NAME=ci-phy-sim ARCHIVES_LOC=phy_sim LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=3 BUILD_OPTIONS="--phy_simulators" RUN_OPTIONS="./run_exec_autotests.bash -g \"01510*\" -q -np -b" NBARGS=$[$NBARGS+256] shift ;; -v4) VM_NAME=ci-cppcheck VM_MEMORY=4096 ARCHIVES_LOC=cppcheck LOG_PATTERN=cppcheck.xml NB_PATTERN_FILES=1 BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2 --suppressions-list=ci-scripts/cppcheck_suppressions.list -I common/utils -j4" NBARGS=$[$NBARGS+256] shift ;; -v7) VM_NAME=ci-enb-ethernet VM_MEMORY=4096 VM_CPU=4 ARCHIVES_LOC=enb_eth LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=6 BUILD_OPTIONS="--eNB -t ETHERNET" NBARGS=$[$NBARGS+256] shift ;; -v8) VM_NAME=ci-ue-ethernet VM_MEMORY=4096 VM_CPU=4 ARCHIVES_LOC=ue_eth LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=10 BUILD_OPTIONS="--UE -t ETHERNET" NBARGS=$[$NBARGS+256] shift ;; -v10) VM_NAME=ci-flexran-rtc ARCHIVES_LOC=flexran LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=1 BUILD_OPTIONS="cmake . && make -j2" NBARGS=$[$NBARGS+256] shift ;; -v20) VM_NAME=ci-l1-sim ARCHIVES_LOC=l1_sim RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] shift ;; -v21) VM_NAME=ci-rf-sim ARCHIVES_LOC=rf_sim RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] shift ;; -v22) VM_NAME=ci-l2-sim ARCHIVES_LOC=l2_sim RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] shift ;; --variant) variant="$2" case $variant in enb-usrp) VM_NAME=ci-enb-usrp ARCHIVES_LOC=enb_usrp LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=7 BUILD_OPTIONS="--eNB -w USRP --mu" NBARGS=$[$NBARGS+256] ;; basic-sim) VM_NAME=ci-basic-sim ARCHIVES_LOC=basic_sim LOG_PATTERN=basic_simulator NB_PATTERN_FILES=2 BUILD_OPTIONS="--basic-simulator" VM_MEMORY=8192 VM_CPU=4 RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] ;; phy-sim) VM_NAME=ci-phy-sim ARCHIVES_LOC=phy_sim LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=3 BUILD_OPTIONS="--phy_simulators" RUN_OPTIONS="./run_exec_autotests.bash -g \"01510*\" -q -np -b" NBARGS=$[$NBARGS+256] ;; cppcheck) VM_NAME=ci-cppcheck VM_MEMORY=4096 ARCHIVES_LOC=cppcheck LOG_PATTERN=cppcheck.xml NB_PATTERN_FILES=1 BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2 --suppressions-list=ci-scripts/cppcheck_suppressions.list -I common/utils -j4" NBARGS=$[$NBARGS+256] ;; enb-ethernet) VM_NAME=ci-enb-ethernet VM_MEMORY=4096 VM_CPU=4 ARCHIVES_LOC=enb_eth LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=6 BUILD_OPTIONS="--eNB -t ETHERNET" NBARGS=$[$NBARGS+256] ;; ue-ethernet) VM_NAME=ci-ue-ethernet VM_MEMORY=4096 VM_CPU=4 ARCHIVES_LOC=ue_eth LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=10 BUILD_OPTIONS="--UE -t ETHERNET" NBARGS=$[$NBARGS+256] ;; flexran-rtc) VM_NAME=ci-flexran-rtc ARCHIVES_LOC=flexran LOG_PATTERN=.Rel14.txt NB_PATTERN_FILES=1 BUILD_OPTIONS="cmake . && make -j2" NBARGS=$[$NBARGS+256] ;; l1-sim) VM_NAME=ci-l1-sim ARCHIVES_LOC=l1_sim RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] ;; rf-sim) VM_NAME=ci-rf-sim ARCHIVES_LOC=rf_sim RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] ;; l2-sim) VM_NAME=ci-l2-sim ARCHIVES_LOC=l2_sim RUN_OPTIONS="complex" NBARGS=$[$NBARGS+256] ;; *) echo "" echo "Syntax Error: Invalid Variant option -> $variant" echo "" variant_usage exit 1 esac shift shift ;; *) echo "Syntax Error: unknown option: $key" echo "" top_usage exit 1 esac done MANY_CMDS=$[$CREATE_CMD+$BUILD_CMD+$WAIT_CMD+$DESTROY_CMD+$TEST_CMD+$REPORT_BUILD_CMD+$REPORT_TEST_CMD] if [ $MANY_CMDS -gt 1 ] then echo "Syntax Error: too many commands" top_usage exit 1 fi if [ $HELP_CMD -eq 1 ] then if [ $MANY_CMDS -eq 0 ] then top_usage exit 0 fi if [ $CREATE_CMD -eq 1 ] then create_usage exit 0 fi if [ $BUILD_CMD -eq 1 ] then build_usage exit 0 fi if [ $WAIT_CMD -eq 1 ] then wait_usage exit 0 fi if [ $TEST_CMD -eq 1 ] then run_test_usage exit 0 fi if [ $DESTROY_CMD -eq 1 ] then destroy_usage exit 0 fi if [ $REPORT_BUILD_CMD -eq 1 ] then report_build_usage exit 0 fi if [ $REPORT_TEST_CMD -eq 1 ] then report_test_usage exit 0 fi else if [ $MANY_CMDS -eq 0 ] then echo "Syntax Error: no command" top_usage exit 1 fi # For create, mandatory options: jn, id. Optional: variant if [ $CREATE_CMD -eq 1 ] && [ $NBARGS -ne 3 ] && [ $NBARGS -ne 259 ] then echo "Syntax Error: unsupported option(s) for create command" create_usage exit 1 fi # For build, mandatory options: jn, id, ws. Optional: variant, k, D if [ $BUILD_CMD -eq 1 ] && [ $NBARGS -ne 7 ] && [ $NBARGS -ne 263 ] && [ $NBARGS -ne 15 ] && [ $NBARGS -ne 271 ] && [ $NBARGS -ne 23 ] && [ $NBARGS -ne 279 ] && [ $NBARGS -ne 31 ] && [ $NBARGS -ne 287 ] then echo "Syntax Error: unsupported option(s) for build command" build_usage exit 1 fi # For wait, mandatory options: jn, id, ws. Optional: variant, k if [ $WAIT_CMD -eq 1 ] && [ $NBARGS -ne 7 ] && [ $NBARGS -ne 263 ] && [ $NBARGS -ne 15 ] && [ $NBARGS -ne 271 ] then echo "Syntax Error: unsupported option(s) for wait command" wait_usage exit 1 fi # For test, mandatory options: jn, id, ws. Optional: variant, k if [ $TEST_CMD -eq 1 ] && [ $NBARGS -ne 7 ] && [ $NBARGS -ne 263 ] && [ $NBARGS -ne 15 ] && [ $NBARGS -ne 271 ] then echo "Syntax Error: unsupported option(s) for test command" run_test_usage exit 1 fi # For destroy, mandatory options: jn, id. if [ $DESTROY_CMD -eq 1 ] && [ $NBARGS -ne 3 ] then echo "Syntax Error: unsupported option(s) for destroy command" destroy_usage exit 1 fi # For report-build, mandatory options: jn, id, ws, gu, pu, br,co. # or: jn, id, ws, gu, mr, sb, sc, tb, tc. if [ $REPORT_BUILD_CMD -eq 1 ] && [ $NBARGS -ne 15463 ] && [ $NBARGS -ne 49255 ] then echo "Syntax Error: unsupported option(s) for report-build command" report_build_usage exit 1 fi # For report-test, mandatory options: jn, id, ws, gu, pu, br,co. # or: jn, id, ws, gu, mr, sb, sc, tb, tc. if [ $REPORT_TEST_CMD -eq 1 ] && [ $NBARGS -ne 15463 ] && [ $NBARGS -ne 49255 ] then echo "Syntax Error: unsupported option(s) for report-test command" report_test_usage exit 1 fi fi if [ $REPORT_BUILD_CMD -ne 1 ] && [ $REPORT_TEST_CMD -ne 1 ] then # Checking uvt-kvm is installed UVT_KVM_PATH=`which uvt-kvm | grep -c uvt-kvm` if [ $UVT_KVM_PATH -eq 0 ] then echo "Error: uvt-kvm is not installed" top_usage exit 1 fi fi if [ "$JOB_NAME" == "XX" ] || [ "$BUILD_ID" == "XX" ] then VM_TEMPLATE=ci- else VM_TEMPLATE=${JOB_NAME}-b${BUILD_ID}- fi VM_NAME=`echo $VM_NAME | sed -e "s#ci-#$VM_TEMPLATE#"` VM_CMDS=${VM_NAME}_cmds.txt ARCHIVES_LOC=${JENKINS_WKSP}/archives/${ARCHIVES_LOC} STATUS=0 if [ $CREATE_CMD -eq 1 ] then if [[ $VM_NAME =~ .*-l2-sim.* ]] then echo "Selected variant is no more a build variant" exit 0 else create_vm fi fi if [ $BUILD_CMD -eq 1 ] then if [[ $VM_NAME =~ .*-l2-sim.* ]] then echo "Selected variant is no more a build variant" exit 0 else build_on_vm fi if [ $DAEMON -eq 0 ] && [ $STATUS -eq 0 ] then check_on_vm_build fi fi if [ $WAIT_CMD -eq 1 ] then if [[ $VM_NAME =~ .*-l2-sim.* ]] then echo "Selected variant is no more a build variant" exit 0 else wait_on_vm_build fi if [ $STATUS -eq 0 ] then check_on_vm_build fi fi if [ $TEST_CMD -eq 1 ] then # Comment out or delete the following lines if you want to run L1-simulator in your branch and/or merge request if [[ $VM_NAME =~ .*-l1-sim.* ]] then echo "Currently L1-Simulator Testing is not implemented / enabled" echo "Comment out these lines in ./ci-scripts/oai-ci-vm-tool if you want to run it" echo "STATUS seems OK" exit $STATUS fi # end to comment out for L1-simulator # Comment out or delete the following lines if you want to run RF-simulator in your branch and/or merge request if [[ $VM_NAME =~ .*-rf-sim.* ]] then echo "Currently RF-Simulator Testing is not implemented / enabled" echo "Comment out these lines in ./ci-scripts/oai-ci-vm-tool if you want to run it" echo "STATUS seems OK" exit $STATUS fi # end to comment out for RF-simulator ARCHIVES_LOC=${ARCHIVES_LOC}/test run_test_on_vm fi if [ $DESTROY_CMD -eq 1 ] then destroy_vm fi if [ $REPORT_BUILD_CMD -eq 1 ] then report_build fi if [ $REPORT_TEST_CMD -eq 1 ] then report_test fi # Did command pass or fail? if [ $STATUS -eq 0 ] then echo "STATUS seems OK" else echo "STATUS failed?" fi exit $STATUS