ci_template: refresh the docker images used for the CI
[platform/upstream/gstreamer.git] / gitlab / ci_template.yml
1 stages:
2   - 'preparation'
3   - 'pre-build'
4   - 'build'
5   - 'test'
6   # Use the resulting binaries
7   - 'integrate'
8
9 variables:
10   ANDROID_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/android:2019-10-23-793480'
11   CERBERO_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/cerbero-fedora:2019-10-23-793479'
12   FEDORA_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/fedora:2019-10-23-793478'
13   INDENT_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/gst-indent:6f7e01e1e30a73efa880acdc8e911f1f20c58dbb'
14   MANIFEST_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/build-manifest:2019-10-23-793475'
15   WINDOWS_IMAGE: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:v6'
16
17   # Branch to track for modules that have no ref specified in the manifest
18   GST_UPSTREAM_BRANCH: 'master'
19   ORC_UPSTREAM_BRANCH: 'master'
20
21   GIT_STRATEGY: none
22   MESON_BUILDTYPE_ARGS: --default-library=both
23   DEFAULT_MESON_ARGS: >
24     -Dpython=enabled
25     -Dlibav=enabled
26     -Dugly=enabled
27     -Dbad=enabled
28     -Ddevtools=enabled
29     -Dges=enabled
30     -Drtsp_server=enabled
31     -Dvaapi=enabled
32     -Dsharp=disabled
33
34   DEFAULT_CERBERO_ARGS: >
35     --variants werror
36     --timestamps
37
38 .global_retry_policy:
39   retry:
40     max: 2
41     when:
42       - 'runner_system_failure'
43       - 'api_failure'
44
45 manifest:
46   image: $MANIFEST_IMAGE
47   extends:
48     - '.global_retry_policy'
49   stage: 'preparation'
50   script:
51     - cd /gst-ci
52     - gitlab/build_manifest.py --self-update
53     - gitlab/build_manifest.py ${CI_PROJECT_DIR}/manifest.xml
54     - cat ${CI_PROJECT_DIR}/manifest.xml
55   artifacts:
56     expire_in: "7 days"
57     paths:
58       - "manifest.xml"
59
60 gst indent:
61   image: $INDENT_IMAGE
62   extends:
63     - '.global_retry_policy'
64   stage: 'preparation'
65   variables:
66     GIT_STRATEGY: 'fetch'
67   script:
68     # man indent. grep RETURN VALUE, grab a beer on my behalf...
69     - indent --version || true
70     - curl -o gst-indent https://gitlab.freedesktop.org/gstreamer/gstreamer/raw/${GST_UPSTREAM_BRANCH}/tools/gst-indent
71     - chmod +x gst-indent
72     - find . -name '*.c' -exec ./gst-indent {} +
73     - |
74       if git diff --quiet; then
75           echo "Code is properly formatted"
76       else
77           git diff --color=always
78           echo 'style diverges, please run gst-indent first'
79           exit 1
80       fi
81   except:
82     variables:
83       # No point on trying to format C files in those repositories
84       - $CI_PROJECT_NAME == "gstreamer-sharp"
85       - $CI_PROJECT_NAME == "gst-integration-testsuites"
86       - $CI_PROJECT_NAME == "cerbero"
87       - $CI_PROJECT_NAME == "gst-docs"
88
89 .build:
90   stage: 'build'
91   extends:
92     - '.global_retry_policy'
93   needs:
94     - "manifest"
95   dependencies:
96     - "manifest"
97   variables:
98     CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
99     CCACHE_DIR: "${CI_PROJECT_DIR}/ccache"
100     MESON_ARGS: "${DEFAULT_MESON_ARGS} ${MESON_BUILDTYPE_ARGS} --werror"
101
102   script:
103     - ccache -z
104     - curl -o clone_manifest_ref.py https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/clone_manifest_ref.py
105     - chmod +x clone_manifest_ref.py
106     - ./clone_manifest_ref.py --manifest manifest.xml --project gst-build --destination gst-build
107     - cd gst-build/
108     # only copy immediate directories. We don't want to modify .wrap files
109     - find /gst-build/subprojects/ -mindepth 1 -maxdepth 1 -type d -exec cp -r \{\} subprojects/ \;
110     - ./git-update --no-interaction --manifest="${CI_PROJECT_DIR}/manifest.xml"
111     - meson build/ $MESON_ARGS
112     - ninja -C build/
113     - ccache -s
114   after_script:
115     - cd gst-build/
116     # Clean the artifacts packages to avoid copying "useless" build products.
117     - test -d build && find build -name '*.[ao]' -delete
118     # Clean the .git repos since we won't need them anymore
119     - rm -rf subprojects/*/.git/
120     - rm -rf build/subprojects/*/.git/
121   cache:
122     key: "${CI_JOB_NAME}"
123     paths:
124       - "${CCACHE_DIR}"
125   except:
126     variables:
127       - $CI_PROJECT_NAME == "cerbero"
128
129 build fedora x86_64:
130   extends: '.build'
131   stage: 'build'
132   image: $FEDORA_IMAGE
133   variables:
134     MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dsharp=enabled -Domx=enabled -Dgst-omx:target=generic -Ddoc=enabled ${MESON_BUILDTYPE_ARGS} --werror"
135   artifacts:
136     expire_in: '5 days'
137     when: always
138     paths:
139       - "manifest.xml"
140       - "gst-build/"
141   except:
142     variables:
143       - $CI_PROJECT_NAME == "cerbero"
144
145 build nodebug fedora x86_64:
146   extends: '.build'
147   stage: 'build'
148   image: $FEDORA_IMAGE
149   variables:
150     MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dsharp=enabled -Dgstreamer:gst_debug=false -Domx=enabled -Dgst-omx:target=generic ${MESON_BUILDTYPE_ARGS} --werror"
151   except:
152     variables:
153       - $CI_PROJECT_NAME == "cerbero"
154       - $CI_PROJECT_NAME == "gst-docs"
155
156 build static fedora x86_64:
157   extends: 'build fedora x86_64'
158   variables:
159     MESON_BUILDTYPE_ARGS: "--default-library=static -Dintrospection=disabled -Ddoc=disabled"
160   except:
161     variables:
162       - $CI_PROJECT_NAME == "cerbero"
163       - $CI_PROJECT_NAME == "gst-docs"
164
165 build static nodebug fedora x86_64:
166   extends: 'build nodebug fedora x86_64'
167   variables:
168     MESON_BUILDTYPE_ARGS: "--default-library=static -Dintrospection=disabled -Ddoc=disabled"
169   except:
170     variables:
171       - $CI_PROJECT_NAME == "cerbero"
172       - $CI_PROJECT_NAME == "gst-docs"
173
174 build clang fedora x86_64:
175   extends: 'build fedora x86_64'
176   variables:
177     CC: 'ccache clang'
178     CXX: 'ccache clang++'
179   except:
180     variables:
181       - $CI_PROJECT_NAME == "cerbero"
182       - $CI_PROJECT_NAME == "gst-docs"
183
184 .test:
185   stage: 'test'
186   extends:
187     - '.global_retry_policy'
188   variables:
189     # Disable colored output to avoid weird rendering issues
190     GST_DEBUG_NO_COLOR: "true"
191     CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/validate-logs/"
192     GST_VALIDATE_LAUNCHER_FORCE_COLORS: "true"
193     width: 100
194     COLUMNS: 100
195   script:
196     - cd gst-build/
197     - echo "-> Running ${TEST_SUITE}"
198     - >
199       ./gst-uninstalled.py
200       gst-validate-launcher ${TEST_SUITE}
201       --dump-on-failure
202       --mute
203       --shuffle
204       --no-display
205       --meson-no-rebuild
206       --fail-on-testlist-change
207       -l "${CI_PROJECT_DIR}/validate-logs/"
208       --xunit-file "${CI_PROJECT_DIR}/validate-logs/xunit.xml"
209       ${EXTRA_VALIDATE_ARGS}
210   artifacts:
211     expire_in: '14 days'
212     when: always
213     paths:
214       - 'gst-build/build/meson-logs/'
215       - 'validate-logs'
216     reports:
217       junit:
218         - "validate-logs/*.xml"
219   # We disable the .build above, which this job usually depends upon for cerbero
220   except:
221     variables:
222       - $CI_PROJECT_NAME == "cerbero"
223       - $CI_PROJECT_NAME == "gst-examples"
224       - $CI_PROJECT_NAME == "gst-docs"
225
226 .test fedora x86_64:
227   image: $FEDORA_IMAGE
228   extends: '.test'
229   needs:
230     - 'build fedora x86_64'
231   dependencies:
232     - build fedora x86_64
233
234 check fedora:
235   extends: '.test fedora x86_64'
236   variables:
237     TEST_SUITE: "check.gst*"
238   except:
239     variables:
240       - $CI_PROJECT_NAME == "gst-integration-testsuites"
241       - $CI_PROJECT_NAME == "cerbero"
242       - $CI_PROJECT_NAME == "gst-examples"
243       - $CI_PROJECT_NAME == "gst-omx"
244       - $CI_PROJECT_NAME == "gst-docs"
245       - $CI_PROJECT_NAME == "gstreamer-vaapi"
246
247 integration testsuites fedora:
248   extends: '.test fedora x86_64'
249   before_script:
250     - rm -f gst-build/build/subprojects/gstreamer-vaapi/gst/vaapi/libgstvaapi.so
251   variables:
252     EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures --check-bugs"
253     TEST_SUITE: "validate ges"
254   except:
255     variables:
256       - $CI_PROJECT_NAME == "gst-omx"
257       - $CI_PROJECT_NAME == "gstreamer-vaapi"
258       - $CI_PROJECT_NAME == "cerbero"
259       - $CI_PROJECT_NAME == "gst-docs"
260
261 # Valgrind
262 .valgrind fedora x86_64:
263   extends: '.test fedora x86_64'
264   stage: 'test'
265   variables:
266     EXTRA_VALIDATE_ARGS: "--valgrind"
267   # Some suppression files are missing a newline at the end which messes things
268   # up when concatenating them. awk will add missing newlines (unlike cat)
269   except:
270     variables:
271       - $CI_PROJECT_NAMESPACE == 'gstreamer'
272
273 valgrind core:
274   extends: '.valgrind fedora x86_64'
275   variables:
276     TEST_SUITE: "check.gstreamer\\..*"
277   only:
278     variables:
279       - $CI_PROJECT_NAME =~ /^(gstreamer|gst-ci)$/
280
281 valgrind base:
282   extends: '.valgrind fedora x86_64'
283   variables:
284     TEST_SUITE: "check.gst-plugins-base\\..*"
285   only:
286     variables:
287       - $CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-ci)$/
288
289 valgrind good:
290   extends: '.valgrind fedora x86_64'
291   variables:
292     TEST_SUITE: "check.gst-plugins-good\\..*"
293   only:
294     variables:
295       - $CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-good|gst-ci)$/
296
297 valgrind ugly:
298   extends: '.valgrind fedora x86_64'
299   variables:
300     TEST_SUITE: "check.gst-plugins-ugly\\..*"
301   only:
302     variables:
303       - $CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-ugly|gst-ci)$/
304
305 valgrind bad:
306   extends: '.valgrind fedora x86_64'
307   variables:
308     TEST_SUITE: "check.gst-plugins-bad\\..*"
309   only:
310     variables:
311       - $CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-good|gst-plugins-bad|gst-ci)$/
312
313 valgrind ges:
314   extends: '.valgrind fedora x86_64'
315   variables:
316     TEST_SUITE: "check.gst-editing-services\\..*"
317   only:
318     variables:
319       - $CI_PROJECT_NAME =~ /^(gstreamer|gst-plugins-base|gst-plugins-good|gst-editing-services|gst-ci)$/
320
321 # Template for Cerbero GStreamer Build
322 #
323 # Parameters:
324 # CONFIG: The name of the configuration file to use
325 # ARCH: The cerbero <os>_<cpu> (used in cache key)
326 #
327 # Produces runtime and devel tarball packages for linux/android or .pkg for macos
328 .cerbero:
329   stage: "build"
330   image: $CERBERO_IMAGE
331   extends:
332     - '.global_retry_policy'
333   needs:
334     - "manifest"
335   dependencies:
336     - "manifest"
337   variables:
338     CCACHE_BASEDIR: "${CI_PROJECT_DIR}"
339     CCACHE_DIR: "${CI_PROJECT_DIR}/ccache"
340     CCACHE_MAXSIZE: "1.7G"
341     CERBERO_HOME: "cerbero-build"
342     CERBERO_SOURCES: "cerbero-sources"
343     CERBERO_DEPS: "cerbero-deps.tar.gz"
344     CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS}"
345     CERBERO: "./cerbero-uninstalled -c config/${CONFIG} -c localconf.cbc -m manifest.xml"
346     CERBERO_PACKAGE_ARGS: "-t"
347     HAVE_CCACHE: "yes"
348     # used by macos packages as we only ever install to a fixed directory
349     CERBERO_OVERRIDDEN_DIST_DIR: ""
350   before_script:
351     # FIXME Wrong namespace
352     # Workaround build-tools having hardcoded internal path
353     - pwd
354     - mkdir -p ../../gstreamer
355     - ln -sf $(pwd) ../../gstreamer/cerbero
356     - mkdir -p ../../${CI_PROJECT_NAMESPACE}
357     - ln -sf $(pwd) ../../${CI_PROJECT_NAMESPACE}/cerbero
358     - rsync -aH /cerbero/ .
359     - test -f ${CERBERO_DEPS} && tar -C ${CERBERO_HOME} -xf ${CERBERO_DEPS}
360     - echo "home_dir = \"$(pwd)/${CERBERO_HOME}\"" >> localconf.cbc
361     - echo "local_sources = \"$(pwd)/${CERBERO_SOURCES}\"" >> localconf.cbc
362     - ./cerbero-uninstalled --self-update manifest.xml
363   script:
364     - test "x${HAVE_CCACHE}" = "xyes" && ccache -z
365     - $CERBERO $CERBERO_ARGS show-config
366     - $CERBERO $CERBERO_ARGS fetch-bootstrap --build-tools-only
367     - $CERBERO $CERBERO_ARGS fetch-package --deps gstreamer-1.0
368     - $CERBERO $CERBERO_ARGS fetch-cache --branch ${GST_UPSTREAM_BRANCH}
369     - test "x${CERBERO_OVERRIDDEN_DIST_DIR}" != "x"
370           && test -d ${CERBERO_HOME}/dist/${ARCH}
371           && mkdir -p ${CERBERO_OVERRIDDEN_DIST_DIR}
372           && rsync -aH ${CERBERO_HOME}/dist/${ARCH}/ ${CERBERO_OVERRIDDEN_DIST_DIR}
373     - $CERBERO $CERBERO_ARGS bootstrap --offline --build-tools-only
374     - $CERBERO $CERBERO_ARGS package --offline ${CERBERO_PACKAGE_ARGS} -o $(pwd) gstreamer-1.0
375     - test "x${HAVE_CCACHE}" = "xyes" && ccache -s || true    # eat the return value from the failing test
376   except:
377     variables:
378       - $CI_PROJECT_NAME == "gst-build"
379       - $CI_PROJECT_NAME == "gst-docs"
380   cache:
381     key: "${CI_JOB_NAME}"
382     paths:
383       - "${CCACHE_DIR}"
384       - "${CERBERO_SOURCES}"
385   artifacts:
386     name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
387     expire_in: '5 days'
388     when: 'always'
389     paths:
390       - "manifest.xml"
391       - "${CERBERO_HOME}/logs"
392       - "*.tar.bz2"
393
394 .build windows:
395   image: $WINDOWS_IMAGE
396   extends:
397     - '.global_retry_policy'
398   stage: 'build'
399   needs:
400     - 'manifest'
401   dependencies:
402     - 'manifest'
403   tags:
404     - 'docker'
405     - 'windows'
406     - '1607'
407   variables:
408     MESON_ARGS: >
409       ${DEFAULT_MESON_ARGS}
410       -Dpython=disabled
411       -Dlibav=disabled
412       -Dvaapi=disabled
413       -Ddevtools=disabled
414   script:
415     - git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git $env:CI_PROJECT_DIR/gst-build
416     - cd $env:CI_PROJECT_DIR/gst-build
417     - cp -r C:/subprojects/* subprojects/
418     # For some reason, options are separated by newline instead of space, so we
419     # have to replace them first.
420     - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
421     # Gitlab executes PowerShell in docker, but VsDevCmd.bat is a batch script.
422     # Environment variables substitutions is done by PowerShell before calling
423     # cmd.exe, that's why we use $env:FOO instead of %FOO%
424     - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
425         python git-update --no-interaction --manifest=$env:CI_PROJECT_DIR/manifest.xml &&
426         meson build $env:MESON_ARGS &&
427         ninja -C build"
428   # FIXME: extract builddir for tests
429   # There's a bug that prevents us from exporting artifacts with docker-windows
430   # executors. It has since been fixed in gitlab 12.1, but
431   # we are blocked from upgrading currently.
432   #
433   # Gitlab Runner issue: https://gitlab.com/gitlab-org/gitlab-runner/issues/4291
434   # Blocked upgrade issue: https://gitlab.freedesktop.org/gstreamer/gst-ci/issues/6#note_192780
435   after_script:
436   except:
437     variables:
438       - $CI_PROJECT_NAME == "cerbero"
439       - $CI_PROJECT_NAME == "gst-omx"
440       - $CI_PROJECT_NAME == "gstreamer-vaapi"
441       - $CI_PROJECT_NAME == "gst-docs"
442
443 build vs2017 amd64:
444   extends: '.build windows'
445   variables:
446     ARCH: 'amd64'
447
448 build vs2017 x86:
449   extends: '.build windows'
450   variables:
451     ARCH: 'x86'
452
453 build msys2 :
454   extends: '.build windows'
455   script:
456     - git clone https://gitlab.freedesktop.org/gstreamer/gst-build.git $env:CI_PROJECT_DIR/gst-build
457     - cd $env:CI_PROJECT_DIR/gst-build
458     - cp -r C:/subprojects/* subprojects/
459
460     - $env:PATH += ";C:\msys64\usr\bin;C:\msys64\mingw64/bin;C:\msys64\mingw32/bin"
461     # For some reason, options are separated by newline instead of space, so we
462     # have to replace them first.
463     - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
464     - C:\msys64\usr\bin\bash -c "cd $env:CI_PROJECT_DIR/gst-build &&
465         python git-update --no-interaction --manifest=$env:CI_PROJECT_DIR/manifest.xml &&
466         meson build $env:MESON_ARGS &&
467         ninja -C build"
468
469
470 # Template for Cerbero GStreamer Deps
471 #
472 # This template is used by cerbero/ project to pre-built the GStreamer
473 # dependencies. When available, the .cerbero jobs will download this artifact
474 # in order to speed up the build.
475 #
476 # Parameters:
477 # CONFIG: The name of the configuration file to use
478 # ARCH: The cerbero <os>_<cpu> (used in cache key)
479 #
480 # Produce an artifact with the dist/ and .cache along
481 # with the associated build-tools.
482 .cerbero deps:
483   extends: .cerbero
484   stage: "pre-build"
485   script:
486     - $CERBERO $CERBERO_ARGS show-config
487     - $CERBERO $CERBERO_ARGS fetch-bootstrap --build-tools-only
488     - $CERBERO $CERBERO_ARGS fetch-package --deps gstreamer-1.0
489     - $CERBERO $CERBERO_ARGS bootstrap --offline --build-tools-only
490     - $CERBERO $CERBERO_ARGS build-deps --offline
491           gstreamer-1.0 gst-plugins-base-1.0 gst-plugins-good-1.0
492           gst-plugins-bad-1.0 gst-plugins-ugly-1.0 gst-rtsp-server-1.0
493           gst-libav-1.0 gst-validate gst-editing-services-1.0 libnice
494     - $CERBERO $CERBERO_ARGS fetch-cache --branch ${GST_UPSTREAM_BRANCH} --skip-fetch --job-id=${CI_JOB_ID}
495     - test "x${CERBERO_OVERRIDDEN_DIST_DIR}" != "x"
496           && mkdir -p ${CERBERO_HOME}/dist/${ARCH}
497           && rsync -aH ${CERBERO_OVERRIDDEN_DIST_DIR}/ ${CERBERO_HOME}/dist/${ARCH}
498     - tar -C ${CERBERO_HOME} -czf $CERBERO_DEPS
499               build-tools build-tools.cache
500               dist/${ARCH} ${ARCH}.cache
501   only:
502     variables:
503       - $CI_PROJECT_NAME == "cerbero"
504   artifacts:
505     name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
506     expire_in: '10 days'
507     when: 'always'
508     paths:
509       - "manifest.xml"
510       - "${CERBERO_HOME}/logs"
511       - "${CERBERO_HOME}/cerbero-deps.log"
512       - "${CERBERO_DEPS}"
513
514 #
515 # Cerbero Linux X86_64 build
516 #
517 cerbero deps fedora x86_64:
518   extends: '.cerbero deps'
519   variables:
520     CONFIG: "linux.config"
521     ARCH: "linux_x86_64"
522
523 .cerbero fedora x86_64:
524   extends: '.cerbero'
525   variables:
526     CONFIG: "linux.config"
527
528 cerbero fedora x86_64:
529   extends: '.cerbero fedora x86_64'
530   needs:
531     - "cerbero deps fedora x86_64"
532     - "manifest"
533   dependencies:
534     - "cerbero deps fedora x86_64"
535   only:
536     variables:
537       - $CI_PROJECT_NAME == "cerbero"
538
539 build cerbero fedora x86_64:
540   extends: '.cerbero fedora x86_64'
541   except:
542     variables:
543       - $CI_PROJECT_NAME == "cerbero"
544       - $CI_PROJECT_NAME == "gst-build"
545       - $CI_PROJECT_NAME == "gst-omx"
546       - $CI_PROJECT_NAME == "gstreamer-vaapi"
547       - $CI_PROJECT_NAME == "gst-docs"
548
549 #
550 # Cerbero Android Universal build
551 #
552 cerbero deps cross-android universal:
553   extends: '.cerbero deps'
554   variables:
555     CONFIG: "cross-android-universal.cbc"
556     ARCH: "android_universal"
557
558 .cerbero cross-android universal:
559   extends: '.cerbero'
560   variables:
561     CONFIG: "cross-android-universal.cbc"
562
563 cerbero cross-android universal:
564   extends: '.cerbero cross-android universal'
565   needs:
566     - "cerbero deps cross-android universal"
567     - "manifest"
568   dependencies:
569     - "cerbero deps cross-android universal"
570   only:
571     variables:
572       - $CI_PROJECT_NAME == "cerbero"
573
574 build cerbero cross-android universal:
575   extends: '.cerbero cross-android universal'
576   except:
577     variables:
578       - $CI_PROJECT_NAME == "cerbero"
579       - $CI_PROJECT_NAME == "gst-build"
580       - $CI_PROJECT_NAME == "gst-omx"
581       - $CI_PROJECT_NAME == "gstreamer-vaapi"
582       - $CI_PROJECT_NAME == "gst-docs"
583
584 #
585 # Cerbero Cross Windows builds
586 #
587 cerbero deps cross-windows x86:
588   extends: '.cerbero deps'
589   variables:
590     CONFIG: "cross-win32.cbc"
591     ARCH: "windows_x86"
592
593 .cerbero cross win32:
594   extends: '.cerbero'
595   variables:
596     CONFIG: "cross-win32.cbc"
597
598 cerbero cross win32:
599   extends: '.cerbero cross win32'
600   needs:
601     - "cerbero deps cross-windows x86"
602     - "manifest"
603   dependencies:
604     - "cerbero deps cross-windows x86"
605   only:
606     variables:
607       - $CI_PROJECT_NAME == "cerbero"
608
609 build cerbero cross win32:
610   extends: '.cerbero cross win32'
611   except:
612     variables:
613       - $CI_PROJECT_NAME == "cerbero"
614       - $CI_PROJECT_NAME == "gst-build"
615       - $CI_PROJECT_NAME == "gst-omx"
616       - $CI_PROJECT_NAME == "gstreamer-vaapi"
617       - $CI_PROJECT_NAME == "gst-docs"
618
619 cerbero deps cross-windows x86_64:
620   extends: '.cerbero deps'
621   variables:
622     CONFIG: "cross-win64.cbc"
623     ARCH: "windows_x86_64"
624
625 .cerbero cross win64:
626   extends: '.cerbero'
627   variables:
628     CONFIG: "cross-win64.cbc"
629
630 cerbero cross win64:
631   extends: '.cerbero cross win64'
632   needs:
633     - "cerbero deps cross-windows x86_64"
634     - "manifest"
635   dependencies:
636     - "cerbero deps cross-windows x86_64"
637   only:
638     variables:
639       - $CI_PROJECT_NAME == "cerbero"
640
641 build cerbero cross win64:
642   extends: '.cerbero cross win64'
643   except:
644     variables:
645       - $CI_PROJECT_NAME == "cerbero"
646       - $CI_PROJECT_NAME == "gst-build"
647       - $CI_PROJECT_NAME == "gst-omx"
648       - $CI_PROJECT_NAME == "gstreamer-vaapi"
649       - $CI_PROJECT_NAME == "gst-docs"
650
651 #
652 # Build an Android App using the android binaries
653 #
654 .cross-android universal examples:
655   image: $ANDROID_IMAGE
656   extends:
657     - '.global_retry_policy'
658   stage: 'integrate'
659   variables:
660     EXAMPLES_HOME: ${CI_PROJECT_DIR}/examples
661     GSTREAMER_ROOT_ANDROID: ${CI_PROJECT_DIR}/examples/cerbero-android-universal
662   script:
663     - mkdir -p ${EXAMPLES_HOME}/outputs
664     - curl -o clone_manifest_ref.py https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/clone_manifest_ref.py
665     - chmod +x clone_manifest_ref.py
666     - ./clone_manifest_ref.py --manifest manifest.xml --project gst-examples --destination ${EXAMPLES_HOME}/gst-examples
667     - ./clone_manifest_ref.py --manifest manifest.xml --project gst-docs --destination ${EXAMPLES_HOME}/gst-docs
668     - rm clone_manifest_ref.py
669
670     # extract our binaries
671     - rm -f gstreamer-1.0-android-universal-*-runtime.tar.bz2
672     - mkdir ${GSTREAMER_ROOT_ANDROID}
673     - tar -C ${GSTREAMER_ROOT_ANDROID} -xf gstreamer-1.0-android-universal-*.tar.bz2
674
675     # gst-examples
676     - chmod +x ${EXAMPLES_HOME}/gst-examples/playback/player/android/gradlew
677     - ${EXAMPLES_HOME}/gst-examples/playback/player/android/gradlew --no-search-upward --no-daemon --project-dir ${EXAMPLES_HOME}/gst-examples/playback/player/android assembleDebug
678     - cp ${EXAMPLES_HOME}/gst-examples/playback/player/android/app/build/outputs/apk/debug/*.apk ${EXAMPLES_HOME}/outputs/
679
680     # gst-docs android tutorials
681     - chmod +x ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/gradlew
682     - ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/gradlew --no-search-upward --no-daemon --project-dir ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android assembleDebug
683     - cp ${EXAMPLES_HOME}/gst-docs/examples/tutorials/android/android-tutorial-*/build/outputs/apk/debug/*.apk ${EXAMPLES_HOME}/outputs/
684   after_script:
685     - rm -rf ${GSTREAMER_ROOT_ANDROID}
686     - rm -rf ${EXAMPLES_HOME}/gst-examples ${EXAMPLES_HOME}/gst-docs
687   artifacts:
688     name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
689     expire_in: '5 days'
690     when: 'always'
691     paths:
692       - "manifest.xml"
693       - "${EXAMPLES_HOME}/outputs"
694
695 cross-android universal examples:
696   extends: ".cross-android universal examples"
697   needs:
698     - "build cerbero cross-android universal"
699     - "manifest"
700   dependencies:
701     - "build cerbero cross-android universal"
702   except:
703     variables:
704       - $CI_PROJECT_NAME == "cerbero"
705       - $CI_PROJECT_NAME == "gst-build"
706       - $CI_PROJECT_NAME == "gst-omx"
707       - $CI_PROJECT_NAME == "gst-integration-testsuites"
708       - $CI_PROJECT_NAME == "gstreamer-vaapi"
709       - $CI_PROJECT_NAME == "gst-docs"
710
711 cerbero cross-android universal examples:
712   extends: ".cross-android universal examples"
713   needs:
714     - "cerbero cross-android universal"
715     - "manifest"
716   dependencies:
717     - "cerbero cross-android universal"
718   only:
719     variables:
720       - $CI_PROJECT_NAME == "cerbero"
721
722 #
723 # Cerbero macOS X86_64 build
724 #
725 cerbero deps macos x86_64:
726   extends: '.cerbero deps'
727   variables:
728     ARCH: "darwin_x86_64"
729     CONFIG: "osx-x86-64.cbc"
730     HAVE_CCACHE: ""
731     CERBERO_OVERRIDDEN_DIST_DIR: "/Library/Frameworks/GStreamer.framework/Versions/1.0"
732   tags:
733     - gst-macos-10.14
734
735 .cerbero macos x86_64:
736   extends: '.cerbero'
737   variables:
738     ARCH: "darwin_x86_64"
739     CONFIG: "osx-x86-64.cbc"
740     CERBERO_PACKAGE_ARGS: ""
741     HAVE_CCACHE: ""
742     CERBERO_OVERRIDDEN_DIST_DIR: "/Library/Frameworks/GStreamer.framework/Versions/1.0"
743   tags:
744     - gst-macos-10.14
745   artifacts:
746     name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
747     expire_in: '5 days'
748     when: 'always'
749     paths:
750       - "manifest.xml"
751       - "${CERBERO_HOME}/logs"
752       - "gstreamer-1.0-1.*.pkg"
753       - "gstreamer-1.0-devel-1.*.pkg"
754
755 cerbero macos x86_64:
756   extends: '.cerbero macos x86_64'
757   needs:
758     - "cerbero deps macos x86_64"
759     - "manifest"
760   dependencies:
761     - "cerbero deps macos x86_64"
762   only:
763     variables:
764       - $CI_PROJECT_NAME == "cerbero"
765
766 build cerbero macos x86_64:
767   extends: '.cerbero macos x86_64'
768   except:
769     variables:
770       - $CI_PROJECT_NAME == "cerbero"
771       - $CI_PROJECT_NAME == "gst-build"
772       - $CI_PROJECT_NAME == "gst-integration-testsuite"
773       - $CI_PROJECT_NAME == "gst-omx"
774       - $CI_PROJECT_NAME == "gstreamer-vaapi"
775       - $CI_PROJECT_NAME == "gst-docs"
776       - $CI_PROJECT_NAME == "gst-sharp"
777
778 #
779 # Cerbero iOS build
780 #
781 cerbero deps cross-ios universal:
782   extends: '.cerbero deps'
783   variables:
784     ARCH: "ios_universal"
785     CONFIG: "cross-ios-universal.cbc"
786     CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror"
787     HAVE_CCACHE: ""
788   tags:
789     - gst-ios-12.2
790
791 .cerbero cross-ios universal:
792   extends: '.cerbero'
793   variables:
794     ARCH: "ios_universal"
795     CONFIG: "cross-ios-universal.cbc"
796     CERBERO_ARGS: "${DEFAULT_CERBERO_ARGS} -v nowerror"
797     CERBERO_PACKAGE_ARGS: ""
798     HAVE_CCACHE: ""
799   tags:
800     - gst-ios-12.2
801   artifacts:
802     name: "${CI_JOB_NAME}_${CI_COMMIT_SHA}"
803     expire_in: '5 days'
804     when: 'always'
805     paths:
806       - "manifest.xml"
807       - "${CERBERO_HOME}/logs"
808       - "gstreamer-1.0-*-ios-universal.pkg"
809
810 cerbero cross-ios universal:
811   extends: '.cerbero cross-ios universal'
812   needs:
813     - "cerbero deps cross-ios universal"
814     - "manifest"
815   dependencies:
816     - "cerbero deps cross-ios universal"
817   only:
818     variables:
819       - $CI_PROJECT_NAME == "cerbero"
820
821 build cerbero cross-ios universal:
822   extends: '.cerbero cross-ios universal'
823   when: 'manual'
824   except:
825     variables:
826       - $CI_PROJECT_NAME == "cerbero"
827       - $CI_PROJECT_NAME == "gst-build"
828       - $CI_PROJECT_NAME == "gst-integration-testsuite"
829       - $CI_PROJECT_NAME == "gst-omx"
830       - $CI_PROJECT_NAME == "gstreamer-vaapi"
831       - $CI_PROJECT_NAME == "gst-docs"
832       - $CI_PROJECT_NAME == "gst-sharp"
833
834 documentation:
835   image: $FEDORA_IMAGE
836   extends:
837     - '.global_retry_policy'
838   needs:
839     - "build fedora x86_64"
840     - "manifest"
841   dependencies:
842     - 'build fedora x86_64'
843   stage: integrate
844
845   script:
846   - pip3 install --upgrade git+https://github.com/hotdoc/hotdoc.git
847   - cd gst-build/
848   - ./gst-uninstalled.py hotdoc run --conf-file=build/subprojects/gst-docs/GStreamer-doc.json --fatal-warnings
849   - cd -
850   - mv gst-build/build/subprojects/gst-docs/GStreamer-doc/html documentation/
851
852   artifacts:
853     paths:
854     - documentation/
855   except:
856     variables:
857       - $CI_PROJECT_NAME == "cerbero"
858       - $CI_PROJECT_NAME == "gst-integration-testsuite"
859       - $CI_PROJECT_NAME == "gst-python"
860       - $CI_PROJECT_NAME == "gst-sharp"
861       - $CI_PROJECT_NAME == "gst-build"
862
863 #
864 # Build an iOS App using the iOS binaries
865 #
866 .cross-ios universal examples:
867   stage: 'integrate'
868   extends:
869     - '.global_retry_policy'
870   variables:
871     EXAMPLES_HOME: ${CI_PROJECT_DIR}/examples
872     # disable codesigning so we don't need developer identities on the CI
873     # machines
874     XCODE_BUILD_ARGS: >
875       CODE_SIGNING_REQUIRED="NO"
876       CODE_SIGN_IDENTITY=""
877       CODE_SIGNING_ALLOWED="NO"
878       CODE_SIGN_ENTITLEMENTS=""
879   script:
880     # install the binaries
881     - installer -pkg gstreamer-1.0-devel-*-ios-universal.pkg -target CurrentUserHomeDirectory -verbose
882
883     - curl -o clone_manifest_ref.py https://gitlab.freedesktop.org/gstreamer/gst-ci/raw/${GST_UPSTREAM_BRANCH}/gitlab/clone_manifest_ref.py
884     - chmod +x clone_manifest_ref.py
885     - ./clone_manifest_ref.py --manifest manifest.xml --project gst-examples --destination ${EXAMPLES_HOME}/gst-examples
886     - ./clone_manifest_ref.py --manifest manifest.xml --project gst-docs --destination ${EXAMPLES_HOME}/gst-docs
887     - rm clone_manifest_ref.py
888
889     # dump some useful information
890     - xcodebuild -version
891     - xcodebuild -showsdks
892
893     # gst-docs ios tutorials
894     - xcodebuild -showBuildSettings -alltargets -project ${EXAMPLES_HOME}/gst-docs/examples/tutorials/xcode\ iOS/GStreamer\ iOS\ Tutorials.xcodeproj
895     - xcodebuild -alltargets -destination generic/platform=iOS -project ${EXAMPLES_HOME}/gst-docs/examples/tutorials/xcode\ iOS/GStreamer\ iOS\ Tutorials.xcodeproj ${XCODE_BUILD_ARGS}
896
897     # gst-examples
898     - xcodebuild -showBuildSettings -alltargets -project ${EXAMPLES_HOME}/gst-examples/playback/player/ios/GstPlay.xcodeproj
899     - xcodebuild -alltargets -destination generic/platform=iOS -project ${EXAMPLES_HOME}/gst-examples/playback/player/ios/GstPlay.xcodeproj ${XCODE_BUILD_ARGS}
900   after_script:
901     - rm -rf ${EXAMPLES_HOME}/gst-examples ${EXAMPLES_HOME}/gst-docs
902   tags:
903     - gst-ios-12.2
904
905 cross-ios universal examples:
906   extends: ".cross-ios universal examples"
907   when: 'manual'
908   dependencies:
909     - "build cerbero cross-ios universal"
910   except:
911     variables:
912       - $CI_PROJECT_NAME == "cerbero"
913       - $CI_PROJECT_NAME == "gst-build"
914       - $CI_PROJECT_NAME == "gst-omx"
915       - $CI_PROJECT_NAME == "gst-integration-testsuites"
916       - $CI_PROJECT_NAME == "gstreamer-vaapi"
917
918 cerbero cross-ios universal examples:
919   extends: ".cross-ios universal examples"
920   needs:
921     - "cerbero cross-ios universal"
922     - "manifest"
923   dependencies:
924     - "cerbero cross-ios universal"
925   only:
926     variables:
927       - $CI_PROJECT_NAME == "cerbero"