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