extras: ci: update Android image and NDK (21)
[vlc.git] / extras / ci / gitlab-ci.yml
blob0f72e15d7312591023110e4480c14075d2cb2521
1 stages:
2     - build
4 default:
5     before_script:
6         - set -x
7         - export VLC_CONTRIB_SHA="$(extras/ci/get-contrib-sha.sh)"
8         - export VLC_PREBUILT_CONTRIBS_URL="https://artifacts.videolan.org/vlc/${CI_JOB_NAME##nightly-}/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2"
9         - if ! extras/ci/check-url.sh "$VLC_PREBUILT_CONTRIBS_URL"; then unset VLC_PREBUILT_CONTRIBS_URL; fi
10     after_script:
11         - export VLC_CONTRIB_SHA="$(extras/ci/get-contrib-sha.sh)"
12         - mv contrib/vlc-contrib-*.tar.bz2 contrib/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2 2>/dev/null || true
14 variables:
15     VLC_WIN32_IMAGE: registry.videolan.org/vlc-debian-win32:20200702161720
16     VLC_WIN64_IMAGE: registry.videolan.org/vlc-debian-win64:20200702144729
17     VLC_WIN_LLVM_IMAGE: registry.videolan.org/vlc-debian-llvm-mingw:20200703084018
18     VLC_UWP_LLVM_IMAGE: registry.videolan.org/vlc-debian-llvm-uwp:20200706065223
19     VLC_DEBIAN_IMAGE: registry.videolan.org/vlc-debian-unstable:20200229201904
20     VLC_ANDROID_IMAGE: registry.videolan.org/vlc-debian-android:20200529135226
21     VLC_SNAP_IMAGE: registry.videolan.org/vlc-ubuntu-bionic:20190627090437
22     VLC_RASPBIAN_IMAGE: registry.videolan.org/vlc-debian-raspbian:20200213203125
24 .variables-debian: &variables-debian
25         HOST_ARCH: x86_64
26         TRIPLET: $HOST_ARCH-linux-gnu
28 .variables-snap: &variables-snap
29         HOST_ARCH: x86_64
30         TRIPLET: $HOST_ARCH-linux-gnu
32 .variables-raspbian-arm: &variables-raspbian-arm
33         HOST_ARCH: arm
34         TRIPLET: $HOST_ARCH-linux-gnueabihf
36 .variables-win32: &variables-win32
37         SHORTARCH: win32
38         HOST_ARCH: i686
39         TRIPLET: $HOST_ARCH-w64-mingw32
41 .variables-win64: &variables-win64
42         SHORTARCH: win64
43         HOST_ARCH: x86_64
44         TRIPLET: $HOST_ARCH-w64-mingw32
46 .variables-macos: &variables-macos
47         VLC_PATH: /Users/videolanci/sandbox/bin
48         VLC_FORCE_KERNELVERSION: 18
49         HOST_ARCH: x86_64
50         TRIPLET: $HOST_ARCH-apple-darwin$VLC_FORCE_KERNELVERSION
52 .variables-ios-arm64: &variables-ios-arm64
53         VLC_PATH: /Users/videolanci/sandbox/bin
54         HOST_ARCH: arm64
55         TRIPLET: $HOST_ARCH-apple-iphoneos
56         SDKNAME: iphoneos
58 .variables-ios-armv7: &variables-ios-armv7
59         VLC_PATH: /Users/videolanci/sandbox/bin
60         HOST_ARCH: armv7
61         TRIPLET: $HOST_ARCH-apple-iphoneos
62         SDKNAME: iphoneos
64 .variables-ios-simulator-x86_64: &variables-ios-simulator-x86_64
65         VLC_PATH: /Users/videolanci/sandbox/bin
66         HOST_ARCH: x86_64
67         TRIPLET: $HOST_ARCH-apple-iphonesimulator
68         SDKNAME: iphonesimulator
70 .variables-tvos-arm64: &variables-tvos-arm64
71         VLC_PATH: /Users/videolanci/sandbox/bin
72         HOST_ARCH: arm64
73         TRIPLET: $HOST_ARCH-apple-appletvos
74         SDKNAME: appletvos
76 .variables-android-arm: &variables-android-arm
77         ANDROID_ARCH: arm
78         TRIPLET: arm-linux-androideabi
80 .variables-android-arm64: &variables-android-arm64
81         ANDROID_ARCH: arm64
82         TRIPLET: aarch64-linux-android
84 .variables-android-x86: &variables-android-x86
85         ANDROID_ARCH: x86
86         TRIPLET: i686-linux-android
88 .variables-android-x86_64: &variables-android-x86_64
89         ANDROID_ARCH: x86_64
90         TRIPLET: x86_64-linux-android
92 # Common rules
93 .base-template:
94     stage: build
95     only:
96         refs:
97             - merge_requests
98             - master@videolan/vlc
99     except:
100         - schedules
101     artifacts:
102         paths:
103             - contrib/vlc-contrib-${TRIPLET}-*.tar.bz2
105 # Common rules for jobs using docker
106 .docker-template:
107     extends: .base-template
108     tags:
109         - docker
110         - amd64
113 # Windows
115 .win-common:
116     extends: .docker-template
117     script: |
118         if [ "${CI_JOB_NAME:0:8}" = "nightly-" ]; then
119             NIGHTLY_EXTRA_BUILD_FLAGS="-i n -l"
120         fi
121         if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
122             echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
123             extras/package/win32/build.sh -p -a $HOST_ARCH $NIGHTLY_EXTRA_BUILD_FLAGS $LIBVLC_EXTRA_BUILD_FLAGS $UWP_EXTRA_BUILD_FLAGS
124         else
125             extras/package/win32/build.sh -c -a $HOST_ARCH $NIGHTLY_EXTRA_BUILD_FLAGS $LIBVLC_EXTRA_BUILD_FLAGS $UWP_EXTRA_BUILD_FLAGS
126         fi
128 win32:
129     extends: .win-common
130     image:
131         name: $VLC_WIN32_IMAGE
132     variables: *variables-win32
134 win64:
135     extends: .win-common
136     image:
137         name: $VLC_WIN64_IMAGE
138     variables: *variables-win64
140 win64-llvm:
141     extends: .win-common
142     image:
143         name: $VLC_WIN_LLVM_IMAGE
144     variables:
145         <<: *variables-win64
146         WINE_SDK_PATH: /usr/include/wine/wine/windows/
148 uwp64-libvlc-llvm:
149     extends: .win-common
150     image:
151         name: $VLC_UWP_LLVM_IMAGE
152     variables:
153         <<: *variables-win64
154         LIBVLC_EXTRA_BUILD_FLAGS: -z
155         UWP_EXTRA_BUILD_FLAGS: -u -w -x
157 .nightly-win-common:
158     extends: .win-common
159     only:
160         - schedules
161     except:
162     after_script:
163         - mkdir nightlies
164         - for ext in 7z zip; do mv ${SHORTARCH}/vlc-*-dev-*-debug.${ext} nightlies/$(basename ${SHORTARCH}/vlc-*-dev-*-debug.${ext} | sed "s/\.${ext}/-${CI_COMMIT_SHORT_SHA}\.${ext}/"); done
165         - for ext in exe msi 7z zip; do mv ${SHORTARCH}/vlc-*-dev-*.${ext} nightlies/$(basename ${SHORTARCH}/vlc-*-dev-*.${ext} | sed "s/\.${ext}/-${CI_COMMIT_SHORT_SHA}\.${ext}/"); done
166         - cd nightlies && find . -maxdepth 1 -type f -not -name SHA512SUM | xargs shasum -a 512 | tee SHA512SUM
167     artifacts:
168         paths:
169             - nightlies/*
171 nightly-win32:
172     extends: .nightly-win-common
173     image:
174         name: $VLC_WIN32_IMAGE
175     variables: *variables-win32
177 nightly-win64:
178     extends: .nightly-win-common
179     image:
180         name: $VLC_WIN64_IMAGE
181     variables: *variables-win64
183 nightly-win64-llvm:
184     extends: .nightly-win-common
185     image:
186         name: $VLC_WIN_LLVM_IMAGE
187     variables:
188         <<: *variables-win64
189         WINE_SDK_PATH: /usr/include/wine/wine/windows/
192 # Debian
194 debian:
195     extends: .docker-template
196     image:
197         name: $VLC_DEBIAN_IMAGE
198     script: |
199         export NCPU=$(getconf _NPROCESSORS_ONLN)
201         # Build tools
202         ( cd extras/tools && ./bootstrap && make -j$NCPU --output-sync=recurse )
203         export PATH="$(pwd)/extras/tools/build/bin:$PATH"
205         # Build contribs
206         mkdir -p contrib/contrib-$TRIPLET && cd contrib/contrib-$TRIPLET
207         ../bootstrap
208         if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
209             echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
210             make prebuilt PREBUILT_URL="${VLC_PREBUILT_CONTRIBS_URL}"
211         else
212             make -j$NCPU --output-sync=recurse fetch
213             make -j$NCPU --output-sync=recurse
214             make package
215         fi
216         cd ../../
218         # Build VLC
219         ./bootstrap
220         ./configure
221         make -j$NCPU
223         # Run tests
224         VLC_TEST_TIMEOUT=60 sh -x ./test/make_check_wrapper.sh -j4
225         if [ "${CI_JOB_NAME:0:8}" = "nightly-" ]; then
226             export XZ_OPT="-T 0"
227             make -j$NCPU distcheck
228         fi
229     variables: *variables-debian
231 nightly-debian:
232     extends: debian
233     only:
234         - schedules
235     except:
236     after_script:
237     artifacts:
240 # Snap builds
242 .snap-common:
243     extends: .docker-template
244     image:
245         name: $VLC_SNAP_IMAGE
246     script: |
247             cd extras/package/snap
248             make -f package.mak snap
249     after_script:
250         - export VLC_CONTRIB_SHA="$(extras/ci/get-contrib-sha.sh)"
251         - mv extras/package/snap/parts/vlc/build/contrib/vlc-contrib-*.tar.bz2 contrib/vlc-contrib-${TRIPLET}-${VLC_CONTRIB_SHA}.tar.bz2 2>/dev/null || true
252     variables: *variables-snap
254 snap:
255     extends: .snap-common
257 nightly-snap:
258     extends: .snap-common
259     only:
260         - schedules
261     except:
262     after_script:
263         - if [ "$CI_PROJECT_NAMESPACE" = "videolan" ]; then /bin/true; else exit 0; fi
264         - mkdir nightlies
265         - mv extras/package/snap/vlc_*.snap nightlies/
266         - echo $SNAP_LOGIN | base64 --decode | snapcraft login --with -
267         - snapcraft push nightlies/vlc_*.snap --release edge
268         - snapcraft logout
269         - cd nightlies && find . -maxdepth 1 -type f -not -name SHA512SUM | xargs shasum -a 512 | tee SHA512SUM
270     artifacts:
271         paths:
272            - nightlies/*
275 # Raspbian
277 raspbian-arm:
278     extends: .docker-template
279     image:
280         name: $VLC_RASPBIAN_IMAGE
281     script: |
282         if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
283             echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
284             extras/package/raspberry/build.sh -p -x -a $HOST_ARCH
285         else
286             extras/package/raspberry/build.sh -c -x -a $HOST_ARCH
287         fi
288     variables: *variables-raspbian-arm
291 # macOS
293 macos:
294     extends: .base-template
295     tags:
296         - macos
297     script: |
298         if [ "${CI_JOB_NAME:0:8}" = "nightly-" ]; then
299             NIGHTLY_EXTRA_BUILD_FLAGS="-i n"
300         fi
301         if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
302             echo "Building using prebuilt contribs at $VLC_PREBUILT_CONTRIBS_URL"
303             mkdir -p contrib/contrib-$TRIPLET && cd contrib/contrib-$TRIPLET
304             curl -f -L ${VLC_PREBUILT_CONTRIBS_URL} -o vlc-contrib-$TRIPLET-latest.tar.bz2
305             cd ../../
306         else
307             EXTRA_BUILD_FLAGS="-c -p"
308         fi
309         mkdir build && cd build
310         ../extras/package/macosx/build.sh $EXTRA_BUILD_FLAGS $NIGHTLY_EXTRA_BUILD_FLAGS
311     variables: *variables-macos
313 nightly-macos:
314     extends: macos
315     only:
316         - schedules
317     except:
318     after_script:
319         - mkdir nightlies
320         - mv build/vlc-*.dmg nightlies/$(basename build/vlc-*.dmg | sed "s/\.dmg/-${CI_COMMIT_SHORT_SHA}\.dmg/")
321         - mv build/vlc-*.tar.gz nightlies/$(basename build/vlc-*.tar.gz | sed "s/\.tar\.gz/-${CI_COMMIT_SHORT_SHA}\.tar\.gz/")
322         - cd nightlies && find . -maxdepth 1 -type f -not -name SHA512SUM | xargs shasum -a 512 | tee SHA512SUM
323     artifacts:
324         paths:
325             - nightlies/*
328 # iOS
330 .apple-os-common:
331     extends: .base-template
332     tags:
333         - macos
334     script: |
335         mkdir build && cd build
336         if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
337             ../extras/package/apple/build.sh --sdk=$SDKNAME --arch=$HOST_ARCH \
338                 --with-prebuilt-contribs
339         else
340             ../extras/package/apple/build.sh --sdk=$SDKNAME --arch=$HOST_ARCH --package-contribs
341         fi
343 ios-arm64:
344     extends: .apple-os-common
345     variables: *variables-ios-arm64
347 ios-armv7:
348     extends: .apple-os-common
349     variables: *variables-ios-armv7
351 ios-simulator-x86_64:
352     extends: .apple-os-common
353     variables: *variables-ios-simulator-x86_64
355 tvos-arm64:
356     extends: .apple-os-common
357     variables: *variables-tvos-arm64
360 # Android
362 .android-common:
363     extends: .docker-template
364     image:
365         name: $VLC_ANDROID_IMAGE
366     script: |
367         wget https://code.videolan.org/videolan/vlc-android/raw/7d2b0fd2ba332d5e3c83415b67dbe2fe5748f346/buildsystem/compile-libvlc.sh
368         if [ -n "$VLC_PREBUILT_CONTRIBS_URL" ]; then
369             /bin/sh ./compile-libvlc.sh -a $ANDROID_ARCH --with-prebuilt-contribs
370         else
371             /bin/sh ./compile-libvlc.sh -a $ANDROID_ARCH --package-contribs
372         fi
374 android-arm:
375     extends: .android-common
376     variables: *variables-android-arm
378 android-arm64:
379     extends: .android-common
380     variables: *variables-android-arm64
382 android-x86:
383     extends: .android-common
384     variables: *variables-android-x86
386 android-x86_64:
387     extends: .android-common
388     variables: *variables-android-x86_64
391 # VLC Documentation
393 pages:
394     extends: .docker-template
395     image:
396         name: $VLC_DEBIAN_IMAGE
397     script:
398         - ./bootstrap
399         - ./configure
400         - make doc
401         - mv doc/doxygen/html public
402     artifacts:
403         paths:
404             - public
405     only:
406         - schedules
407     except: