build_inf.sh: build yocto before centos
[pti/rtp.git] / scripts / build_inf.sh
1 #!/bin/bash
2 #
3 # Copyright (C) 2022 Wind River Systems, Inc.
4 #
5 #  Licensed under the Apache License, Version 2.0 (the "License");
6 #  you may not use this file except in compliance with the License.
7 #  You may obtain a copy of the License at
8 #
9 #      http://www.apache.org/licenses/LICENSE-2.0
10 #
11 #  Unless required by applicable law or agreed to in writing, software
12 #  distributed under the License is distributed on an "AS IS" BASIS,
13 #  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 #  See the License for the specific language governing permissions and
15 #  limitations under the License.
16
17 # Ensure we fail the job if any steps fail.
18 set -e -o pipefail
19
20 #########################################################################
21 # Variables
22 #########################################################################
23
24 SCRIPTS_DIR=$(dirname $(readlink -f $0))
25 SCRIPTS_NAME=$(basename $0)
26 TIMESTAMP=`date +"%Y%m%d_%H%M%S"`
27
28 #########################################################################
29 # Common Functions
30 #########################################################################
31
32 help_info () {
33 cat << ENDHELP
34 Note:
35 This is a wrapper script to build both Yocto based and CentOS based images
36 with default options, and tend to be used by ORAN CI build only.
37 Usage:
38 ${SCRIPTS_NAME} [-w WORKSPACE_DIR] [-n] [-h]
39 where:
40     -w WORKSPACE_DIR is the path for the project
41     -n dry-run only for bitbake
42     -h this help info
43 examples:
44 $0
45 $0 -w workspace
46 ENDHELP
47 }
48
49 echo_step_start() {
50     [ -n "$1" ] && msg_step=$1
51     echo "#########################################################################################"
52     echo "## ${SCRIPTS_NAME} - STEP START: ${msg_step}"
53     echo "#########################################################################################"
54 }
55
56 echo_step_end() {
57     [ -n "$1" ] && msg_step=$1
58     echo "#########################################################################################"
59     echo "## ${SCRIPTS_NAME} - STEP END: ${msg_step}"
60     echo "#########################################################################################"
61     echo
62 }
63
64 echo_info () {
65     echo "INFO: $1"
66 }
67
68 echo_error () {
69     echo "ERROR: $1"
70 }
71
72 run_cmd () {
73     echo
74     echo_info "$1"
75     echo "CMD: ${RUN_CMD}"
76     ${RUN_CMD}
77 }
78
79 #########################################################################
80 # Parse cmd options
81 #########################################################################
82
83 DRYRUN=""
84 YP_ARGS="-s"
85
86 while getopts "w:b:e:r:unh" OPTION; do
87     case ${OPTION} in
88         w)
89             WORKSPACE=`readlink -f ${OPTARG}`
90             ;;
91         n)
92             DRYRUN="-n"
93             YP_ARGS=""
94             ;;
95         h)
96             help_info
97             exit
98             ;;
99     esac
100 done
101
102 if [ -z ${WORKSPACE} ]; then
103     echo_info "No workspace specified, a directory 'workspace' will be created in current directory as the workspace"
104     WORKSPACE=`readlink -f workspace`
105 fi
106
107 #########################################################################
108 # Functions for each step
109 #########################################################################
110 WORKSPACE_YP=${WORKSPACE}/workspace_yocto
111 WORKSPACE_CENTOS=${WORKSPACE}/workspace_centos
112 SCRIPT_YP=${SCRIPTS_DIR}/build_inf_yocto/build_inf_yocto.sh
113 SCRIPT_CENTOS=${SCRIPTS_DIR}/build_inf_centos/build_inf_centos.sh
114 SCRIPT_CENTOS_PRE=${SCRIPTS_DIR}/build_inf_centos/build_inf_prepare_jenkins.sh
115
116 prepare_workspace () {
117     msg_step="Create workspace for the multi-os builds"
118     echo_step_start
119
120     mkdir -p ${WORKSPACE_YP} ${WORKSPACE_CENTOS}
121
122     echo_info "The following directories are created in your workspace(${WORKSPACE}):"
123     echo_info "For Yocto buid: ${WORKSPACE_YP}"
124     echo_info "For CentOS buid: ${WORKSPACE_CENTOS}"
125
126     echo_step_end
127 }
128
129 # debug for CI Jenkins build
130 get_debug_info () {
131     msg_step="Get debug info for CI Jenkins build"
132     echo_step_start
133
134     echo_info "=== Get env ==="
135     env
136     echo_info "==============="
137
138     set -x
139     df -h
140     groups
141     uname -a
142     cat /etc/*release
143     lscpu
144     free -h
145     rpm -qa|grep mock
146     mock --debug-config
147     docker version
148     set +x
149
150     echo_step_end
151 }
152
153
154 #########################################################################
155 # Main process
156 #########################################################################
157
158 prepare_workspace
159 if [ "$CI" = "true" ]; then
160     get_debug_info
161 fi
162
163 msg_step="Yocto builds"
164 echo_step_start
165
166 RUN_CMD="${SCRIPT_YP} -w ${WORKSPACE_YP} ${DRYRUN} ${YP_ARGS}"
167 run_cmd "Start Yocto builds"
168
169 echo_step_end
170
171 # dry-run is not supported yet for CentOS build
172 if [ -z "${DRYRUN}" ]; then
173     msg_step="CentOS builds"
174     echo_step_start
175
176     if [ "$CI" = "true" ]; then
177         RUN_CMD="${SCRIPT_CENTOS_PRE} -w ${WORKSPACE_CENTOS}"
178         run_cmd "Prepare for CentOS builds"
179     fi
180     RUN_CMD="${SCRIPT_CENTOS} -w ${WORKSPACE_CENTOS} ${DRYRUN}"
181     run_cmd "Start CentOS builds"
182
183     echo_step_end
184 fi