build_inf_debian.sh: add parallel option
[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 YOCTO_ONLY="No"
86 CENTOS_ONLY="Yes"
87 DEBIAN_ONLY="No"
88
89 while getopts "w:ycdnh" OPTION; do
90     case ${OPTION} in
91         w)
92             WORKSPACE=`readlink -f ${OPTARG}`
93             ;;
94         n)
95             DRYRUN="-n"
96             YP_ARGS=""
97             ;;
98         y)
99             YOCTO_ONLY="Yes"
100             ;;
101         c)
102             CENTOS_ONLY="Yes"
103             ;;
104         d)
105             DEBIAN_ONLY="Yes"
106             ;;
107         h)
108             help_info
109             exit
110             ;;
111     esac
112 done
113
114 if [ -z ${WORKSPACE} ]; then
115     echo_info "No workspace specified, a directory 'workspace' will be created in current directory as the workspace"
116     WORKSPACE=`readlink -f workspace`
117 fi
118
119 #########################################################################
120 # Functions for each step
121 #########################################################################
122 WORKSPACE_YP=${WORKSPACE}/workspace_yocto
123 WORKSPACE_CENTOS=${WORKSPACE}/workspace_centos
124 WORKSPACE_DEB=${WORKSPACE}/workspace_debian
125 SCRIPT_YP=${SCRIPTS_DIR}/build_inf_yocto/build_inf_yocto.sh
126 SCRIPT_CENTOS=${SCRIPTS_DIR}/build_inf_centos/build_inf_centos.sh
127 SCRIPT_CENTOS_PRE=${SCRIPTS_DIR}/build_inf_centos/build_inf_prepare_jenkins.sh
128 SCRIPT_DEB=${SCRIPTS_DIR}/build_inf_debian/build_inf_debian.sh
129 SCRIPT_DEB_PRE=${SCRIPTS_DIR}/build_inf_debian/build_inf_prepare_jenkins.sh
130
131 prepare_workspace () {
132     msg_step="Create workspace for the multi-os builds"
133     echo_step_start
134
135     mkdir -p ${WORKSPACE_YP} ${WORKSPACE_CENTOS} ${WORKSPACE_DEB}
136
137     echo_info "The following directories are created in your workspace(${WORKSPACE}):"
138     echo_info "For Yocto buid: ${WORKSPACE_YP}"
139     echo_info "For CentOS buid: ${WORKSPACE_CENTOS}"
140     echo_info "For Debian buid: ${WORKSPACE_DEB}"
141
142     echo_step_end
143 }
144
145 # debug for CI Jenkins build
146 get_debug_info () {
147     msg_step="Get debug info for CI Jenkins build"
148     echo_step_start
149
150     echo_info "=== Get env ==="
151     env
152     echo_info "==============="
153
154     set -x
155     df -h
156     groups
157     uname -a
158     cat /etc/*release
159     lscpu
160     free -h
161     rpm -qa|grep mock
162     mock --debug-config
163     docker version
164     set +x
165
166     echo_step_end
167 }
168
169 build_yocto () {
170     msg_step="Yocto builds"
171     echo_step_start
172
173     RUN_CMD="${SCRIPT_YP} -w ${WORKSPACE_YP} ${DRYRUN} ${YP_ARGS}"
174     run_cmd "Start Yocto builds"
175
176     echo_step_end
177 }
178
179 build_centos () {
180     # dry-run is not supported yet for CentOS build
181     if [ -z "${DRYRUN}" ]; then
182         msg_step="CentOS builds"
183         echo_step_start
184
185         if [ "$CI" = "true" ]; then
186             RUN_CMD="${SCRIPT_CENTOS_PRE} -w ${WORKSPACE_CENTOS}"
187             run_cmd "Prepare for CentOS builds"
188         fi
189         RUN_CMD="${SCRIPT_CENTOS} -w ${WORKSPACE_CENTOS} -m ${DRYRUN}"
190         run_cmd "Start CentOS builds"
191
192         echo_step_end
193     fi
194 }
195
196 build_debian () {
197     if [ -z "${DRYRUN}" ]; then
198         msg_step="Debian builds"
199         echo_step_start
200
201         if [ "$CI" = "true" ]; then
202             RUN_CMD="${SCRIPT_DEB_PRE} -w ${WORKSPACE_DEB}"
203             run_cmd "Prepare for Debian builds"
204         fi
205
206         RUN_CMD="${SCRIPT_DEB} -w ${WORKSPACE_DEB} -m ${DRYRUN}"
207         run_cmd "Start Debian builds"
208
209         echo_step_end
210     fi
211 }
212
213
214 #########################################################################
215 # Main process
216 #########################################################################
217
218 prepare_workspace
219 if [ "$CI" = "true" ]; then
220     get_debug_info
221 fi
222
223 if [ "${YOCTO_ONLY}" == "Yes" ]; then
224     build_yocto
225 elif [ "${CENTOS_ONLY}" == "Yes" ]; then
226     build_centos
227 elif [ "${DEBIAN_ONLY}" == "Yes" ]; then
228     build_debian
229 else
230     build_centos
231     build_yocto
232     build_debian
233 fi