1# SPDX-License-Identifier: GPL-2.0+ 2 3# Grab our configured image. The source for this is found at: 4# https://gitlab.denx.de/u-boot/gitlab-ci-runner 5image: trini/u-boot-gitlab-ci-runner:bionic-20191202-10Jan2020 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 git://github.com/swarren/uboot-test-hooks.git /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 - mkdir ~/grub2-arm 24 - ( cd ~/grub2-arm; wget -O - http://download.opensuse.org/ports/armv7hl/distribution/leap/42.2/repo/oss/suse/armv7hl/grub2-arm-efi-2.02~beta2-87.1.armv7hl.rpm | rpm2cpio | cpio -di ) 25 - mkdir ~/grub2-arm64 26 - ( cd ~/grub2-arm64; wget -O - http://download.opensuse.org/ports/aarch64/distribution/leap/42.2/repo/oss/suse/aarch64/grub2-arm64-efi-2.02~beta2-87.1.aarch64.rpm | rpm2cpio | cpio -di ) 27 28 after_script: 29 - rm -rf ~/grub2* /tmp/uboot-test-hooks /tmp/venv 30 script: 31 # From buildman, exit code 129 means warnings only. If we've been asked to 32 # use clang only do one configuration. 33 - if [[ "${BUILDMAN}" != "" ]]; then 34 ret=0; 35 tools/buildman/buildman -o /tmp -P -E ${BUILDMAN} ${OVERRIDE}|| ret=$?; 36 if [[ $ret -ne 0 && $ret -ne 129 ]]; then 37 tools/buildman/buildman -o /tmp -sdeP ${BUILDMAN}; 38 exit $ret; 39 fi; 40 fi 41 # "not a_test_which_does_not_exist" is a dummy -k parameter which will 42 # never prevent any test from running. That way, we can always pass 43 # "-k something" even when $TEST_PY_TEST_SPEC doesnt need a custom 44 # value. 45 - virtualenv -p /usr/bin/python3 /tmp/venv 46 - . /tmp/venv/bin/activate 47 - pip install -r test/py/requirements.txt 48 - export UBOOT_TRAVIS_BUILD_DIR=/tmp/.bm-work/${TEST_PY_BD}; 49 export PATH=/opt/qemu/bin:/tmp/uboot-test-hooks/bin:${PATH}; 50 export PYTHONPATH=/tmp/uboot-test-hooks/py/travis-ci; 51 if [[ "${TEST_PY_BD}" != "" ]]; then 52 ./test/py/test.py --bd ${TEST_PY_BD} ${TEST_PY_ID} 53 -k "${TEST_PY_TEST_SPEC:-not a_test_which_does_not_exist}" 54 --build-dir "$UBOOT_TRAVIS_BUILD_DIR"; 55 ret=$?; 56 if [[ $ret -ne 0 ]]; then 57 exit $ret; 58 fi; 59 fi; 60 61build all 32bit ARM platforms: 62 tags: [ 'all' ] 63 stage: world build 64 script: 65 - ret=0; 66 ./tools/buildman/buildman -o /tmp -P -E arm -x aarch64 || ret=$?; 67 if [[ $ret -ne 0 && $ret -ne 129 ]]; then 68 ./tools/buildman/buildman -o /tmp -sdeP; 69 exit $ret; 70 fi; 71 72build all 64bit ARM platforms: 73 tags: [ 'all' ] 74 stage: world build 75 script: 76 - virtualenv /tmp/venv 77 - . /tmp/venv/bin/activate 78 - pip install pyelftools 79 - ret=0; 80 ./tools/buildman/buildman -o /tmp -P -E aarch64 || ret=$?; 81 if [[ $ret -ne 0 && $ret -ne 129 ]]; then 82 ./tools/buildman/buildman -o /tmp -sdeP; 83 exit $ret; 84 fi; 85 86build all PowerPC platforms: 87 tags: [ 'all' ] 88 stage: world build 89 script: 90 - ret=0; 91 ./tools/buildman/buildman -o /tmp -P -E powerpc || ret=$?; 92 if [[ $ret -ne 0 && $ret -ne 129 ]]; then 93 ./tools/buildman/buildman -o /tmp -sdeP; 94 exit $ret; 95 fi; 96 97build all other platforms: 98 tags: [ 'all' ] 99 stage: world build 100 script: 101 - ret=0; 102 ./tools/buildman/buildman -o /tmp -P -E -x arm,powerpc || ret=$?; 103 if [[ $ret -ne 0 && $ret -ne 129 ]]; then 104 ./tools/buildman/buildman -o /tmp -sdeP; 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 tags: [ 'all' ] 112 stage: testsuites 113 script: 114 - cppcheck --force --quiet --inline-suppr . 115 116# search for TODO within source tree 117grep TODO/FIXME/HACK: 118 tags: [ 'all' ] 119 stage: testsuites 120 script: 121 - grep -r TODO . 122 - grep -r FIXME . 123 # search for HACK within source tree and ignore HACKKIT board 124 - grep -r HACK . | grep -v HACKKIT 125 126# some statistics about the code base 127sloccount: 128 tags: [ 'all' ] 129 stage: testsuites 130 script: 131 - sloccount . 132 133# ensure all configs have MAINTAINERS entries 134Check for configs without MAINTAINERS entry: 135 tags: [ 'all' ] 136 stage: testsuites 137 script: 138 - if [ `./tools/genboardscfg.py -f 2>&1 | wc -l` -ne 0 ]; then exit 1; fi 139 140# Ensure host tools build 141Build tools-only: 142 tags: [ 'all' ] 143 stage: testsuites 144 script: 145 - make tools-only_config tools-only -j$(nproc) 146 147# Ensure env tools build 148Build envtools: 149 tags: [ 'all' ] 150 stage: testsuites 151 script: 152 - make tools-only_config envtools -j$(nproc) 153 154Run binman, buildman, dtoc and patman testsuites: 155 tags: [ 'all' ] 156 stage: testsuites 157 script: 158 - git config --global user.name "GitLab CI Runner"; 159 git config --global user.email trini@konsulko.com; 160 export USER=gitlab; 161 virtualenv /tmp/venv; 162 . /tmp/venv/bin/activate; 163 pip install pyelftools; 164 export UBOOT_TRAVIS_BUILD_DIR=/tmp/.bm-work/sandbox_spl; 165 export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"; 166 export PATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc:${PATH}"; 167 ./tools/buildman/buildman -o /tmp -P sandbox_spl; 168 ./tools/binman/binman --toolpath ${UBOOT_TRAVIS_BUILD_DIR}/tools test; 169 ./tools/buildman/buildman -t; 170 ./tools/dtoc/dtoc -t; 171 ./tools/patman/patman --test 172 173# Test sandbox with test.py 174sandbox test.py: 175 tags: [ 'all' ] 176 variables: 177 TEST_PY_BD: "sandbox" 178 BUILDMAN: "^sandbox$" 179 <<: *buildman_and_testpy_dfn 180 181sandbox with clang test.py: 182 tags: [ 'all' ] 183 variables: 184 TEST_PY_BD: "sandbox" 185 BUILDMAN: "^sandbox$" 186 OVERRIDE: "-O clang-7" 187 <<: *buildman_and_testpy_dfn 188 189sandbox_spl test.py: 190 tags: [ 'all' ] 191 variables: 192 TEST_PY_BD: "sandbox_spl" 193 BUILDMAN: "^sandbox_spl$" 194 TEST_PY_TEST_SPEC: "test_ofplatdata" 195 <<: *buildman_and_testpy_dfn 196 197evb-ast2500 test.py: 198 tags: [ 'all' ] 199 variables: 200 TEST_PY_BD: "evb-ast2500" 201 TEST_PY_ID: "--id qemu" 202 BUILDMAN: "^evb-ast2500$" 203 <<: *buildman_and_testpy_dfn 204 205sandbox_flattree test.py: 206 tags: [ 'all' ] 207 variables: 208 TEST_PY_BD: "sandbox_flattree" 209 BUILDMAN: "^sandbox_flattree$" 210 <<: *buildman_and_testpy_dfn 211 212vexpress_ca15_tc2 test.py: 213 tags: [ 'all' ] 214 variables: 215 TEST_PY_BD: "vexpress_ca15_tc2" 216 TEST_PY_ID: "--id qemu" 217 BUILDMAN: "^vexpress_ca15_tc2$" 218 <<: *buildman_and_testpy_dfn 219 220vexpress_ca9x4 test.py: 221 tags: [ 'all' ] 222 variables: 223 TEST_PY_BD: "vexpress_ca9x4" 224 TEST_PY_ID: "--id qemu" 225 BUILDMAN: "^vexpress_ca9x4$" 226 <<: *buildman_and_testpy_dfn 227 228integratorcp_cm926ejs test.py: 229 tags: [ 'all' ] 230 variables: 231 TEST_PY_BD: "integratorcp_cm926ejs" 232 TEST_PY_TEST_SPEC: "not sleep" 233 TEST_PY_ID: "--id qemu" 234 BUILDMAN: "^integratorcp_cm926ejs$" 235 <<: *buildman_and_testpy_dfn 236 237qemu_arm test.py: 238 tags: [ 'all' ] 239 variables: 240 TEST_PY_BD: "qemu_arm" 241 TEST_PY_TEST_SPEC: "not sleep" 242 BUILDMAN: "^qemu_arm$" 243 <<: *buildman_and_testpy_dfn 244 245qemu_arm64 test.py: 246 tags: [ 'all' ] 247 variables: 248 TEST_PY_BD: "qemu_arm64" 249 TEST_PY_TEST_SPEC: "not sleep" 250 BUILDMAN: "^qemu_arm64$" 251 <<: *buildman_and_testpy_dfn 252 253qemu_mips test.py: 254 tags: [ 'all' ] 255 variables: 256 TEST_PY_BD: "qemu_mips" 257 TEST_PY_TEST_SPEC: "not sleep" 258 BUILDMAN: "^qemu_mips$" 259 <<: *buildman_and_testpy_dfn 260 261qemu_mipsel test.py: 262 tags: [ 'all' ] 263 variables: 264 TEST_PY_BD: "qemu_mipsel" 265 TEST_PY_TEST_SPEC: "not sleep" 266 BUILDMAN: "^qemu_mipsel$" 267 <<: *buildman_and_testpy_dfn 268 269qemu_mips64 test.py: 270 tags: [ 'all' ] 271 variables: 272 TEST_PY_BD: "qemu_mips64" 273 TEST_PY_TEST_SPEC: "not sleep" 274 BUILDMAN: "^qemu_mips64$" 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: "^qemu_mips64el$" 283 <<: *buildman_and_testpy_dfn 284 285qemu-ppce500 test.py: 286 tags: [ 'all' ] 287 variables: 288 TEST_PY_BD: "qemu-ppce500" 289 TEST_PY_TEST_SPEC: "not sleep" 290 BUILDMAN: "^qemu-ppce500$" 291 <<: *buildman_and_testpy_dfn 292 293qemu-riscv64 test.py: 294 tags: [ 'all' ] 295 variables: 296 TEST_PY_BD: "qemu-riscv64" 297 TEST_PY_TEST_SPEC: "not sleep" 298 BUILDMAN: "^qemu-riscv64$" 299 <<: *buildman_and_testpy_dfn 300 301qemu-x86 test.py: 302 tags: [ 'all' ] 303 variables: 304 TEST_PY_BD: "qemu-x86" 305 TEST_PY_TEST_SPEC: "not sleep" 306 BUILDMAN: "^qemu-x86$" 307 <<: *buildman_and_testpy_dfn 308 309qemu-x86_64 test.py: 310 tags: [ 'all' ] 311 variables: 312 TEST_PY_BD: "qemu-x86_64" 313 TEST_PY_TEST_SPEC: "not sleep" 314 BUILDMAN: "^qemu-x86_64$" 315 <<: *buildman_and_testpy_dfn 316 317xilinx_zynq_virt test.py: 318 tags: [ 'all' ] 319 variables: 320 TEST_PY_BD: "xilinx_zynq_virt" 321 TEST_PY_TEST_SPEC: "not sleep" 322 TEST_PY_ID: "--id qemu" 323 BUILDMAN: "^xilinx_zynq_virt$" 324 <<: *buildman_and_testpy_dfn 325 326xilinx_versal_virt test.py: 327 tags: [ 'all' ] 328 variables: 329 TEST_PY_BD: "xilinx_versal_virt" 330 TEST_PY_TEST_SPEC: "not sleep" 331 TEST_PY_ID: "--id qemu" 332 BUILDMAN: "^xilinx_versal_virt$" 333 <<: *buildman_and_testpy_dfn 334 335xtfpga test.py: 336 tags: [ 'all' ] 337 variables: 338 TEST_PY_BD: "xtfpga" 339 TEST_PY_TEST_SPEC: "not sleep" 340 TEST_PY_ID: "--id qemu" 341 BUILDMAN: "^xtfpga$" 342 <<: *buildman_and_testpy_dfn 343