blob: 82926aae86c1548998bb7e4eda6db1ce350b10d1 [file] [log] [blame]
#!/bin/bash
#
# Copyright (C) 2022 Wind River Systems, Inc.
#
# 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.
# Ensure we fail the job if any steps fail.
set -e -o pipefail
#########################################################################
# Variables
#########################################################################
SCRIPTS_DIR=$(dirname $(readlink -f $0))
SCRIPTS_NAME=$(basename $0)
TIMESTAMP=`date +"%Y%m%d_%H%M%S"`
#########################################################################
# Common Functions
#########################################################################
help_info () {
cat << ENDHELP
Note:
This is a wrapper script to build both Yocto based and CentOS based images
with default options, and tend to be used by ORAN CI build only.
Usage:
${SCRIPTS_NAME} [-w WORKSPACE_DIR] [-n] [-h]
where:
-w WORKSPACE_DIR is the path for the project
-n dry-run only for bitbake
-h this help info
examples:
$0
$0 -w workspace
ENDHELP
}
echo_step_start() {
[ -n "$1" ] && msg_step=$1
echo "#########################################################################################"
echo "## ${SCRIPTS_NAME} - STEP START: ${msg_step}"
echo "#########################################################################################"
}
echo_step_end() {
[ -n "$1" ] && msg_step=$1
echo "#########################################################################################"
echo "## ${SCRIPTS_NAME} - STEP END: ${msg_step}"
echo "#########################################################################################"
echo
}
echo_info () {
echo "INFO: $1"
}
echo_error () {
echo "ERROR: $1"
}
run_cmd () {
echo
echo_info "$1"
echo "CMD: ${RUN_CMD}"
${RUN_CMD}
}
#########################################################################
# Parse cmd options
#########################################################################
DRYRUN=""
YP_ARGS="-s"
YOCTO_ONLY="No"
CENTOS_ONLY="No"
DEBIAN_ONLY="Yes"
while getopts "w:ycdnh" OPTION; do
case ${OPTION} in
w)
WORKSPACE=`readlink -f ${OPTARG}`
;;
n)
DRYRUN="-n"
YP_ARGS=""
;;
y)
YOCTO_ONLY="Yes"
;;
c)
CENTOS_ONLY="Yes"
;;
d)
DEBIAN_ONLY="Yes"
;;
h)
help_info
exit
;;
esac
done
if [ -z ${WORKSPACE} ]; then
echo_info "No workspace specified, a directory 'workspace' will be created in current directory as the workspace"
WORKSPACE=`readlink -f workspace`
fi
#########################################################################
# Functions for each step
#########################################################################
WORKSPACE_YP=${WORKSPACE}/workspace_yocto
WORKSPACE_CENTOS=${WORKSPACE}/workspace_centos
WORKSPACE_DEB=${WORKSPACE}/workspace_debian
SCRIPT_YP=${SCRIPTS_DIR}/build_inf_yocto/build_inf_yocto.sh
SCRIPT_CENTOS=${SCRIPTS_DIR}/build_inf_centos/build_inf_centos.sh
SCRIPT_CENTOS_PRE=${SCRIPTS_DIR}/build_inf_centos/build_inf_prepare_jenkins.sh
SCRIPT_DEB=${SCRIPTS_DIR}/build_inf_debian/build_inf_debian.sh
SCRIPT_DEB_PRE=${SCRIPTS_DIR}/build_inf_debian/build_inf_prepare_jenkins.sh
prepare_workspace () {
msg_step="Create workspace for the multi-os builds"
echo_step_start
mkdir -p ${WORKSPACE_YP} ${WORKSPACE_CENTOS} ${WORKSPACE_DEB}
echo_info "The following directories are created in your workspace(${WORKSPACE}):"
echo_info "For Yocto buid: ${WORKSPACE_YP}"
echo_info "For CentOS buid: ${WORKSPACE_CENTOS}"
echo_info "For Debian buid: ${WORKSPACE_DEB}"
echo_step_end
}
# debug for CI Jenkins build
get_debug_info () {
msg_step="Get debug info for CI Jenkins build"
echo_step_start
echo_info "=== Get env ==="
env
echo_info "==============="
set -x
df -h
groups
uname -a
cat /etc/*release
lscpu
free -h
rpm -qa|grep mock
mock --debug-config
docker version
set +x
echo_step_end
}
build_yocto () {
msg_step="Yocto builds"
echo_step_start
RUN_CMD="${SCRIPT_YP} -w ${WORKSPACE_YP} ${DRYRUN} ${YP_ARGS}"
run_cmd "Start Yocto builds"
echo_step_end
}
build_centos () {
# dry-run is not supported yet for CentOS build
if [ -z "${DRYRUN}" ]; then
msg_step="CentOS builds"
echo_step_start
if [ "$CI" = "true" ]; then
RUN_CMD="${SCRIPT_CENTOS_PRE} -w ${WORKSPACE_CENTOS}"
run_cmd "Prepare for CentOS builds"
fi
RUN_CMD="${SCRIPT_CENTOS} -w ${WORKSPACE_CENTOS} -m ${DRYRUN}"
run_cmd "Start CentOS builds"
echo_step_end
fi
}
build_debian () {
if [ -z "${DRYRUN}" ]; then
msg_step="Debian builds"
echo_step_start
if [ "$CI" = "true" ]; then
RUN_CMD="${SCRIPT_DEB_PRE} -w ${WORKSPACE_DEB}"
run_cmd "Prepare for Debian builds"
fi
RUN_CMD="${SCRIPT_DEB} -w ${WORKSPACE_DEB} -m ${DRYRUN}"
run_cmd "Start Debian builds"
echo_step_end
fi
}
#########################################################################
# Main process
#########################################################################
prepare_workspace
if [ "$CI" = "true" ]; then
get_debug_info
fi
if [ "${YOCTO_ONLY}" == "Yes" ]; then
build_yocto
elif [ "${CENTOS_ONLY}" == "Yes" ]; then
build_centos
elif [ "${DEBIAN_ONLY}" == "Yes" ]; then
build_debian
else
build_centos
build_yocto
build_debian
fi