xref: /qemu/.gitlab-ci.yml (revision abff1abf)
1# Currently we have two build stages after our containers are built:
2#  - build (for traditional build and test or first stage build)
3#  - test (for test stages, using build artefacts from a build stage)
4stages:
5  - containers
6  - containers-layer2
7  - containers-layer3
8  - build
9  - test
10
11# We assume GitLab has it's own caching set up for RPM/APT repositories so we
12# just take care of avocado assets here.
13cache:
14  paths:
15    - $HOME/avocado/data/cache
16
17include:
18  - local: '/.gitlab-ci.d/edk2.yml'
19  - local: '/.gitlab-ci.d/opensbi.yml'
20  - local: '/.gitlab-ci.d/containers.yml'
21
22.native_build_job_template: &native_build_job_definition
23  stage: build
24  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
25  before_script:
26    - JOBS=$(expr $(nproc) + 1)
27  script:
28    - mkdir build
29    - cd build
30    - if test -n "$TARGETS";
31      then
32        ../configure --enable-werror $CONFIGURE_ARGS --target-list="$TARGETS" ;
33      else
34        ../configure --enable-werror $CONFIGURE_ARGS ;
35      fi
36    - make -j"$JOBS"
37    - if test -n "$MAKE_CHECK_ARGS";
38      then
39        make -j"$JOBS" $MAKE_CHECK_ARGS ;
40      fi
41
42.native_test_job_template: &native_test_job_definition
43  stage: test
44  image: $CI_REGISTRY_IMAGE/qemu/$IMAGE:latest
45  script:
46    - cd build
47    - find . -type f -exec touch {} +
48    - make $MAKE_CHECK_ARGS
49
50.acceptance_template: &acceptance_definition
51  cache:
52    key: "${CI_JOB_NAME}-cache"
53    paths:
54      - ${CI_PROJECT_DIR}/avocado-cache
55    policy: pull-push
56  before_script:
57    - mkdir -p ~/.config/avocado
58    - echo "[datadir.paths]" > ~/.config/avocado/avocado.conf
59    - echo "cache_dirs = ['${CI_PROJECT_DIR}/avocado-cache']"
60           >> ~/.config/avocado/avocado.conf
61    - if [ -d ${CI_PROJECT_DIR}/avocado-cache ]; then
62        du -chs ${CI_PROJECT_DIR}/avocado-cache ;
63      fi
64  after_script:
65    - cd build
66    - python3 -c 'import json; r = json.load(open("tests/results/latest/results.json")); [print(t["logfile"]) for t in r["tests"] if t["status"] not in ("PASS", "SKIP")]' | xargs cat
67    - du -chs ${CI_PROJECT_DIR}/avocado-cache
68
69build-system-ubuntu:
70  <<: *native_build_job_definition
71  variables:
72    IMAGE: ubuntu2004
73    TARGETS: aarch64-softmmu alpha-softmmu cris-softmmu hppa-softmmu
74      moxie-softmmu microblazeel-softmmu mips64el-softmmu
75    MAKE_CHECK_ARGS: check-build
76  artifacts:
77    paths:
78      - build
79
80check-system-ubuntu:
81  <<: *native_test_job_definition
82  needs:
83    - job: build-system-ubuntu
84      artifacts: true
85  variables:
86    IMAGE: ubuntu2004
87    MAKE_CHECK_ARGS: check
88
89acceptance-system-ubuntu:
90  <<: *native_test_job_definition
91  needs:
92    - job: build-system-ubuntu
93      artifacts: true
94  variables:
95    IMAGE: ubuntu2004
96    MAKE_CHECK_ARGS: check-acceptance
97  <<: *acceptance_definition
98
99build-system-debian:
100  <<: *native_build_job_definition
101  variables:
102    IMAGE: debian-amd64
103    TARGETS: arm-softmmu avr-softmmu i386-softmmu mipsel-softmmu
104      riscv64-softmmu sh4eb-softmmu sparc-softmmu xtensaeb-softmmu
105    MAKE_CHECK_ARGS: check-build
106  artifacts:
107    paths:
108      - build
109
110check-system-debian:
111  <<: *native_test_job_definition
112  needs:
113    - job: build-system-debian
114      artifacts: true
115  variables:
116    IMAGE: debian-amd64
117    MAKE_CHECK_ARGS: check
118
119acceptance-system-debian:
120  <<: *native_test_job_definition
121  needs:
122    - job: build-system-debian
123      artifacts: true
124  variables:
125    IMAGE: debian-amd64
126    MAKE_CHECK_ARGS: check-acceptance
127  <<: *acceptance_definition
128
129build-system-fedora:
130  <<: *native_build_job_definition
131  variables:
132    IMAGE: fedora
133    TARGETS: tricore-softmmu unicore32-softmmu microblaze-softmmu mips-softmmu
134      xtensa-softmmu m68k-softmmu riscv32-softmmu ppc-softmmu sparc64-softmmu
135    MAKE_CHECK_ARGS: check-build
136  artifacts:
137    paths:
138      - build
139
140check-system-fedora:
141  <<: *native_test_job_definition
142  needs:
143    - job: build-system-fedora
144      artifacts: true
145  variables:
146    IMAGE: fedora
147    MAKE_CHECK_ARGS: check
148
149acceptance-system-fedora:
150  <<: *native_test_job_definition
151  needs:
152    - job: build-system-fedora
153      artifacts: true
154  variables:
155    IMAGE: fedora
156    MAKE_CHECK_ARGS: check-acceptance
157  <<: *acceptance_definition
158
159build-system-centos:
160  <<: *native_build_job_definition
161  variables:
162    IMAGE: centos8
163    TARGETS: ppc64-softmmu lm32-softmmu or1k-softmmu s390x-softmmu
164      x86_64-softmmu rx-softmmu sh4-softmmu nios2-softmmu
165    MAKE_CHECK_ARGS: check-build
166  artifacts:
167    paths:
168      - build
169
170check-system-centos:
171  <<: *native_test_job_definition
172  needs:
173    - job: build-system-centos
174      artifacts: true
175  variables:
176    IMAGE: centos8
177    MAKE_CHECK_ARGS: check
178
179acceptance-system-centos:
180  <<: *native_test_job_definition
181  needs:
182    - job: build-system-centos
183      artifacts: true
184  variables:
185    IMAGE: centos8
186    MAKE_CHECK_ARGS: check-acceptance
187  <<: *acceptance_definition
188
189build-disabled:
190  <<: *native_build_job_definition
191  variables:
192    IMAGE: fedora
193    CONFIGURE_ARGS: --disable-rdma --disable-slirp --disable-curl
194      --disable-capstone --disable-live-block-migration --disable-glusterfs
195      --disable-replication --disable-coroutine-pool --disable-smartcard
196      --disable-guest-agent --disable-curses --disable-libxml2 --disable-tpm
197      --disable-qom-cast-debug --disable-spice --disable-vhost-vsock
198      --disable-vhost-net --disable-vhost-crypto --disable-vhost-user
199    TARGETS: i386-softmmu ppc64-softmmu mips64-softmmu i386-linux-user
200    MAKE_CHECK_ARGS: check-qtest SPEED=slow
201
202build-tcg-disabled:
203  <<: *native_build_job_definition
204  variables:
205    IMAGE: centos8
206  script:
207    - mkdir build
208    - cd build
209    - ../configure --disable-tcg --audio-drv-list=""
210    - make -j"$JOBS"
211    - make check-unit
212    - make check-qapi-schema
213    - cd tests/qemu-iotests/
214    - ./check -raw 001 002 003 004 005 008 009 010 011 012 021 025 032 033 048
215            052 063 077 086 101 104 106 113 148 150 151 152 157 159 160 163
216            170 171 183 184 192 194 197 208 215 221 222 226 227 236 253 277
217    - ./check -qcow2 028 051 056 057 058 065 067 068 082 085 091 095 096 102 122
218            124 132 139 142 144 145 151 152 155 157 165 194 196 197 200 202
219            208 209 215 216 218 222 227 234 246 247 248 250 254 255 257 258
220            260 261 262 263 264 270 272 273 277 279
221
222build-user:
223  <<: *native_build_job_definition
224  variables:
225    IMAGE: debian-all-test-cross
226    CONFIGURE_ARGS: --disable-tools --disable-system
227    MAKE_CHECK_ARGS: check-tcg
228
229build-clang:
230  <<: *native_build_job_definition
231  variables:
232    IMAGE: fedora
233    CONFIGURE_ARGS: --cc=clang --cxx=clang++
234    TARGETS: alpha-softmmu arm-softmmu m68k-softmmu mips64-softmmu
235      ppc-softmmu s390x-softmmu arm-linux-user
236    MAKE_CHECK_ARGS: check
237
238build-oss-fuzz:
239  <<: *native_build_job_definition
240  variables:
241    IMAGE: fedora
242  script:
243    - mkdir build-oss-fuzz
244    - CC="clang" CXX="clang++" CFLAGS="-fsanitize=address"
245      ./scripts/oss-fuzz/build.sh
246    - for fuzzer in $(find ./build-oss-fuzz/DEST_DIR/ -executable -type f
247                      | grep -v slirp); do
248        grep "LLVMFuzzerTestOneInput" ${fuzzer} > /dev/null 2>&1 || continue ;
249        echo Testing ${fuzzer} ... ;
250        ASAN_OPTIONS="fast_unwind_on_malloc=0"
251         "${fuzzer}" -runs=1000 -seed=1 || exit 1 ;
252      done
253
254build-tci:
255  <<: *native_build_job_definition
256  variables:
257    IMAGE: fedora
258  script:
259    - TARGETS="aarch64 alpha arm hppa m68k microblaze moxie ppc64 s390x x86_64"
260    - mkdir build
261    - cd build
262    - ../configure --enable-tcg-interpreter
263        --target-list="$(for tg in $TARGETS; do echo -n ${tg}'-softmmu '; done)"
264    - make -j"$JOBS"
265    - make run-tcg-tests-x86_64-softmmu
266    - make tests/qtest/boot-serial-test tests/qtest/cdrom-test tests/qtest/pxe-test
267    - for tg in $TARGETS ; do
268        export QTEST_QEMU_BINARY="${tg}-softmmu/qemu-system-${tg}" ;
269        ./tests/qtest/boot-serial-test || exit 1 ;
270        ./tests/qtest/cdrom-test || exit 1 ;
271      done
272    - QTEST_QEMU_BINARY="x86_64-softmmu/qemu-system-x86_64" ./tests/qtest/pxe-test
273    - QTEST_QEMU_BINARY="s390x-softmmu/qemu-system-s390x" ./tests/qtest/pxe-test -m slow
274