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-20220113-03Feb2022
   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    - if [[ "${TEST_PY_BD}" == "coreboot" ]]; then
  56        wget -O -
  57          "https://drive.google.com/uc?id=1x6nrtWIyIRPLS2cQBwYTnT2TbOI8UjmM&export=download" |
  58          xz -dc >${UBOOT_TRAVIS_BUILD_DIR}/coreboot.rom;
  59        wget -O -
  60          "https://drive.google.com/uc?id=149Cz-5SZXHNKpi9xg6R_5XITWohu348y&export=download" >
  61          cbfstool;
  62        chmod a+x cbfstool;
  63        ./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;
  64      fi
  65    - virtualenv -p /usr/bin/python3 /tmp/venv
  66    - . /tmp/venv/bin/activate
  67    - pip install -r test/py/requirements.txt
  68    # "${var:+"-k $var"}" expands to "" if $var is empty, "-k $var" if not
  69    - export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH};
  70      export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci;
  71      ./test/py/test.py -ra --bd ${TEST_PY_BD} ${TEST_PY_ID}
  72        ${TEST_PY_TEST_SPEC:+"-k ${TEST_PY_TEST_SPEC}"}
  73        --build-dir "$UBOOT_TRAVIS_BUILD_DIR"
  74    # It seems that the files in /tmp go away, so copy out what we need
  75    - if [[ "${TEST_PY_BD}" == "coreboot" ]]; then
  76        cp -v /tmp/coreboot/*.{html,css} .;
  77      fi
  78
  79build all 32bit ARM platforms:
  80  stage: world build
  81  script:
  82    - ret=0;
  83      ./tools/buildman/buildman -o /tmp -P -E -W arm -x aarch64 || ret=$?;
  84      if [[ $ret -ne 0 ]]; then
  85        ./tools/buildman/buildman -o /tmp -seP;
  86        exit $ret;
  87      fi;
  88
  89build all 64bit ARM platforms:
  90  stage: world build
  91  script:
  92    - virtualenv -p /usr/bin/python3 /tmp/venv
  93    - . /tmp/venv/bin/activate
  94    - pip install pyelftools
  95    - ret=0;
  96      ./tools/buildman/buildman -o /tmp -P -E -W aarch64 || ret=$?;
  97      if [[ $ret -ne 0 ]]; then
  98        ./tools/buildman/buildman -o /tmp -seP;
  99        exit $ret;
 100      fi;
 101
 102build all PowerPC platforms:
 103  stage: world build
 104  script:
 105    - ret=0;
 106      ./tools/buildman/buildman -o /tmp -P -E -W powerpc || ret=$?;
 107      if [[ $ret -ne 0 ]]; then
 108        ./tools/buildman/buildman -o /tmp -seP;
 109        exit $ret;
 110      fi;
 111
 112build all other platforms:
 113  stage: world build
 114  script:
 115    - ret=0;
 116      ./tools/buildman/buildman -o /tmp -P -E -W -x arm,powerpc || ret=$?;
 117      if [[ $ret -ne 0 ]]; then
 118        ./tools/buildman/buildman -o /tmp -seP;
 119        exit $ret;
 120      fi;
 121
 122check for migrated symbols in board header:
 123  stage: testsuites
 124  script:
 125    - KSYMLST=`mktemp`;
 126      KUSEDLST=`mktemp`;
 127      cat `find . -name "Kconfig*"` |
 128         sed -n -e 's/^\s*config *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p'
 129         -e 's/^\s*menuconfig *\([A-Za-z0-9_]*\).*$/CONFIG_\1/p'
 130         | sort -u > $KSYMLST;
 131      for CFG in `find include/configs -name "*.h"`; do
 132         grep '#define[[:blank:]]CONFIG_' $CFG |
 133            sed -n 's/#define.\(CONFIG_[A-Za-z0-9_]*\).*/\1/p' |
 134            sort -u > ${KUSEDLST} || true;
 135         NUM=`comm -12 --total --output-delimiter=, ${KSYMLST} ${KUSEDLST} |
 136            cut -d , -f 3`;
 137         if [[ $NUM -ne 0 ]]; then
 138            echo "Unmigrated symbols found in $CFG";
 139            exit 1;
 140         fi;
 141      done
 142
 143# QA jobs for code analytics
 144# static code analysis with cppcheck (we can add --enable=all later)
 145cppcheck:
 146  stage: testsuites
 147  script:
 148    - cppcheck -j$(nproc) --force --quiet --inline-suppr .
 149
 150# search for TODO within source tree
 151grep TODO/FIXME/HACK:
 152  stage: testsuites
 153  script:
 154    - grep -r TODO .
 155    - grep -r FIXME .
 156    # search for HACK within source tree and ignore HACKKIT board
 157    - grep -r HACK . | grep -v HACKKIT
 158
 159# build HTML documentation
 160htmldocs:
 161  stage: testsuites
 162  script:
 163    - virtualenv -p /usr/bin/python3 /tmp/venvhtml
 164    - . /tmp/venvhtml/bin/activate
 165    - pip install -r doc/sphinx/requirements.txt
 166    - make htmldocs
 167
 168# some statistics about the code base
 169sloccount:
 170  stage: testsuites
 171  script:
 172    - sloccount .
 173
 174# ensure all configs have MAINTAINERS entries
 175Check for configs without MAINTAINERS entry:
 176  stage: testsuites
 177  script:
 178    - if [ `./tools/genboardscfg.py -f 2>&1 | wc -l` -ne 0 ]; then exit 1; fi
 179
 180# Ensure host tools build
 181Build tools-only:
 182  stage: testsuites
 183  script:
 184    - make tools-only_config tools-only -j$(nproc)
 185
 186# Ensure env tools build
 187Build envtools:
 188  stage: testsuites
 189  script:
 190    - make tools-only_config envtools -j$(nproc)
 191
 192Run binman, buildman, dtoc, Kconfig and patman testsuites:
 193  stage: testsuites
 194  script:
 195    - git config --global user.name "GitLab CI Runner";
 196      git config --global user.email trini@konsulko.com;
 197      export USER=gitlab;
 198      virtualenv -p /usr/bin/python3 /tmp/venv;
 199      . /tmp/venv/bin/activate;
 200      pip install -r test/py/requirements.txt;
 201      export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl;
 202      export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt";
 203      export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}";
 204      ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
 205        --board sandbox_spl;
 206      ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test;
 207      ./tools/buildman/buildman -t;
 208      ./tools/dtoc/dtoc -t;
 209      ./tools/patman/patman test;
 210      make testconfig
 211
 212Run tests for Nokia RX-51 (aka N900):
 213  stage: testsuites
 214  script:
 215    - export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH;
 216      test/nokia_rx51_test.sh
 217
 218# Test sandbox with test.py
 219sandbox test.py:
 220  variables:
 221    TEST_PY_BD: "sandbox"
 222  <<: *buildman_and_testpy_dfn
 223
 224sandbox with clang test.py:
 225  variables:
 226    TEST_PY_BD: "sandbox"
 227    OVERRIDE: "-O clang-13"
 228  <<: *buildman_and_testpy_dfn
 229
 230sandbox_spl test.py:
 231  variables:
 232    TEST_PY_BD: "sandbox_spl"
 233    TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
 234  <<: *buildman_and_testpy_dfn
 235
 236sandbox_noinst_test.py:
 237  variables:
 238    TEST_PY_BD: "sandbox_noinst"
 239    TEST_PY_TEST_SPEC: "test_ofplatdata or test_handoff or test_spl"
 240  <<: *buildman_and_testpy_dfn
 241
 242evb-ast2500 test.py:
 243  variables:
 244    TEST_PY_BD: "evb-ast2500"
 245    TEST_PY_ID: "--id qemu"
 246  <<: *buildman_and_testpy_dfn
 247
 248sandbox_flattree test.py:
 249  variables:
 250    TEST_PY_BD: "sandbox_flattree"
 251  <<: *buildman_and_testpy_dfn
 252
 253vexpress_ca9x4 test.py:
 254  variables:
 255    TEST_PY_BD: "vexpress_ca9x4"
 256    TEST_PY_ID: "--id qemu"
 257  <<: *buildman_and_testpy_dfn
 258
 259integratorcp_cm926ejs test.py:
 260  variables:
 261    TEST_PY_BD: "integratorcp_cm926ejs"
 262    TEST_PY_TEST_SPEC: "not sleep"
 263    TEST_PY_ID: "--id qemu"
 264  <<: *buildman_and_testpy_dfn
 265
 266qemu_arm test.py:
 267  variables:
 268    TEST_PY_BD: "qemu_arm"
 269    TEST_PY_TEST_SPEC: "not sleep"
 270  <<: *buildman_and_testpy_dfn
 271
 272qemu_arm64 test.py:
 273  variables:
 274    TEST_PY_BD: "qemu_arm64"
 275    TEST_PY_TEST_SPEC: "not sleep"
 276  <<: *buildman_and_testpy_dfn
 277
 278qemu_malta test.py:
 279  variables:
 280    TEST_PY_BD: "malta"
 281    TEST_PY_TEST_SPEC: "not sleep and not efi"
 282    TEST_PY_ID: "--id qemu"
 283  <<: *buildman_and_testpy_dfn
 284
 285qemu_maltael test.py:
 286  variables:
 287    TEST_PY_BD: "maltael"
 288    TEST_PY_TEST_SPEC: "not sleep and not efi"
 289    TEST_PY_ID: "--id qemu"
 290  <<: *buildman_and_testpy_dfn
 291
 292qemu_malta64 test.py:
 293  variables:
 294    TEST_PY_BD: "malta64"
 295    TEST_PY_TEST_SPEC: "not sleep and not efi"
 296    TEST_PY_ID: "--id qemu"
 297  <<: *buildman_and_testpy_dfn
 298
 299qemu_malta64el test.py:
 300  variables:
 301    TEST_PY_BD: "malta64el"
 302    TEST_PY_TEST_SPEC: "not sleep and not efi"
 303    TEST_PY_ID: "--id qemu"
 304  <<: *buildman_and_testpy_dfn
 305
 306qemu-ppce500 test.py:
 307  variables:
 308    TEST_PY_BD: "qemu-ppce500"
 309    TEST_PY_TEST_SPEC: "not sleep"
 310  <<: *buildman_and_testpy_dfn
 311
 312qemu-riscv32 test.py:
 313  variables:
 314    TEST_PY_BD: "qemu-riscv32"
 315    TEST_PY_TEST_SPEC: "not sleep"
 316  <<: *buildman_and_testpy_dfn
 317
 318qemu-riscv64 test.py:
 319  variables:
 320    TEST_PY_BD: "qemu-riscv64"
 321    TEST_PY_TEST_SPEC: "not sleep"
 322  <<: *buildman_and_testpy_dfn
 323
 324qemu-riscv32_spl test.py:
 325  variables:
 326    TEST_PY_BD: "qemu-riscv32_spl"
 327    TEST_PY_TEST_SPEC: "not sleep"
 328  <<: *buildman_and_testpy_dfn
 329
 330qemu-riscv64_spl test.py:
 331  variables:
 332    TEST_PY_BD: "qemu-riscv64_spl"
 333    TEST_PY_TEST_SPEC: "not sleep"
 334  <<: *buildman_and_testpy_dfn
 335
 336qemu-x86 test.py:
 337  variables:
 338    TEST_PY_BD: "qemu-x86"
 339    TEST_PY_TEST_SPEC: "not sleep"
 340  <<: *buildman_and_testpy_dfn
 341
 342qemu-x86_64 test.py:
 343  variables:
 344    TEST_PY_BD: "qemu-x86_64"
 345    TEST_PY_TEST_SPEC: "not sleep"
 346  <<: *buildman_and_testpy_dfn
 347
 348r2dplus_i82557c test.py:
 349  variables:
 350    TEST_PY_BD: "r2dplus"
 351    TEST_PY_ID: "--id i82557c_qemu"
 352  <<: *buildman_and_testpy_dfn
 353
 354r2dplus_pcnet test.py:
 355  variables:
 356    TEST_PY_BD: "r2dplus"
 357    TEST_PY_ID: "--id pcnet_qemu"
 358  <<: *buildman_and_testpy_dfn
 359
 360r2dplus_rtl8139 test.py:
 361  variables:
 362    TEST_PY_BD: "r2dplus"
 363    TEST_PY_ID: "--id rtl8139_qemu"
 364  <<: *buildman_and_testpy_dfn
 365
 366r2dplus_tulip test.py:
 367  variables:
 368    TEST_PY_BD: "r2dplus"
 369    TEST_PY_ID: "--id tulip_qemu"
 370  <<: *buildman_and_testpy_dfn
 371
 372sifive_unleashed_sdcard test.py:
 373  variables:
 374    TEST_PY_BD: "sifive_unleashed"
 375    TEST_PY_ID: "--id sdcard_qemu"
 376  <<: *buildman_and_testpy_dfn
 377
 378sifive_unleashed_spi-nor test.py:
 379  variables:
 380    TEST_PY_BD: "sifive_unleashed"
 381    TEST_PY_ID: "--id spi-nor_qemu"
 382  <<: *buildman_and_testpy_dfn
 383
 384xilinx_zynq_virt test.py:
 385  variables:
 386    TEST_PY_BD: "xilinx_zynq_virt"
 387    TEST_PY_TEST_SPEC: "not sleep"
 388    TEST_PY_ID: "--id qemu"
 389  <<: *buildman_and_testpy_dfn
 390
 391xilinx_versal_virt test.py:
 392  variables:
 393    TEST_PY_BD: "xilinx_versal_virt"
 394    TEST_PY_TEST_SPEC: "not sleep"
 395    TEST_PY_ID: "--id qemu"
 396  <<: *buildman_and_testpy_dfn
 397
 398xtfpga test.py:
 399  variables:
 400    TEST_PY_BD: "xtfpga"
 401    TEST_PY_TEST_SPEC: "not sleep"
 402    TEST_PY_ID: "--id qemu"
 403  <<: *buildman_and_testpy_dfn
 404
 405coreboot test.py:
 406  variables:
 407    TEST_PY_BD: "coreboot"
 408    TEST_PY_TEST_SPEC: "not sleep"
 409    TEST_PY_ID: "--id qemu"
 410  artifacts:
 411    paths:
 412      - "*.html"
 413      - "*.css"
 414    expire_in: 1 week
 415  <<: *buildman_and_testpy_dfn
 416