1# SPDX-License-Identifier: GPL-2.0+ 2 3# Grab our configured image. The source for this is found at: 4# https://source.denx.de/u-boot/gitlab-ci-runner 5image: trini/u-boot-gitlab-ci-runner:bionic-20200807-02Sep2020 6 7# We run some tests in different order, to catch some failures quicker. 8stages: 9 - testsuites 10 - test.py 11 - world build 12 13.buildman_and_testpy_template: &buildman_and_testpy_dfn 14 tags: [ 'all' ] 15 stage: test.py 16 before_script: 17 # Clone uboot-test-hooks 18 - git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks 19 - ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname` 20 - ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname` 21 - grub-mkimage --prefix="" -o ~/grub_x86.efi -O i386-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 22 - grub-mkimage --prefix="" -o ~/grub_x64.efi -O x86_64-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 23 - if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then 24 wget -O - https://github.com/riscv/opensbi/releases/download/v0.8/opensbi-0.8-rv-bin.tar.xz | tar -C /tmp -xJ; 25 export OPENSBI=/tmp/opensbi-0.8-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin; 26 fi 27 - if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]]; then 28 wget -O - https://github.com/riscv/opensbi/releases/download/v0.8/opensbi-0.8-rv-bin.tar.xz | tar -C /tmp -xJ; 29 export OPENSBI=/tmp/opensbi-0.8-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin; 30 fi 31 32 after_script: 33 - rm -rf /tmp/uboot-test-hooks /tmp/venv 34 script: 35 # If we've been asked to use clang only do one configuration. 36 - export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD} 37 - tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e 38 --board ${TEST_PY_BD} ${OVERRIDE} 39 - cp ~/grub_x86.efi $UBOOT_TRAVIS_BUILD_DIR/ 40 - cp ~/grub_x64.efi $UBOOT_TRAVIS_BUILD_DIR/ 41 - cp /opt/grub/grubriscv64.efi $UBOOT_TRAVIS_BUILD_DIR/grub_riscv64.efi 42 - cp /opt/grub/grubriscv32.efi $UBOOT_TRAVIS_BUILD_DIR/grub_riscv32.efi 43 - cp /opt/grub/grubaa64.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm64.efi 44 - cp /opt/grub/grubarm.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm.efi 45 - virtualenv -p /usr/bin/python3 /tmp/venv 46 - . /tmp/venv/bin/activate 47 - pip install -r test/py/requirements.txt 48 # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not 49 - export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH}; 50 export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci; 51 ./test/py/test.py -ra --bd ${TEST_PY_BD} ${TEST_PY_ID} 52 ${TEST_PY_TEST_SPEC:+"-k ${TEST_PY_TEST_SPEC}"} 53 --build-dir "$UBOOT_TRAVIS_BUILD_DIR" 54 55build all 32bit ARM platforms: 56 tags: [ 'all' ] 57 stage: world build 58 script: 59 - ret=0; 60 ./tools/buildman/buildman -o /tmp -P -E -W arm -x aarch64 || ret=$?; 61 if [[ $ret -ne 0 ]]; then 62 ./tools/buildman/buildman -o /tmp -seP; 63 exit $ret; 64 fi; 65 66build all 64bit ARM platforms: 67 tags: [ 'all' ] 68 stage: world build 69 script: 70 - virtualenv -p /usr/bin/python3 /tmp/venv 71 - . /tmp/venv/bin/activate 72 - pip install pyelftools 73 - ret=0; 74 ./tools/buildman/buildman -o /tmp -P -E -W aarch64 || ret=$?; 75 if [[ $ret -ne 0 ]]; then 76 ./tools/buildman/buildman -o /tmp -seP; 77 exit $ret; 78 fi; 79 80build all PowerPC platforms: 81 tags: [ 'all' ] 82 stage: world build 83 script: 84 - ret=0; 85 ./tools/buildman/buildman -o /tmp -P -E -W powerpc || ret=$?; 86 if [[ $ret -ne 0 ]]; then 87 ./tools/buildman/buildman -o /tmp -seP; 88 exit $ret; 89 fi; 90 91build all other platforms: 92 tags: [ 'all' ] 93 stage: world build 94 script: 95 - ret=0; 96 ./tools/buildman/buildman -o /tmp -P -E -W -x arm,powerpc || ret=$?; 97 if [[ $ret -ne 0 ]]; then 98 ./tools/buildman/buildman -o /tmp -seP; 99 exit $ret; 100 fi; 101 102# QA jobs for code analytics 103# static code analysis with cppcheck (we can add --enable=all later) 104cppcheck: 105 tags: [ 'all' ] 106 stage: testsuites 107 script: 108 - cppcheck -j$(nproc) --force --quiet --inline-suppr . 109 110# search for TODO within source tree 111grep TODO/FIXME/HACK: 112 tags: [ 'all' ] 113 stage: testsuites 114 script: 115 - grep -r TODO . 116 - grep -r FIXME . 117 # search for HACK within source tree and ignore HACKKIT board 118 - grep -r HACK . | grep -v HACKKIT 119 120# build HTML documentation 121htmldocs: 122 tags: [ 'all' ] 123 stage: testsuites 124 script: 125 - virtualenv -p /usr/bin/python3 /tmp/venvhtml 126 - . /tmp/venvhtml/bin/activate 127 - pip install -r doc/sphinx/requirements.txt 128 - make htmldocs 129 130# some statistics about the code base 131sloccount: 132 tags: [ 'all' ] 133 stage: testsuites 134 script: 135 - sloccount . 136 137# ensure all configs have MAINTAINERS entries 138Check for configs without MAINTAINERS entry: 139 tags: [ 'all' ] 140 stage: testsuites 141 script: 142 - if [ `./tools/genboardscfg.py -f 2>&1 | wc -l` -ne 0 ]; then exit 1; fi 143 144# Ensure host tools build 145Build tools-only: 146 tags: [ 'all' ] 147 stage: testsuites 148 script: 149 - make tools-only_config tools-only -j$(nproc) 150 151# Ensure env tools build 152Build envtools: 153 tags: [ 'all' ] 154 stage: testsuites 155 script: 156 - make tools-only_config envtools -j$(nproc) 157 158Run binman, buildman, dtoc, Kconfig and patman testsuites: 159 tags: [ 'all' ] 160 stage: testsuites 161 script: 162 - git config --global user.name "GitLab CI Runner"; 163 git config --global user.email trini@konsulko.com; 164 export USER=gitlab; 165 virtualenv -p /usr/bin/python3 /tmp/venv; 166 . /tmp/venv/bin/activate; 167 pip install pyelftools pytest pygit2; 168 export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl; 169 export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"; 170 export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"; 171 ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w sandbox_spl; 172 ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test; 173 ./tools/buildman/buildman -t; 174 ./tools/dtoc/dtoc -t; 175 ./tools/patman/patman test; 176 make testconfig 177 178Run tests for Nokia RX-51 (aka N900): 179 tags: [ 'all' ] 180 stage: testsuites 181 script: 182 - ./tools/buildman/buildman --fetch-arch arm; 183 export PATH=~/.buildman-toolchains/gcc-9.2.0-nolibc/arm-linux-gnueabi/bin/:$PATH; 184 test/nokia_rx51_test.sh 185 186# Test sandbox with test.py 187sandbox test.py: 188 tags: [ 'all' ] 189 variables: 190 TEST_PY_BD: "sandbox" 191 <<: *buildman_and_testpy_dfn 192 193sandbox with clang test.py: 194 tags: [ 'all' ] 195 variables: 196 TEST_PY_BD: "sandbox" 197 OVERRIDE: "-O clang-10" 198 <<: *buildman_and_testpy_dfn 199 200sandbox_spl test.py: 201 tags: [ 'all' ] 202 variables: 203 TEST_PY_BD: "sandbox_spl" 204 TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl" 205 <<: *buildman_and_testpy_dfn 206 207evb-ast2500 test.py: 208 tags: [ 'all' ] 209 variables: 210 TEST_PY_BD: "evb-ast2500" 211 TEST_PY_ID: "--id qemu" 212 <<: *buildman_and_testpy_dfn 213 214sandbox_flattree test.py: 215 tags: [ 'all' ] 216 variables: 217 TEST_PY_BD: "sandbox_flattree" 218 <<: *buildman_and_testpy_dfn 219 220vexpress_ca15_tc2 test.py: 221 tags: [ 'all' ] 222 variables: 223 TEST_PY_BD: "vexpress_ca15_tc2" 224 TEST_PY_ID: "--id qemu" 225 <<: *buildman_and_testpy_dfn 226 227vexpress_ca9x4 test.py: 228 tags: [ 'all' ] 229 variables: 230 TEST_PY_BD: "vexpress_ca9x4" 231 TEST_PY_ID: "--id qemu" 232 <<: *buildman_and_testpy_dfn 233 234integratorcp_cm926ejs test.py: 235 tags: [ 'all' ] 236 variables: 237 TEST_PY_BD: "integratorcp_cm926ejs" 238 TEST_PY_TEST_SPEC: "not sleep" 239 TEST_PY_ID: "--id qemu" 240 <<: *buildman_and_testpy_dfn 241 242qemu_arm test.py: 243 tags: [ 'all' ] 244 variables: 245 TEST_PY_BD: "qemu_arm" 246 TEST_PY_TEST_SPEC: "not sleep" 247 <<: *buildman_and_testpy_dfn 248 249qemu_arm64 test.py: 250 tags: [ 'all' ] 251 variables: 252 TEST_PY_BD: "qemu_arm64" 253 TEST_PY_TEST_SPEC: "not sleep" 254 <<: *buildman_and_testpy_dfn 255 256qemu_mips test.py: 257 tags: [ 'all' ] 258 variables: 259 TEST_PY_BD: "qemu_mips" 260 TEST_PY_TEST_SPEC: "not sleep" 261 <<: *buildman_and_testpy_dfn 262 263qemu_mipsel test.py: 264 tags: [ 'all' ] 265 variables: 266 TEST_PY_BD: "qemu_mipsel" 267 TEST_PY_TEST_SPEC: "not sleep" 268 <<: *buildman_and_testpy_dfn 269 270qemu_mips64 test.py: 271 tags: [ 'all' ] 272 variables: 273 TEST_PY_BD: "qemu_mips64" 274 TEST_PY_TEST_SPEC: "not sleep" 275 <<: *buildman_and_testpy_dfn 276 277qemu_mips64el test.py: 278 tags: [ 'all' ] 279 variables: 280 TEST_PY_BD: "qemu_mips64el" 281 TEST_PY_TEST_SPEC: "not sleep" 282 <<: *buildman_and_testpy_dfn 283 284qemu_malta test.py: 285 tags: [ 'all' ] 286 variables: 287 TEST_PY_BD: "malta" 288 TEST_PY_TEST_SPEC: "not sleep and not efi" 289 TEST_PY_ID: "--id qemu" 290 <<: *buildman_and_testpy_dfn 291 292qemu_maltael test.py: 293 tags: [ 'all' ] 294 variables: 295 TEST_PY_BD: "maltael" 296 TEST_PY_TEST_SPEC: "not sleep and not efi" 297 TEST_PY_ID: "--id qemu" 298 <<: *buildman_and_testpy_dfn 299 300qemu_malta64 test.py: 301 tags: [ 'all' ] 302 variables: 303 TEST_PY_BD: "malta64" 304 TEST_PY_TEST_SPEC: "not sleep and not efi" 305 TEST_PY_ID: "--id qemu" 306 <<: *buildman_and_testpy_dfn 307 308qemu_malta64el test.py: 309 tags: [ 'all' ] 310 variables: 311 TEST_PY_BD: "malta64el" 312 TEST_PY_TEST_SPEC: "not sleep and not efi" 313 TEST_PY_ID: "--id qemu" 314 <<: *buildman_and_testpy_dfn 315 316qemu-ppce500 test.py: 317 tags: [ 'all' ] 318 variables: 319 TEST_PY_BD: "qemu-ppce500" 320 TEST_PY_TEST_SPEC: "not sleep" 321 <<: *buildman_and_testpy_dfn 322 323qemu-riscv32 test.py: 324 tags: [ 'all' ] 325 variables: 326 TEST_PY_BD: "qemu-riscv32" 327 TEST_PY_TEST_SPEC: "not sleep" 328 <<: *buildman_and_testpy_dfn 329 330qemu-riscv64 test.py: 331 tags: [ 'all' ] 332 variables: 333 TEST_PY_BD: "qemu-riscv64" 334 TEST_PY_TEST_SPEC: "not sleep" 335 <<: *buildman_and_testpy_dfn 336 337qemu-riscv32_spl test.py: 338 tags: [ 'all' ] 339 variables: 340 TEST_PY_BD: "qemu-riscv32_spl" 341 TEST_PY_TEST_SPEC: "not sleep" 342 <<: *buildman_and_testpy_dfn 343 344qemu-riscv64_spl test.py: 345 tags: [ 'all' ] 346 variables: 347 TEST_PY_BD: "qemu-riscv64_spl" 348 TEST_PY_TEST_SPEC: "not sleep" 349 <<: *buildman_and_testpy_dfn 350 351qemu-x86 test.py: 352 tags: [ 'all' ] 353 variables: 354 TEST_PY_BD: "qemu-x86" 355 TEST_PY_TEST_SPEC: "not sleep" 356 <<: *buildman_and_testpy_dfn 357 358qemu-x86_64 test.py: 359 tags: [ 'all' ] 360 variables: 361 TEST_PY_BD: "qemu-x86_64" 362 TEST_PY_TEST_SPEC: "not sleep" 363 <<: *buildman_and_testpy_dfn 364 365r2dplus_i82557c test.py: 366 tags: [ 'all' ] 367 variables: 368 TEST_PY_BD: "r2dplus" 369 TEST_PY_ID: "--id i82557c_qemu" 370 <<: *buildman_and_testpy_dfn 371 372r2dplus_pcnet test.py: 373 tags: [ 'all' ] 374 variables: 375 TEST_PY_BD: "r2dplus" 376 TEST_PY_ID: "--id pcnet_qemu" 377 <<: *buildman_and_testpy_dfn 378 379r2dplus_rtl8139 test.py: 380 tags: [ 'all' ] 381 variables: 382 TEST_PY_BD: "r2dplus" 383 TEST_PY_ID: "--id rtl8139_qemu" 384 <<: *buildman_and_testpy_dfn 385 386r2dplus_tulip test.py: 387 tags: [ 'all' ] 388 variables: 389 TEST_PY_BD: "r2dplus" 390 TEST_PY_ID: "--id tulip_qemu" 391 <<: *buildman_and_testpy_dfn 392 393xilinx_zynq_virt test.py: 394 tags: [ 'all' ] 395 variables: 396 TEST_PY_BD: "xilinx_zynq_virt" 397 TEST_PY_TEST_SPEC: "not sleep" 398 TEST_PY_ID: "--id qemu" 399 <<: *buildman_and_testpy_dfn 400 401xilinx_versal_virt test.py: 402 tags: [ 'all' ] 403 variables: 404 TEST_PY_BD: "xilinx_versal_virt" 405 TEST_PY_TEST_SPEC: "not sleep" 406 TEST_PY_ID: "--id qemu" 407 <<: *buildman_and_testpy_dfn 408 409xtfpga test.py: 410 tags: [ 'all' ] 411 variables: 412 TEST_PY_BD: "xtfpga" 413 TEST_PY_TEST_SPEC: "not sleep" 414 TEST_PY_ID: "--id qemu" 415 <<: *buildman_and_testpy_dfn 416