1variables: 2 windows_vm: windows-2019 3 ubuntu_vm: ubuntu-18.04 4 macos_vm: macOS-10.15 5 ci_runner_image: trini/u-boot-gitlab-ci-runner:focal-20220113-03Feb2022 6 # Add '-u 0' options for Azure pipelines, otherwise we get "permission 7 # denied" error when it tries to "useradd -m -u 1001 vsts_azpcontainer", 8 # since our $(ci_runner_image) user is not root. 9 container_option: -u 0 10 work_dir: /u 11 12stages: 13- stage: testsuites 14 jobs: 15 - job: tools_only_windows 16 displayName: 'Ensure host tools build for Windows' 17 pool: 18 vmImage: $(windows_vm) 19 steps: 20 - powershell: | 21 (New-Object Net.WebClient).DownloadFile("https://github.com/msys2/msys2-installer/releases/download/2021-06-04/msys2-base-x86_64-20210604.sfx.exe", "sfx.exe") 22 displayName: 'Install MSYS2' 23 - script: | 24 sfx.exe -y -o%CD:~0,2%\ 25 %CD:~0,2%\msys64\usr\bin\bash -lc "pacman --noconfirm -Syyuu" 26 %CD:~0,2%\msys64\usr\bin\bash -lc "pacman --noconfirm -Su" 27 displayName: 'Update MSYS2' 28 - script: | 29 %CD:~0,2%\msys64\usr\bin\bash -lc "pacman --noconfirm --needed -Sy make gcc bison flex diffutils openssl-devel libgnutls-devel libutil-linux-devel" 30 displayName: 'Install Toolchain' 31 - script: | 32 echo make tools-only_defconfig tools-only NO_SDL=1 > build-tools.sh 33 %CD:~0,2%\msys64\usr\bin\bash -lc "bash build-tools.sh" 34 displayName: 'Build Host Tools' 35 env: 36 # Tell MSYS2 we need a POSIX emulation layer 37 MSYSTEM: MSYS 38 # Tell MSYS2 not to ‘cd’ our startup directory to HOME 39 CHERE_INVOKING: yes 40 41 - job: tools_only_macOS 42 displayName: 'Ensure host tools build for macOS X' 43 pool: 44 vmImage: $(macos_vm) 45 steps: 46 - script: brew install make ossp-uuid 47 displayName: Brew install dependencies 48 - script: | 49 gmake tools-only_config tools-only NO_SDL=1 \ 50 HOSTCFLAGS="-I/usr/local/opt/openssl@1.1/include" \ 51 HOSTLDFLAGS="-L/usr/local/opt/openssl@1.1/lib" \ 52 -j$(sysctl -n hw.logicalcpu) 53 displayName: 'Perform tools-only build' 54 55 - job: check_for_migrated_symbols_in_board_header 56 displayName: 'Check for migrated symbols in board header' 57 pool: 58 vmImage: $(ubuntu_vm) 59 container: 60 image: $(ci_runner_image) 61 options: $(container_option) 62 steps: 63 - script: | 64 KSYMLST=`mktemp` 65 KUSEDLST=`mktemp` 66 cat `find . -name "Kconfig*"` | \ 67 sed -n -e 's/^\s*config *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \ 68 -e 's/^\s*menuconfig *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p' \ 69 | sort -u > $KSYMLST 70 for CFG in `find include/configs -name "*.h"`; do 71 grep '#define[[:blank:]]CONFIG_' $CFG | \ 72 sed -n 's/#define.\(CONFIG_[A-Za-z0-9_]*\).*/\1/p' | \ 73 sort -u > ${KUSEDLST} || true 74 NUM=`comm -12 --total --output-delimiter=, ${KSYMLST} ${KUSEDLST} | \ 75 cut -d , -f 3` 76 if [[ $NUM -ne 0 ]]; then 77 echo "Unmigrated symbols found in $CFG" 78 exit 1 79 fi 80 done 81 82 - job: cppcheck 83 displayName: 'Static code analysis with cppcheck' 84 pool: 85 vmImage: $(ubuntu_vm) 86 container: 87 image: $(ci_runner_image) 88 options: $(container_option) 89 steps: 90 - script: cppcheck -j$(nproc) --force --quiet --inline-suppr . 91 92 - job: htmldocs 93 displayName: 'Build HTML documentation' 94 pool: 95 vmImage: $(ubuntu_vm) 96 container: 97 image: $(ci_runner_image) 98 options: $(container_option) 99 steps: 100 - script: | 101 virtualenv -p /usr/bin/python3 /tmp/venvhtml 102 . /tmp/venvhtml/bin/activate 103 pip install -r doc/sphinx/requirements.txt 104 make htmldocs 105 106 - job: todo 107 displayName: 'Search for TODO within source tree' 108 pool: 109 vmImage: $(ubuntu_vm) 110 container: 111 image: $(ci_runner_image) 112 options: $(container_option) 113 steps: 114 - script: grep -r TODO . 115 - script: grep -r FIXME . 116 - script: grep -r HACK . | grep -v HACKKIT 117 118 - job: sloccount 119 displayName: 'Some statistics about the code base' 120 pool: 121 vmImage: $(ubuntu_vm) 122 container: 123 image: $(ci_runner_image) 124 options: $(container_option) 125 steps: 126 - script: sloccount . 127 128 - job: maintainers 129 displayName: 'Ensure all configs have MAINTAINERS entries' 130 pool: 131 vmImage: $(ubuntu_vm) 132 container: 133 image: $(ci_runner_image) 134 options: $(container_option) 135 steps: 136 - script: | 137 if [ `./tools/genboardscfg.py -f 2>&1 | wc -l` -ne 0 ]; then exit 1; fi 138 139 - job: tools_only 140 displayName: 'Ensure host tools build' 141 pool: 142 vmImage: $(ubuntu_vm) 143 container: 144 image: $(ci_runner_image) 145 options: $(container_option) 146 steps: 147 - script: | 148 make tools-only_config tools-only -j$(nproc) 149 150 - job: envtools 151 displayName: 'Ensure env tools build' 152 pool: 153 vmImage: $(ubuntu_vm) 154 container: 155 image: $(ci_runner_image) 156 options: $(container_option) 157 steps: 158 - script: | 159 make tools-only_config envtools -j$(nproc) 160 161 - job: utils 162 displayName: 'Run binman, buildman, dtoc, Kconfig and patman testsuites' 163 pool: 164 vmImage: $(ubuntu_vm) 165 steps: 166 - script: | 167 cat << EOF > build.sh 168 set -ex 169 cd ${WORK_DIR} 170 EOF 171 cat << "EOF" >> build.sh 172 git config --global user.name "Azure Pipelines" 173 git config --global user.email bmeng.cn@gmail.com 174 export USER=azure 175 virtualenv -p /usr/bin/python3 /tmp/venv 176 . /tmp/venv/bin/activate 177 pip install -r test/py/requirements.txt 178 export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl 179 export PYTHONPATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt 180 export PATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH} 181 ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board sandbox_spl 182 ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test 183 ./tools/buildman/buildman -t 184 ./tools/dtoc/dtoc -t 185 ./tools/patman/patman test 186 make O=${UBOOT_TRAVIS_BUILD_DIR} testconfig 187 EOF 188 cat build.sh 189 # We cannot use "container" like other jobs above, as buildman 190 # seems to hang forever with pre-configured "container" environment 191 docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/build.sh 192 193 - job: nokia_rx51_test 194 displayName: 'Run tests for Nokia RX-51 (aka N900)' 195 pool: 196 vmImage: $(ubuntu_vm) 197 container: 198 image: $(ci_runner_image) 199 options: $(container_option) 200 steps: 201 - script: | 202 export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH 203 test/nokia_rx51_test.sh 204 205- stage: test_py 206 jobs: 207 - job: test_py 208 displayName: 'test.py' 209 pool: 210 vmImage: $(ubuntu_vm) 211 strategy: 212 matrix: 213 sandbox: 214 TEST_PY_BD: "sandbox" 215 sandbox_clang: 216 TEST_PY_BD: "sandbox" 217 OVERRIDE: "-O clang-13" 218 sandbox_spl: 219 TEST_PY_BD: "sandbox_spl" 220 TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl" 221 sandbox_noinst: 222 TEST_PY_BD: "sandbox_noinst" 223 TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl" 224 sandbox_flattree: 225 TEST_PY_BD: "sandbox_flattree" 226 coreboot: 227 TEST_PY_BD: "coreboot" 228 TEST_PY_ID: "--id qemu" 229 TEST_PY_TEST_SPEC: "not sleep" 230 evb_ast2500: 231 TEST_PY_BD: "evb-ast2500" 232 TEST_PY_ID: "--id qemu" 233 vexpress_ca9x4: 234 TEST_PY_BD: "vexpress_ca9x4" 235 TEST_PY_ID: "--id qemu" 236 integratorcp_cm926ejs: 237 TEST_PY_BD: "integratorcp_cm926ejs" 238 TEST_PY_ID: "--id qemu" 239 TEST_PY_TEST_SPEC: "not sleep" 240 qemu_arm: 241 TEST_PY_BD: "qemu_arm" 242 TEST_PY_TEST_SPEC: "not sleep" 243 qemu_arm64: 244 TEST_PY_BD: "qemu_arm64" 245 TEST_PY_TEST_SPEC: "not sleep" 246 qemu_malta: 247 TEST_PY_BD: "malta" 248 TEST_PY_ID: "--id qemu" 249 TEST_PY_TEST_SPEC: "not sleep and not efi" 250 qemu_maltael: 251 TEST_PY_BD: "maltael" 252 TEST_PY_ID: "--id qemu" 253 TEST_PY_TEST_SPEC: "not sleep and not efi" 254 qemu_malta64: 255 TEST_PY_BD: "malta64" 256 TEST_PY_ID: "--id qemu" 257 TEST_PY_TEST_SPEC: "not sleep and not efi" 258 qemu_malta64el: 259 TEST_PY_BD: "malta64el" 260 TEST_PY_ID: "--id qemu" 261 TEST_PY_TEST_SPEC: "not sleep and not efi" 262 qemu_ppce500: 263 TEST_PY_BD: "qemu-ppce500" 264 TEST_PY_TEST_SPEC: "not sleep" 265 qemu_riscv32: 266 TEST_PY_BD: "qemu-riscv32" 267 TEST_PY_TEST_SPEC: "not sleep" 268 qemu_riscv64: 269 TEST_PY_BD: "qemu-riscv64" 270 TEST_PY_TEST_SPEC: "not sleep" 271 qemu_riscv32_spl: 272 TEST_PY_BD: "qemu-riscv32_spl" 273 TEST_PY_TEST_SPEC: "not sleep" 274 qemu_riscv64_spl: 275 TEST_PY_BD: "qemu-riscv64_spl" 276 TEST_PY_TEST_SPEC: "not sleep" 277 qemu_x86: 278 TEST_PY_BD: "qemu-x86" 279 TEST_PY_TEST_SPEC: "not sleep" 280 qemu_x86_64: 281 TEST_PY_BD: "qemu-x86_64" 282 TEST_PY_TEST_SPEC: "not sleep" 283 r2dplus_i82557c: 284 TEST_PY_BD: "r2dplus" 285 TEST_PY_ID: "--id i82557c_qemu" 286 r2dplus_pcnet: 287 TEST_PY_BD: "r2dplus" 288 TEST_PY_ID: "--id pcnet_qemu" 289 r2dplus_rtl8139: 290 TEST_PY_BD: "r2dplus" 291 TEST_PY_ID: "--id rtl8139_qemu" 292 r2dplus_tulip: 293 TEST_PY_BD: "r2dplus" 294 TEST_PY_ID: "--id tulip_qemu" 295 sifive_unleashed_sdcard: 296 TEST_PY_BD: "sifive_unleashed" 297 TEST_PY_ID: "--id sdcard_qemu" 298 sifive_unleashed_spi-nor: 299 TEST_PY_BD: "sifive_unleashed" 300 TEST_PY_ID: "--id spi-nor_qemu" 301 xilinx_zynq_virt: 302 TEST_PY_BD: "xilinx_zynq_virt" 303 TEST_PY_ID: "--id qemu" 304 TEST_PY_TEST_SPEC: "not sleep" 305 xilinx_versal_virt: 306 TEST_PY_BD: "xilinx_versal_virt" 307 TEST_PY_ID: "--id qemu" 308 TEST_PY_TEST_SPEC: "not sleep" 309 xtfpga: 310 TEST_PY_BD: "xtfpga" 311 TEST_PY_ID: "--id qemu" 312 TEST_PY_TEST_SPEC: "not sleep" 313 steps: 314 - script: | 315 cat << EOF > test.sh 316 set -ex 317 # make environment variables available as tests are running inside a container 318 export WORK_DIR="${WORK_DIR}" 319 export TEST_PY_BD="${TEST_PY_BD}" 320 export TEST_PY_ID="${TEST_PY_ID}" 321 export TEST_PY_TEST_SPEC="${TEST_PY_TEST_SPEC}" 322 export OVERRIDE="${OVERRIDE}" 323 EOF 324 cat << "EOF" >> test.sh 325 # the below corresponds to .gitlab-ci.yml "before_script" 326 cd ${WORK_DIR} 327 git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks 328 ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname` 329 ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname` 330 grub-mkimage --prefix=\"\" -o ~/grub_x86.efi -O i386-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 331 grub-mkimage --prefix=\"\" -o ~/grub_x64.efi -O x86_64-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 332 if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then 333 wget -O - https://github.com/riscv/opensbi/releases/download/v0.9/opensbi-0.9-rv-bin.tar.xz | tar -C /tmp -xJ; 334 export OPENSBI=/tmp/opensbi-0.9-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin; 335 fi 336 if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]] || [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then 337 wget -O - https://github.com/riscv/opensbi/releases/download/v0.9/opensbi-0.9-rv-bin.tar.xz | tar -C /tmp -xJ; 338 export OPENSBI=/tmp/opensbi-0.9-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin; 339 fi 340 # the below corresponds to .gitlab-ci.yml "script" 341 cd ${WORK_DIR} 342 export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD}; 343 tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e --board ${TEST_PY_BD} ${OVERRIDE} 344 cp ~/grub_x86.efi ${UBOOT_TRAVIS_BUILD_DIR}/ 345 cp ~/grub_x64.efi ${UBOOT_TRAVIS_BUILD_DIR}/ 346 cp /opt/grub/grubriscv64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_riscv64.efi 347 cp /opt/grub/grubaa64.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm64.efi 348 cp /opt/grub/grubarm.efi ${UBOOT_TRAVIS_BUILD_DIR}/grub_arm.efi 349 # create sdcard / spi-nor images for sifive unleashed using genimage 350 if [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then 351 mkdir -p root; 352 cp ${UBOOT_TRAVIS_BUILD_DIR}/spl/u-boot-spl.bin .; 353 cp ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.itb .; 354 rm -rf tmp; 355 genimage --inputpath . --config board/sifive/unleashed/genimage_sdcard.cfg; 356 cp images/sdcard.img ${UBOOT_TRAVIS_BUILD_DIR}/; 357 rm -rf tmp; 358 genimage --inputpath . --config board/sifive/unleashed/genimage_spi-nor.cfg; 359 cp images/spi-nor.img ${UBOOT_TRAVIS_BUILD_DIR}/; 360 fi 361 if [[ "${TEST_PY_BD}" == "coreboot" ]]; then 362 wget -O - "https://drive.google.com/uc?id=1x6nrtWIyIRPLS2cQBwYTnT2TbOI8UjmM&export=download" |xz -dc >${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom; 363 wget -O - "https://drive.google.com/uc?id=149Cz-5SZXHNKpi9xg6R_5XITWohu348y&export=download" >cbfstool; 364 chmod a+x cbfstool; 365 ./cbfstool ${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom add-flat-binary -f ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.bin -n fallback/payload -c LZMA -l 0x1110000 -e 0x1110000; 366 fi 367 virtualenv -p /usr/bin/python3 /tmp/venv 368 . /tmp/venv/bin/activate 369 pip install -r test/py/requirements.txt 370 export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH}; 371 export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci; 372 # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not 373 ./test/py/test.py -ra --bd ${TEST_PY_BD} ${TEST_PY_ID} ${TEST_PY_TEST_SPEC:+"-k ${TEST_PY_TEST_SPEC}"} --build-dir "$UBOOT_TRAVIS_BUILD_DIR"; 374 # the below corresponds to .gitlab-ci.yml "after_script" 375 rm -rf /tmp/uboot-test-hooks /tmp/venv 376 EOF 377 cat test.sh 378 # make current directory writeable to uboot user inside the container 379 # as sandbox testing need create files like spi flash images, etc. 380 # (TODO: clean up this in the future) 381 chmod 777 . 382 # Filesystem tests need extra docker args to run 383 set -- 384 if [[ "${TEST_PY_BD}" == "sandbox" ]]; then 385 # mount -o loop needs the loop devices 386 if modprobe loop; then 387 for d in $(find /dev -maxdepth 1 -name 'loop*'); do 388 set -- "$@" --device $d:$d 389 done 390 fi 391 # Needed for mount syscall (for guestmount as well) 392 set -- "$@" --cap-add SYS_ADMIN 393 # Default apparmor profile denies mounts 394 set -- "$@" --security-opt apparmor=unconfined 395 fi 396 # Some tests using libguestfs-tools need the fuse device to run 397 docker run "$@" --device /dev/fuse:/dev/fuse -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/test.sh 398 399- stage: world_build 400 jobs: 401 - job: build_the_world 402 displayName: 'Build the World' 403 pool: 404 vmImage: $(ubuntu_vm) 405 strategy: 406 # Use almost the same target division in .travis.yml, only merged 407 # 4 small build jobs (arc/microblaze/nds32/xtensa) into one. 408 matrix: 409 arc_microblaze_nds32_xtensa: 410 BUILDMAN: "arc microblaze nds32 xtensa" 411 arm11_arm7_arm920t_arm946es: 412 BUILDMAN: "arm11 arm7 arm920t arm946es" 413 arm926ejs: 414 BUILDMAN: "arm926ejs -x freescale,siemens,at91,kirkwood,omap" 415 at91_non_armv7: 416 BUILDMAN: "at91 -x armv7" 417 at91_non_arm926ejs: 418 BUILDMAN: "at91 -x arm926ejs" 419 boundary_engicam_toradex: 420 BUILDMAN: "boundary engicam toradex" 421 arm_bcm: 422 BUILDMAN: "bcm -x mips" 423 nxp_arm32: 424 BUILDMAN: "freescale -x powerpc,m68k,aarch64,ls101,ls102,ls104,ls108,ls20,lx216" 425 nxp_ls101x: 426 BUILDMAN: "freescale&ls101" 427 nxp_ls102x: 428 BUILDMAN: "freescale&ls102" 429 nxp_ls104x: 430 BUILDMAN: "freescale&ls104" 431 nxp_ls108x: 432 BUILDMAN: "freescale&ls108" 433 nxp_ls20xx: 434 BUILDMAN: "freescale&ls20" 435 nxp_lx216x: 436 BUILDMAN: "freescale&lx216" 437 imx6: 438 BUILDMAN: "mx6 -x boundary,engicam,freescale,technexion,toradex" 439 imx: 440 BUILDMAN: "mx -x mx6,freescale,technexion,toradex" 441 imx8: 442 BUILDMAN: "imx8" 443 keystone2_keystone3: 444 BUILDMAN: "k2 k3" 445 samsung_socfpga: 446 BUILDMAN: "samsung socfpga" 447 sun4i: 448 BUILDMAN: "sun4i" 449 sun5i: 450 BUILDMAN: "sun5i" 451 sun6i: 452 BUILDMAN: "sun6i" 453 sun7i: 454 BUILDMAN: "sun7i" 455 sun8i_32bit: 456 BUILDMAN: "sun8i&armv7" 457 sun8i_64bit: 458 BUILDMAN: "sun8i&aarch64" 459 sun9i: 460 BUILDMAN: "sun9i" 461 sun50i: 462 BUILDMAN: "sun50i" 463 arm_catch_all: 464 BUILDMAN: "arm -x arm11,arm7,arm9,aarch64,at91,bcm,freescale,kirkwood,mvebu,renesas,siemens,tegra,uniphier,mx,samsung,sunxi,am33xx,omap,rk,toradex,socfpga,k2,k3,zynq" 465 sandbox_x86: 466 BUILDMAN: "sandbox x86" 467 technexion: 468 BUILDMAN: "technexion" 469 kirkwood: 470 BUILDMAN: "kirkwood" 471 mvebu: 472 BUILDMAN: "mvebu" 473 m68k: 474 BUILDMAN: "m68k" 475 mips: 476 BUILDMAN: "mips" 477 non_fsl_ppc: 478 BUILDMAN: "powerpc -x freescale" 479 mpc85xx_freescale: 480 BUILDMAN: "mpc85xx&freescale -x t208xrdb -x t102* -x p1_p2_rdb_pc -x p1010rdb -x corenet_ds -x bsc91*" 481 t208xrdb_corenet_ds: 482 BUILDMAN: "t208xrdb corenet_ds" 483 fsl_ppc: 484 BUILDMAN: "mpc83xx&freescale" 485 t102x: 486 BUILDMAN: "t102*" 487 p1_p2_rdb_pc: 488 BUILDMAN: "p1_p2_rdb_pc" 489 p1010rdb_bsc91: 490 BUILDMAN: "p1010rdb bsc91" 491 siemens: 492 BUILDMAN: "siemens" 493 tegra: 494 BUILDMAN: "tegra -x toradex" 495 am33xx_no_siemens: 496 BUILDMAN: "am33xx -x siemens" 497 omap: 498 BUILDMAN: "omap" 499 uniphier: 500 BUILDMAN: "uniphier" 501 aarch64_catch_all: 502 BUILDMAN: "aarch64 -x bcm,imx8,k3,tegra,ls1,ls2,lx216,mvebu,uniphier,renesas,sunxi,samsung,socfpga,rk,versal,zynq" 503 rockchip: 504 BUILDMAN: "rk" 505 renesas: 506 BUILDMAN: "renesas" 507 zynq: 508 BUILDMAN: "zynq&armv7" 509 zynqmp_versal: 510 BUILDMAN: "versal|zynqmp&aarch64" 511 riscv: 512 BUILDMAN: "riscv" 513 steps: 514 - script: | 515 cat << EOF > build.sh 516 set -ex 517 cd ${WORK_DIR} 518 # make environment variables available as tests are running inside a container 519 export BUILDMAN="${BUILDMAN}" 520 EOF 521 cat << "EOF" >> build.sh 522 if [[ "${BUILDMAN}" != "" ]]; then 523 ret=0; 524 tools/buildman/buildman -o /tmp -P -E -W ${BUILDMAN} ${OVERRIDE} || ret=$?; 525 if [[ $ret -ne 0 ]]; then 526 tools/buildman/buildman -o /tmp -seP ${BUILDMAN}; 527 exit $ret; 528 fi; 529 fi 530 EOF 531 cat build.sh 532 docker run -v $PWD:$(work_dir) $(ci_runner_image) /bin/bash $(work_dir)/build.sh 533