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