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