1# SPDX-License-Identifier: GPL-2.0+ 2 3variables: 4 DEFAULT_TAG: "" 5 MIRROR_DOCKER: docker.io 6 7default: 8 tags: 9 - ${DEFAULT_TAG} 10 11# Grab our configured image. The source for this is found 12# in the u-boot tree at tools/docker/Dockerfile 13image: ${MIRROR_DOCKER}/trini/u-boot-gitlab-ci-runner:jammy-20230308-04Apr2023 14 15# We run some tests in different order, to catch some failures quicker. 16stages: 17 - testsuites 18 - test.py 19 - world build 20 21.buildman_and_testpy_template: &buildman_and_testpy_dfn 22 stage: test.py 23 before_script: 24 # Clone uboot-test-hooks 25 - git config --global --add safe.directory "${CI_PROJECT_DIR}" 26 - git clone --depth=1 https://source.denx.de/u-boot/u-boot-test-hooks /tmp/uboot-test-hooks 27 - ln -s travis-ci /tmp/uboot-test-hooks/bin/`hostname` 28 - ln -s travis-ci /tmp/uboot-test-hooks/py/`hostname` 29 - grub-mkimage --prefix="" -o ~/grub_x86.efi -O i386-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 30 - grub-mkimage --prefix="" -o ~/grub_x64.efi -O x86_64-efi normal echo lsefimmap lsefi lsefisystab efinet tftp minicmd 31 - if [[ "${TEST_PY_BD}" == "qemu-riscv32_spl" ]]; then 32 wget -O - https://github.com/riscv/opensbi/releases/download/v0.9/opensbi-0.9-rv-bin.tar.xz | tar -C /tmp -xJ; 33 export OPENSBI=/tmp/opensbi-0.9-rv-bin/share/opensbi/ilp32/generic/firmware/fw_dynamic.bin; 34 fi 35 - if [[ "${TEST_PY_BD}" == "qemu-riscv64_spl" ]] || [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then 36 wget -O - https://github.com/riscv/opensbi/releases/download/v0.9/opensbi-0.9-rv-bin.tar.xz | tar -C /tmp -xJ; 37 export OPENSBI=/tmp/opensbi-0.9-rv-bin/share/opensbi/lp64/generic/firmware/fw_dynamic.bin; 38 fi 39 40 after_script: 41 - cp -v /tmp/${TEST_PY_BD}/*.{html,css} . 42 - rm -rf /tmp/uboot-test-hooks /tmp/venv 43 script: 44 # If we've been asked to use clang only do one configuration. 45 - export UBOOT_TRAVIS_BUILD_DIR=/tmp/${TEST_PY_BD} 46 - echo BUILD_ENV ${BUILD_ENV} 47 - if [ -n "${BUILD_ENV}" ]; then 48 export ${BUILD_ENV}; 49 fi 50 - tools/buildman/buildman -o ${UBOOT_TRAVIS_BUILD_DIR} -w -E -W -e 51 --board ${TEST_PY_BD} ${OVERRIDE} 52 - cp ~/grub_x86.efi $UBOOT_TRAVIS_BUILD_DIR/ 53 - cp ~/grub_x64.efi $UBOOT_TRAVIS_BUILD_DIR/ 54 - cp /opt/grub/grubriscv64.efi $UBOOT_TRAVIS_BUILD_DIR/grub_riscv64.efi 55 - cp /opt/grub/grubaa64.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm64.efi 56 - cp /opt/grub/grubarm.efi $UBOOT_TRAVIS_BUILD_DIR/grub_arm.efi 57 # create sdcard / spi-nor images for sifive unleashed using genimage 58 - if [[ "${TEST_PY_BD}" == "sifive_unleashed" ]]; then 59 mkdir -p root; 60 cp ${UBOOT_TRAVIS_BUILD_DIR}/spl/u-boot-spl.bin .; 61 cp ${UBOOT_TRAVIS_BUILD_DIR}/u-boot.itb .; 62 rm -rf tmp; 63 genimage --inputpath . --config board/sifive/unleashed/genimage_sdcard.cfg; 64 cp images/sdcard.img ${UBOOT_TRAVIS_BUILD_DIR}/; 65 rm -rf tmp; 66 genimage --inputpath . --config board/sifive/unleashed/genimage_spi-nor.cfg; 67 cp images/spi-nor.img ${UBOOT_TRAVIS_BUILD_DIR}/; 68 fi 69 - if [[ "${TEST_PY_BD}" == "coreboot" ]]; then 70 wget -O - 71 "https://drive.google.com/uc?id=1x6nrtWIyIRPLS2cQBwYTnT2TbOI8UjmM&export=download" | 72 xz -dc >${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom; 73 wget -O - 74 "https://drive.google.com/uc?id=149Cz-5SZXHNKpi9xg6R_5XITWohu348y&export=download" > 75 cbfstool; 76 chmod a+x cbfstool; 77 ./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; 78 fi 79 - virtualenv -p /usr/bin/python3 /tmp/venv 80 - . /tmp/venv/bin/activate 81 - pip install -r test/py/requirements.txt 82 # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not 83 - export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH}; 84 export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci; 85 ./test/py/test.py -ra --bd ${TEST_PY_BD} ${TEST_PY_ID} 86 ${TEST_PY_TEST_SPEC:+"-k ${TEST_PY_TEST_SPEC}"} 87 --build-dir "$UBOOT_TRAVIS_BUILD_DIR" 88 artifacts: 89 when: always 90 paths: 91 - "*.html" 92 - "*.css" 93 expire_in: 1 week 94 95build all 32bit ARM platforms: 96 stage: world build 97 script: 98 - ret=0; 99 git config --global --add safe.directory "${CI_PROJECT_DIR}"; 100 ./tools/buildman/buildman -o /tmp -PEWM arm -x aarch64 || ret=$?; 101 if [[ $ret -ne 0 ]]; then 102 ./tools/buildman/buildman -o /tmp -seP; 103 exit $ret; 104 fi; 105 106build all 64bit ARM platforms: 107 stage: world build 108 script: 109 - virtualenv -p /usr/bin/python3 /tmp/venv 110 - . /tmp/venv/bin/activate 111 - ret=0; 112 git config --global --add safe.directory "${CI_PROJECT_DIR}"; 113 ./tools/buildman/buildman -o /tmp -PEWM aarch64 || ret=$?; 114 if [[ $ret -ne 0 ]]; then 115 ./tools/buildman/buildman -o /tmp -seP; 116 exit $ret; 117 fi; 118 119build all PowerPC platforms: 120 stage: world build 121 script: 122 - ret=0; 123 git config --global --add safe.directory "${CI_PROJECT_DIR}"; 124 ./tools/buildman/buildman -o /tmp -P -E -W powerpc || ret=$?; 125 if [[ $ret -ne 0 ]]; then 126 ./tools/buildman/buildman -o /tmp -seP; 127 exit $ret; 128 fi; 129 130build all other platforms: 131 stage: world build 132 script: 133 - ret=0; 134 git config --global --add safe.directory "${CI_PROJECT_DIR}"; 135 ./tools/buildman/buildman -o /tmp -PEWM -x arm,powerpc || ret=$?; 136 if [[ $ret -ne 0 ]]; then 137 ./tools/buildman/buildman -o /tmp -seP; 138 exit $ret; 139 fi; 140 141check for new CONFIG symbols outside Kconfig: 142 stage: testsuites 143 script: 144 - git config --global --add safe.directory "${CI_PROJECT_DIR}" 145 # If grep succeeds and finds a match the test fails as we should 146 # have no matches. 147 - git grep -E '^#[[:blank:]]*(define|undef)[[:blank:]]*CONFIG_' 148 :^doc/ :^arch/arm/dts/ :^scripts/kconfig/lkc.h 149 :^include/linux/kconfig.h :^tools/ && exit 1 || exit 0 150 151# QA jobs for code analytics 152# static code analysis with cppcheck (we can add --enable=all later) 153cppcheck: 154 stage: testsuites 155 script: 156 - cppcheck -j$(nproc) --force --quiet --inline-suppr . 157 158# search for TODO within source tree 159grep TODO/FIXME/HACK: 160 stage: testsuites 161 script: 162 - grep -r TODO . 163 - grep -r FIXME . 164 # search for HACK within source tree and ignore HACKKIT board 165 - grep -r HACK . | grep -v HACKKIT 166 167# build documentation 168docs: 169 stage: testsuites 170 script: 171 - virtualenv -p /usr/bin/python3 /tmp/venvhtml 172 - . /tmp/venvhtml/bin/activate 173 - pip install -r doc/sphinx/requirements.txt 174 - make htmldocs KDOC_WERROR=1 175 - make infodocs 176 177# some statistics about the code base 178sloccount: 179 stage: testsuites 180 script: 181 - sloccount . 182 183# ensure all configs have MAINTAINERS entries 184Check for configs without MAINTAINERS entry: 185 stage: testsuites 186 script: 187 - ./tools/buildman/buildman -R 188 189# Ensure host tools build 190Build tools-only: 191 stage: testsuites 192 script: 193 - make tools-only_config tools-only -j$(nproc) 194 195# Ensure env tools build 196Build envtools: 197 stage: testsuites 198 script: 199 - make tools-only_config envtools -j$(nproc) 200 201Run binman, buildman, dtoc, Kconfig and patman testsuites: 202 stage: testsuites 203 script: 204 - git config --global user.name "GitLab CI Runner"; 205 git config --global user.email trini@konsulko.com; 206 git config --global --add safe.directory "${CI_PROJECT_DIR}"; 207 export USER=gitlab; 208 virtualenv -p /usr/bin/python3 /tmp/venv; 209 . /tmp/venv/bin/activate; 210 pip install -r test/py/requirements.txt; 211 export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl; 212 export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"; 213 export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"; 214 set +e; 215 ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w 216 --board sandbox_spl; 217 set -e; 218 ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test; 219 ./tools/buildman/buildman -t; 220 ./tools/dtoc/dtoc -t; 221 ./tools/patman/patman test; 222 make testconfig 223 224Run tests for Nokia RX-51 (aka N900): 225 stage: testsuites 226 script: 227 - mkdir nokia_rx51_tmp; 228 ln -s /opt/nokia/u-boot-gen-combined nokia_rx51_tmp/; 229 ln -s /opt/nokia/qemu-n900.tar.gz nokia_rx51_tmp/; 230 ln -s /opt/nokia/kernel_2.6.28-20103103+0m5_armel.deb nokia_rx51_tmp/; 231 ln -s /opt/nokia/libc6_2.5.1-1eglibc27+0m5_armel.deb nokia_rx51_tmp/; 232 ln -s /opt/nokia/busybox_1.10.2.legal-1osso30+0m5_armel.deb nokia_rx51_tmp/; 233 ln -s /opt/nokia/qemu-system-arm nokia_rx51_tmp/; 234 export PATH=/opt/gcc-12.2.0-nolibc/arm-linux-gnueabi/bin:$PATH; 235 test/nokia_rx51_test.sh 236 237# Check for any pylint regressions 238Run pylint: 239 stage: testsuites 240 script: 241 - git config --global --add safe.directory "${CI_PROJECT_DIR}" 242 - pip install -r test/py/requirements.txt 243 - pip install asteval pylint==2.12.2 pyopenssl 244 - export PATH=${PATH}:~/.local/bin 245 - echo "[MASTER]" >> .pylintrc 246 - echo "load-plugins=pylint.extensions.docparams" >> .pylintrc 247 - export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl 248 - set +e 249 - ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w 250 --board sandbox_spl 251 - set -e 252 - pylint --version 253 - export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt" 254 - make pylint_err 255 256# Check for pre-schema driver model tags 257Check for pre-schema tags: 258 stage: testsuites 259 script: 260 - git config --global --add safe.directory "${CI_PROJECT_DIR}"; 261 # If grep succeeds and finds a match the test fails as we should 262 # have no matches. 263 - git grep u-boot,dm- -- '*.dts*' && exit 1 || exit 0 264 265# Check we can package the Python tools 266Check packing of Python tools: 267 stage: testsuites 268 script: 269 - make pip 270 271# Test sandbox with test.py 272sandbox test.py: 273 variables: 274 TEST_PY_BD: "sandbox" 275 <<: *buildman_and_testpy_dfn 276 277sandbox with clang test.py: 278 variables: 279 TEST_PY_BD: "sandbox" 280 OVERRIDE: "-O clang-16" 281 <<: *buildman_and_testpy_dfn 282 283sandbox without LTO test.py: 284 variables: 285 TEST_PY_BD: "sandbox" 286 BUILD_ENV: "NO_LTO=1" 287 <<: *buildman_and_testpy_dfn 288 289sandbox_spl test.py: 290 variables: 291 TEST_PY_BD: "sandbox_spl" 292 TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl" 293 <<: *buildman_and_testpy_dfn 294 295sandbox_noinst_test.py: 296 variables: 297 TEST_PY_BD: "sandbox_noinst" 298 TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl" 299 <<: *buildman_and_testpy_dfn 300 301sandbox_vpl test.py: 302 variables: 303 TEST_PY_BD: "sandbox_vpl" 304 TEST_PY_TEST_SPEC: "vpl or test_spl" 305 <<: *buildman_and_testpy_dfn 306 307# Enable tracing and disable LTO, to ensure functions are not elided 308sandbox trace_test.py: 309 variables: 310 TEST_PY_BD: "sandbox" 311 BUILD_ENV: "FTRACE=1 NO_LTO=1" 312 TEST_PY_TEST_SPEC: "trace" 313 OVERRIDE: "-a CONFIG_TRACE=y -a CONFIG_TRACE_EARLY=y -a CONFIG_TRACE_EARLY_SIZE=0x01000000" 314 <<: *buildman_and_testpy_dfn 315 316evb-ast2500 test.py: 317 variables: 318 TEST_PY_BD: "evb-ast2500" 319 TEST_PY_ID: "--id qemu" 320 <<: *buildman_and_testpy_dfn 321 322evb-ast2600 test.py: 323 variables: 324 TEST_PY_BD: "evb-ast2600" 325 TEST_PY_ID: "--id qemu" 326 <<: *buildman_and_testpy_dfn 327 328sandbox_flattree test.py: 329 variables: 330 TEST_PY_BD: "sandbox_flattree" 331 <<: *buildman_and_testpy_dfn 332 333vexpress_ca9x4 test.py: 334 variables: 335 TEST_PY_BD: "vexpress_ca9x4" 336 TEST_PY_ID: "--id qemu" 337 <<: *buildman_and_testpy_dfn 338 339integratorcp_cm926ejs test.py: 340 variables: 341 TEST_PY_BD: "integratorcp_cm926ejs" 342 TEST_PY_TEST_SPEC: "not sleep" 343 TEST_PY_ID: "--id qemu" 344 <<: *buildman_and_testpy_dfn 345 346qemu_arm test.py: 347 variables: 348 TEST_PY_BD: "qemu_arm" 349 TEST_PY_TEST_SPEC: "not sleep" 350 <<: *buildman_and_testpy_dfn 351 352qemu_arm64 test.py: 353 variables: 354 TEST_PY_BD: "qemu_arm64" 355 TEST_PY_TEST_SPEC: "not sleep" 356 <<: *buildman_and_testpy_dfn 357 358qemu_m68k test.py: 359 variables: 360 TEST_PY_BD: "M5208EVBE" 361 TEST_PY_ID: "--id qemu" 362 TEST_PY_TEST_SPEC: "not sleep and not efi" 363 OVERRIDE: "-a CONFIG_M68K_QEMU=y -a ~CONFIG_MCFTMR" 364 <<: *buildman_and_testpy_dfn 365 366qemu_malta test.py: 367 variables: 368 TEST_PY_BD: "malta" 369 TEST_PY_TEST_SPEC: "not sleep and not efi" 370 TEST_PY_ID: "--id qemu" 371 <<: *buildman_and_testpy_dfn 372 373qemu_maltael test.py: 374 variables: 375 TEST_PY_BD: "maltael" 376 TEST_PY_TEST_SPEC: "not sleep and not efi" 377 TEST_PY_ID: "--id qemu" 378 <<: *buildman_and_testpy_dfn 379 380qemu_malta64 test.py: 381 variables: 382 TEST_PY_BD: "malta64" 383 TEST_PY_TEST_SPEC: "not sleep and not efi" 384 TEST_PY_ID: "--id qemu" 385 <<: *buildman_and_testpy_dfn 386 387qemu_malta64el test.py: 388 variables: 389 TEST_PY_BD: "malta64el" 390 TEST_PY_TEST_SPEC: "not sleep and not efi" 391 TEST_PY_ID: "--id qemu" 392 <<: *buildman_and_testpy_dfn 393 394qemu-ppce500 test.py: 395 variables: 396 TEST_PY_BD: "qemu-ppce500" 397 TEST_PY_TEST_SPEC: "not sleep" 398 <<: *buildman_and_testpy_dfn 399 400qemu-riscv32 test.py: 401 variables: 402 TEST_PY_BD: "qemu-riscv32" 403 TEST_PY_TEST_SPEC: "not sleep" 404 <<: *buildman_and_testpy_dfn 405 406qemu-riscv64 test.py: 407 variables: 408 TEST_PY_BD: "qemu-riscv64" 409 TEST_PY_TEST_SPEC: "not sleep" 410 <<: *buildman_and_testpy_dfn 411 412qemu-riscv32_spl test.py: 413 variables: 414 TEST_PY_BD: "qemu-riscv32_spl" 415 TEST_PY_TEST_SPEC: "not sleep" 416 <<: *buildman_and_testpy_dfn 417 418qemu-riscv64_spl test.py: 419 variables: 420 TEST_PY_BD: "qemu-riscv64_spl" 421 TEST_PY_TEST_SPEC: "not sleep" 422 <<: *buildman_and_testpy_dfn 423 424qemu-x86 test.py: 425 variables: 426 TEST_PY_BD: "qemu-x86" 427 TEST_PY_TEST_SPEC: "not sleep" 428 <<: *buildman_and_testpy_dfn 429 430qemu-x86_64 test.py: 431 variables: 432 TEST_PY_BD: "qemu-x86_64" 433 TEST_PY_TEST_SPEC: "not sleep" 434 <<: *buildman_and_testpy_dfn 435 436r2dplus_i82557c test.py: 437 variables: 438 TEST_PY_BD: "r2dplus" 439 TEST_PY_ID: "--id i82557c_qemu" 440 <<: *buildman_and_testpy_dfn 441 442r2dplus_pcnet test.py: 443 variables: 444 TEST_PY_BD: "r2dplus" 445 TEST_PY_ID: "--id pcnet_qemu" 446 <<: *buildman_and_testpy_dfn 447 448r2dplus_rtl8139 test.py: 449 variables: 450 TEST_PY_BD: "r2dplus" 451 TEST_PY_ID: "--id rtl8139_qemu" 452 <<: *buildman_and_testpy_dfn 453 454r2dplus_tulip test.py: 455 variables: 456 TEST_PY_BD: "r2dplus" 457 TEST_PY_ID: "--id tulip_qemu" 458 <<: *buildman_and_testpy_dfn 459 460sifive_unleashed_sdcard test.py: 461 variables: 462 TEST_PY_BD: "sifive_unleashed" 463 TEST_PY_ID: "--id sdcard_qemu" 464 <<: *buildman_and_testpy_dfn 465 466sifive_unleashed_spi-nor test.py: 467 variables: 468 TEST_PY_BD: "sifive_unleashed" 469 TEST_PY_ID: "--id spi-nor_qemu" 470 <<: *buildman_and_testpy_dfn 471 472xilinx_zynq_virt test.py: 473 variables: 474 TEST_PY_BD: "xilinx_zynq_virt" 475 TEST_PY_TEST_SPEC: "not sleep" 476 TEST_PY_ID: "--id qemu" 477 <<: *buildman_and_testpy_dfn 478 479xilinx_versal_virt test.py: 480 variables: 481 TEST_PY_BD: "xilinx_versal_virt" 482 TEST_PY_TEST_SPEC: "not sleep" 483 TEST_PY_ID: "--id qemu" 484 <<: *buildman_and_testpy_dfn 485 486xtfpga test.py: 487 variables: 488 TEST_PY_BD: "xtfpga" 489 TEST_PY_TEST_SPEC: "not sleep" 490 TEST_PY_ID: "--id qemu" 491 <<: *buildman_and_testpy_dfn 492 493coreboot test.py: 494 variables: 495 TEST_PY_BD: "coreboot" 496 TEST_PY_TEST_SPEC: "not sleep" 497 TEST_PY_ID: "--id qemu" 498 <<: *buildman_and_testpy_dfn 499