gst-inspect: print doc urls for Rust plugins
[platform/upstream/gstreamer.git] / .gitlab-ci.yml
1 include:
2   - project: 'freedesktop/ci-templates'
3     ref: 14731f78c23c7b523a85a26a068ade9ac1ecd2f3
4     file: '/templates/fedora.yml'
5   - project: 'freedesktop/ci-templates'
6     ref: 14731f78c23c7b523a85a26a068ade9ac1ecd2f3
7     file: '/templates/debian.yml'
8   ###
9   # IMPORTANT
10   # These are the version tags for the docker images the CI runs against.
11   # If you are hacking on them or need a them to rebuild, you need to change
12   # the appropriate version string in this file which will cause a rebuild.
13   ###
14   - local: '.gitlab-image-tags.yml'
15
16 stages:
17   - 'preparation'
18   - 'build'
19   - 'test'
20   # Use the resulting binaries
21   - 'integrate'
22
23 variables:
24   GIT_DEPTH: 1
25
26   # Branch to track for modules that have no ref specified in the manifest
27   GST_UPSTREAM_BRANCH: 'main'
28
29   FDO_UPSTREAM_REPO: 'gstreamer/gstreamer'
30
31   FEDORA_AMD64_SUFFIX: 'amd64/fedora'
32   INDENT_AMD64_SUFFIX: 'amd64/gst-indent'
33   WINDOWS_AMD64_SUFFIX: 'amd64/windows'
34
35   WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH"
36   WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH"
37
38   MESON_BUILDTYPE_ARGS: --default-library=both
39   DEFAULT_MESON_ARGS: >
40     -Dlibnice:tests=disabled
41     -Dlibnice:examples=disabled
42     -Dopenh264:tests=disabled
43     -Dpygobject:tests=false
44     -Dpython=enabled
45     -Dlibav=enabled
46     -Dugly=enabled
47     -Dbad=enabled
48     -Ddevtools=enabled
49     -Dges=enabled
50     -Drtsp_server=enabled
51     -Dvaapi=enabled
52     -Dsharp=disabled
53     -Dgpl=enabled
54
55   MESON_GST_WERROR: >
56     -Dgstreamer:werror=true
57     -Dgst-plugins-base:werror=true
58     -Dgst-plugins-good:werror=true
59     -Dgst-plugins-ugly:werror=true
60     -Dgst-plugins-bad:werror=true
61     -Dgst-rtsp-server:werror=true
62     -Dgst-libav:werror=true
63     -Dgst-examples:werror=true
64     -Dgst-editing-services:werror=true
65     -Dgst-docs:werror=true
66     -Dgst-omx:werror=true
67     -Dgst-devtools:werror=true
68     -Dgst-python:werror=true
69     -Dgstreamer-vaapi:werror=true
70     -Dgstreamer-sharp:werror=true
71
72 workflow:
73   # https://docs.gitlab.com/ee/ci/yaml/index.html#switch-between-branch-pipelines-and-merge-request-pipelines
74   rules:
75     - if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
76       variables:
77         GIT_FETCH_EXTRA_FLAGS: '--no-tags'
78     - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
79       when: never
80     - if: '$CI_COMMIT_TAG'
81     - if: '$CI_COMMIT_BRANCH'
82       variables:
83         GIT_FETCH_EXTRA_FLAGS: '--no-tags'
84
85 #
86 # Global CI policy
87 #
88 # This can be used to configure global behaviour our our jobs.
89 #
90 default:
91   retry:
92     max: 2
93     when:
94       - 'runner_system_failure'
95       - 'stuck_or_timeout_failure'
96       - 'scheduler_failure'
97       - 'api_failure'
98   interruptible: true
99
100 # This is an empty job that is used to trigger the pipeline.
101 trigger:
102   image: alpine:latest
103   stage: 'preparation'
104   variables:
105     GIT_STRATEGY: none
106   script:
107     - echo "Trigger job done, now running the pipeline."
108   rules:
109     # If the MR is assigned to the Merge bot, trigger the pipeline automatically
110     - if: '$CI_MERGE_REQUEST_ASSIGNEES == "gstreamer-merge-bot"'
111     # Require explicit action to trigger tests post merge, but we want to
112     # automatically trigger the integratation stage
113     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH && $CI_JOB_STAGE != "integrate"'
114       when: 'manual'
115     # When the assignee isn't the merge bot, require an explicit action to trigger the pipeline
116     # to avoid wasting CI resources
117     - if: '$CI_MERGE_REQUEST_ASSIGNEES != "gstreamer-merge-bot"'
118       when: 'manual'
119       allow_failure: false
120
121 .fedora image:
122   variables:
123     FDO_DISTRIBUTION_VERSION: '31'
124     FDO_REPO_SUFFIX: "$FEDORA_AMD64_SUFFIX"
125     FDO_DISTRIBUTION_TAG: "$FEDORA_TAG-$GST_UPSTREAM_BRANCH"
126     FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/fedora/prepare.sh'
127
128 fedora amd64 docker:
129   extends:
130     - '.fedora image'
131     - '.fdo.container-build@fedora'
132   stage: 'preparation'
133   needs: []
134   tags:
135     - 'packet.net'
136
137 .gst-indent image:
138   variables:
139     FDO_DISTRIBUTION_VERSION: 'stretch'
140     FDO_REPO_SUFFIX: "$INDENT_AMD64_SUFFIX"
141     FDO_DISTRIBUTION_TAG: "$INDENT_TAG-$GST_UPSTREAM_BRANCH"
142     FDO_DISTRIBUTION_PACKAGES: 'curl indent git findutils'
143     FDO_DISTRIBUTION_EXEC: 'ci/docker/indent/prepare.sh'
144
145 gst-indent amd64 docker:
146   extends:
147     - '.gst-indent image'
148     - '.fdo.container-build@debian'
149   stage: 'preparation'
150   # Do not depend on the trigger, as we want to run indent always
151   needs: []
152
153 windows amd64 docker:
154   stage: "preparation"
155   needs:
156     - "trigger"
157   timeout: '3h'
158   variables:
159     # Unlike the buildah/linux jobs, this file
160     # needs to be relative to docker/windows/ subdir
161     # as it makes life easier in the powershell script
162     #
163     # We also don't need a CONTEXT_DIR var as its also
164     # hardcoded to be docker/windows/
165     DOCKERFILE: "ci/docker/windows/Dockerfile"
166   tags:
167     - windows
168     - shell
169     - "2022"
170   script:
171     # We need to pass an array and to resolve the env vars, so we can't use a variable:
172     - $DOCKER_BUILD_ARGS = @("--build-arg", "DEFAULT_BRANCH=$GST_UPSTREAM_BRANCH")
173
174     - "& ci/docker/windows/container.ps1 $CI_REGISTRY $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $WINDOWS_IMAGE $WINDOWS_UPSTREAM_IMAGE $DOCKERFILE"
175     - |
176       if (!($?)) {
177         echo "Failed to build the image"
178         Exit 1
179       }
180
181
182 # ---- Preparation ----- #
183 #
184 # gst-indent!!
185 #
186 gst indent:
187   extends:
188     - '.gst-indent image'
189     - '.fdo.suffixed-image@debian'
190   stage: 'preparation'
191   needs:
192     - job: 'gst-indent amd64 docker'
193       artifacts: false
194   script:
195     - ./scripts/check-format-c
196     - ./scripts/format-csharp --check
197   rules:
198     # Don't check indentation on post merge pipelines
199     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
200       when: 'manual'
201     - if: '$CI_PROJECT_NAMESPACE != "gstreamer" || $CI_COMMIT_BRANCH != $GST_UPSTREAM_BRANCH'
202       when: 'always'
203
204 #
205 # build setup templates
206 #
207 .build_template: &build
208   - ci/scripts/handle-subprojects-cache.py subprojects/
209   - echo $MESON_ARGS
210   - meson build/ $MESON_ARGS
211   - ninja -C build/
212   - ccache --show-stats
213
214 .build_ccache_vars:
215   variables:
216     CCACHE_COMPILERCHECK: 'content'
217     CCACHE_COMPRESS: 'true'
218     CCACHE_BASEDIR: '/cache/gstreamer/gstreamer'
219     CCACHE_DIR: '/cache/gstreamer/gstreamer/ccache/'
220     # shared across everything really
221     CCACHE_MAXSIZE: '10G'
222     CARGO_HOME: '/cache/gstreamer/cargo'
223
224 .base_modules_changes: &modules_changes
225   - .gitlab-ci.yml
226   - gst-env.py
227   - ci/gitlab/*.py
228   - meson.build
229   - subprojects/*.wrap
230   - subprojects/gst-devtools/**/*
231   - subprojects/gst-editing-services/**/*
232   - subprojects/gst-integration-testsuites/**/*
233   - subprojects/gst-libav/**/*
234   - subprojects/gst-omx/**/*
235   - subprojects/gst-plugins-bad/**/*
236   - subprojects/gst-plugins-base/**/*
237   - subprojects/gst-plugins-good/**/*
238   - subprojects/gst-plugins-ugly/**/*
239   - subprojects/gst-python/**/*
240   - subprojects/gstreamer/**/*
241   - subprojects/gstreamer-sharp/**/*
242   - subprojects/gstreamer-vaapi/**/*
243   - subprojects/gst-rtsp-server/**/*
244
245 .simple_fedora_build: &simple_build >-
246   ${DEFAULT_MESON_ARGS}
247   -Dsharp=enabled
248   -Domx=enabled
249   -Dgst-omx:target=generic
250   -Ddoc=disabled
251   -Drs=disabled
252   ${MESON_BUILDTYPE_ARGS}
253   ${MESON_GST_WERROR}
254
255 .build:
256   stage: 'build'
257   extends:
258     - '.build_ccache_vars'
259   needs:
260     - "trigger"
261   # Taking into account the slowest shared runner + time needed to upload the binaries to artifacts
262   # Also need to take into account I/O of pulling docker images and uploading artifacts
263   timeout: '45min'
264   variables:
265     MESON_ARGS: "${DEFAULT_MESON_ARGS} ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}"
266   script:
267     - *build
268     - ./gst-env.py gst-inspect-1.0 --version
269     - ./gst-env.py gst-inspect-1.0
270   after_script:
271     - mv build/meson-logs/ meson-logs
272   artifacts:
273     expire_in: "7 days"
274     when: "always"
275     paths:
276       - 'meson-logs/'
277   rules:
278     # If this matches, it means the pipeline is running against either the main
279     # or a stable branch, so make it manual
280     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
281       when: manual
282     - changes:
283         *modules_changes
284
285 .build fedora x86_64:
286   extends:
287     - '.fedora image'
288     - '.fdo.suffixed-image@fedora'
289     - '.build'
290   needs:
291     - "trigger"
292     - "fedora amd64 docker"
293   variables:
294     MESON_ARGS: *simple_build
295
296 build fedora x86_64:
297   extends:
298     - '.fedora image'
299     - '.fdo.suffixed-image@fedora'
300     - '.build fedora x86_64'
301   needs:
302     - "trigger"
303     - "fedora amd64 docker"
304   script:
305     - *build
306     - ./gst-env.py gst-inspect-1.0 --version
307     - ./gst-env.py gst-inspect-1.0
308     - meson install --destdir $CI_PROJECT_DIR/destdir -C build
309     - rm -rf $CI_PROJECT_DIR/destdir
310
311 build nodebug fedora x86_64:
312   extends:
313     - '.fedora image'
314     - '.fdo.suffixed-image@fedora'
315     - '.build'
316   needs:
317     - "trigger"
318     - "fedora amd64 docker"
319   variables:
320     MESON_ARGS: "${DEFAULT_MESON_ARGS} -Dsharp=enabled -Dgstreamer:gst_debug=false -Domx=enabled -Dgst-omx:target=generic ${MESON_BUILDTYPE_ARGS} ${MESON_GST_WERROR}"
321
322 build clang fedora x86_64:
323   extends: '.build fedora x86_64'
324   variables:
325     CC: 'ccache clang'
326     CXX: 'ccache clang++'
327
328 .build windows:
329   image: $WINDOWS_IMAGE
330   stage: 'build'
331   tags:
332     - 'docker'
333     - 'windows'
334     - '2022'
335   needs:
336     - "trigger"
337     - "windows amd64 docker"
338   timeout: '45min'
339   variables:
340     MESON_ARGS: >
341       ${DEFAULT_MESON_ARGS}
342       -Dpython=disabled
343       -Dlibav=disabled
344       -Dvaapi=disabled
345       -Dgst-plugins-base:pango=enabled
346       -Dgst-plugins-good:cairo=enabled
347     # Needs to not be empty otherwise the newline -> space replace command in
348     # `script:` will fail
349     MESON_CROSS_ARGS: ' '
350   rules:
351     # If this matches, it means the pipeline is running against either the main
352     # or a stable branch, so make it manual
353     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
354       when: manual
355     - changes:
356         *modules_changes
357     - changes:
358         - subprojects/win-*/*
359   script:
360     # Make sure powershell exits on errors
361     # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6
362     - $ErrorActionPreference = "Stop"
363
364     # Set the code page to UTF-8
365     - chcp 65001
366
367     - ci/scripts/handle-subprojects-cache.py subprojects/
368     # For some reason, options are separated by newline instead of space, so we
369     # have to replace them first.
370     - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
371     - $env:MESON_CROSS_ARGS = $env:MESON_CROSS_ARGS.replace("`n"," ")
372     - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
373         meson build $env:MESON_ARGS $env:MESON_CROSS_ARGS &&
374         meson compile -C build"
375   artifacts:
376    expire_in: "7 days"
377    when: "always"
378    paths:
379      - 'build/meson-logs/'
380
381 build vs2019 amd64:
382   extends: '.build windows'
383   variables:
384     ARCH: 'amd64'
385   script:
386     - !reference [".build windows", "script",]
387     - cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH &&
388         .\gst-env.py gst-inspect-1.0.exe --version &&
389         .\gst-env.py gst-inspect-1.0.exe &&
390         mkdir .\destdir &&
391         meson install --destdir=$env:CI_PROJECT_DIR\destdir -C build &&
392         rmdir /s /q  $env:CI_PROJECT_DIR\destdir"
393
394 build vs2019 x86:
395   extends: '.build windows'
396   variables:
397     ARCH: 'x86'
398
399 build vs2019 arm64 uwp:
400   extends: '.build windows'
401   variables:
402     ARCH: 'arm64'
403     # pango pulls in cairo which pulls in pixman which doesn't build because of
404     # https://github.com/mesonbuild/meson/issues/9889
405     MESON_CROSS_ARGS: >
406       -Dgst-plugins-base:pango=disabled
407       -Dgst-plugins-good:cairo=disabled
408       -Dgst-devtools:cairo=disabled
409       --cross-file ci/meson/vs2019-arm64-cross-file.txt
410       --native-file ci/meson/vs2019-x64-native-file.txt
411
412 build msys2 :
413   extends: '.build windows'
414   timeout: '60min'
415   rules:
416     - changes:
417         *modules_changes
418       allow_failure: true
419       when: 'manual'
420   script:
421     # Make sure powershell exits on errors
422     # https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_preference_variables?view=powershell-6
423     - $ErrorActionPreference = "Stop"
424
425     # Set the code page to UTF-8
426     - chcp 65001
427
428     # Configure MSYS2 to use the UCRT64 environment, start in the same directory
429     # and inherit PATH
430     - $env:MSYSTEM = "UCRT64"
431     - $env:CHERE_INVOKING = "1"
432     - $env:MSYS2_PATH_TYPE = "inherit"
433     # For some reason, options are separated by newline instead of space, so we
434     # have to replace them first.
435     - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
436     # Replace forward slashes with backwards so bash doesn't complain
437     - $env:_PROJECT_DIR = $env:CI_PROJECT_DIR.replace('\','/')
438     - C:\msys64\usr\bin\bash -lc "meson build $env:MESON_ARGS && ninja -C build"
439
440 # ---- Tests ----- #
441
442 .test:
443   stage: 'test'
444   extends:
445     - '.build_ccache_vars'
446   needs:
447     - "trigger"
448   variables:
449     MESON_ARGS: *simple_build
450
451     # Disable colored output to avoid weird rendering issues
452     GST_DEBUG_NO_COLOR: "true"
453     CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/validate-logs/"
454     GST_VALIDATE_LAUNCHER_FORCE_COLORS: "true"
455     TIMEOUT_FACTOR: "2"
456     CARGO_HOME: "/cache/gstreamer/cargo"
457     # Enable the fault handler so we get backtraces on segfaults.
458     # any non-empty string will do
459     PYTHONFAULTHANDLER: "enabled"
460   rules:
461     - changes:
462         *modules_changes
463   script:
464     - *build
465
466     - echo "-> Running ${TEST_SUITE}"
467     - >
468       ./gst-env.py
469       gst-validate-launcher ${TEST_SUITE}
470       --check-bugs
471       --dump-on-failure
472       --mute
473       --shuffle
474       --no-display
475       --meson-no-rebuild
476       --timeout-factor "${TIMEOUT_FACTOR}"
477       --fail-on-testlist-change
478       -l "${CI_PROJECT_DIR}/validate-logs/"
479       --xunit-file "${CI_PROJECT_DIR}/validate-logs/xunit.xml"
480       ${EXTRA_VALIDATE_ARGS}
481   after_script:
482     - mv build/meson-logs/ meson-logs
483   artifacts:
484     expire_in: '14 days'
485     when: always
486     paths:
487       - 'meson-logs/'
488       - 'validate-logs'
489     reports:
490       junit:
491         - "validate-logs/*.xml"
492
493 .test fedora x86_64:
494   extends:
495     - '.fedora image'
496     - '.fdo.suffixed-image@fedora'
497     - '.test'
498   needs:
499     - "trigger"
500     - "fedora amd64 docker"
501   tags: ['gstreamer']
502
503 check fedora:
504   extends: '.test fedora x86_64'
505   variables:
506     TEST_SUITE: "check.gst*"
507
508 integration testsuites fedora:
509   extends: '.test fedora x86_64'
510   parallel: 4
511   variables:
512     EXTRA_VALIDATE_ARGS: "--timeout-factor=2 --retry-on-failures --parts=${CI_NODE_TOTAL} --part-index=${CI_NODE_INDEX} --sync"
513     TEST_SUITE: "validate ges"
514
515 # gstreamer-full:
516 gstreamer-full static build:
517   extends: '.build fedora x86_64'
518   stage: 'build'
519   variables:
520     MESON_ARGS: >
521       --default-library=static
522       -Ddoc=disabled
523       $MESON_GST_WERROR
524
525   script:
526   - *build
527   - meson test -C build -v test-gst-full
528   artifacts:
529     expire_in: "7 days"
530     when: "always"
531     paths:
532       - 'meson-logs/'
533
534 gstreamer-full-minimal static build:
535   extends: 'gstreamer-full static build'
536   stage: 'build'
537   variables:
538     MESON_ARGS: >
539       --default-library=static
540       -Ddoc=disabled
541       -Dgstreamer:gst_debug=false
542       -Dauto_features=disabled
543       -Dgstreamer:check=enabled
544       -Dtests=enabled
545       -Dgst-plugins-base:alsa=enabled
546       -Dgst-plugins-base:typefind=enabled
547       -Dgst-plugins-base:pbtypes=enabled
548       -Dgst-full-elements=coreelements:filesrc,fakesink,identity,input-selector
549       -Dgst-full-typefind-functions=typefindfunctions:wav,flv
550       -Dgst-full-device-providers=alsa:alsadeviceprovider
551       -Dgst-full-dynamic-types=pbtypes:video_multiview_flagset
552       $MESON_GST_WERROR
553
554   script:
555   - *build
556   - meson test -C build -v test-gst-full
557   - meson test -C build test-gst-full-features --test-args "-e filesrc,identity,fakesink -E filesink,capsfilter -t audio/x-wav -T video/vivo -d alsadeviceprovider -D v4l2deviceprovider -l GstVideoMultiviewFlagsSet"
558   - strip build/libgstreamer-full-1.0.so
559   - ls -l build/libgstreamer-full-1.0.so
560   artifacts:
561     expire_in: "7 days"
562     when: "always"
563     paths:
564       - 'meson-logs/'
565
566 # Valgrind
567 .valgrind fedora x86_64:
568   extends: '.test fedora x86_64'
569   stage: 'test'
570   variables:
571     EXTRA_VALIDATE_ARGS: "--valgrind"
572
573 valgrind core:
574   extends: '.valgrind fedora x86_64'
575   variables:
576     TEST_SUITE: "check.gstreamer\\..*"
577   rules:
578     - changes:
579       - "*"
580       - scripts/*
581       - ci/**/*
582       - subprojects/gst-devtools/**/*
583       - subprojects/gstreamer/**/*
584
585 valgrind base:
586   extends: '.valgrind fedora x86_64'
587   variables:
588     TEST_SUITE: "check.gst-plugins-base\\..*"
589   rules:
590     - changes:
591       - "*"
592       - scripts/*
593       - ci//**/*
594       - subprojects/gst-devtools/**/*
595       - subprojects/gstreamer/**/*
596       - subprojects/gst-plugins-base/**/*
597
598 valgrind good:
599   extends: '.valgrind fedora x86_64'
600   variables:
601     TEST_SUITE: "check.gst-plugins-good\\..*"
602     # take longer time due to splitmux unit test
603     TIMEOUT_FACTOR: "4"
604   rules:
605     - changes:
606       - "*"
607       - scripts/*
608       - ci/**/*
609       - subprojects/gst-devtools/**/*
610       - subprojects/gstreamer/**/*
611       - subprojects/gst-plugins-base/**/*
612       - subprojects/gst-plugins-good/**/*
613
614 valgrind ugly:
615   extends: '.valgrind fedora x86_64'
616   variables:
617     TEST_SUITE: "check.gst-plugins-ugly\\..*"
618   rules:
619     - changes:
620       - "*"
621       - scripts/*
622       - ci/**/*
623       - subprojects/gst-devtools/**/*
624       - subprojects/gstreamer/**/*
625       - subprojects/gst-plugins-base/**/*
626       - subprojects/gst-plugins-good/**/*
627       - subprojects/gst-plugins-ugly/**/*
628
629 valgrind bad:
630   extends: '.valgrind fedora x86_64'
631   variables:
632     TEST_SUITE: "check.gst-plugins-bad\\..*"
633   rules:
634     - changes:
635       - "*"
636       - scripts/*
637       - ci/**/*
638       - subprojects/gst-devtools/**/*
639       - subprojects/gstreamer/**/*
640       - subprojects/gst-plugins-base/**/*
641       - subprojects/gst-plugins-good/**/*
642       - subprojects/gst-plugins-bad/**/*
643
644 valgrind ges:
645   extends: '.valgrind fedora x86_64'
646   variables:
647     TEST_SUITE: "check.gst-editing-services\\..*"
648   rules:
649     - changes:
650       - "*"
651       - scripts/*
652       - ci/**/*
653       - subprojects/gst-devtools/**/*
654       - subprojects/gstreamer/**/*
655       - subprojects/gst-plugins-base/**/*
656       - subprojects/gst-plugins-good/**/*
657       - subprojects/gst-plugins-bad/**/*
658       - subprojects/gst-editing-services/**/*
659       - subprojects/gst-python/**/*
660
661 # ---- Integration ----- #
662
663 .documentation:
664   extends: '.build fedora x86_64'
665   variables:
666     MESON_ARGS: *simple_build
667     MESON_BUILDTYPE_ARGS: "-Ddoc=enabled -Drs=enabled -Dgst-docs:fatal_warnings=true"
668     # Disable werror for the docs build, we don't need it
669     MESON_GST_WERROR: ''
670     CI_ARTIFACTS_URL: "${CI_PROJECT_URL}/-/jobs/${CI_JOB_ID}/artifacts/raw/"
671   script:
672   - export PATH=/usr/local/cargo/bin/:/usr/local/bin/:$PATH
673   - export RUSTUP_HOME='/usr/local/rustup'
674
675   - ci/scripts/handle-subprojects-cache.py subprojects/
676   - echo $MESON_ARGS
677   - meson build/ $MESON_ARGS
678   - ccache --show-stats
679
680   - ./gst-env.py ninja -C build/ plugins_doc_caches
681   # Ignore modifications to wrap files made by meson
682   - git checkout subprojects/*.wrap
683   - ./ci/scripts/check-documentation-diff.py
684
685   - ./gst-env.py ninja -C build subprojects/gst-docs/GStreamer-doc
686   - mv build/subprojects/gst-docs/GStreamer-doc/html documentation/
687
688   artifacts:
689     when: always
690     expire_in: "7 days"
691     paths:
692     - documentation/
693     - plugins-cache-diffs/
694
695 #
696 # This jobs runs in gstreamer namespace when after the merge into main branch.
697 # The produced artifact is later used to automatically update the web page.
698 #
699 documentation:
700   stage: integrate
701   extends:
702     - '.documentation'
703   needs:
704     - "fedora amd64 docker"
705   rules:
706     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == "main"'
707
708 #
709 # This job is run in users namespace to validate documentation before merging
710 # MR.
711 #
712 build documentation:
713   extends:
714     - '.documentation'
715   stage: build
716   needs:
717     - "trigger"
718     - "fedora amd64 docker"
719   rules:
720     # Never run post merge, we have the `documentation` always running for that
721     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
722       when: never
723     - changes:
724       - .gitlab-ci.yml
725       - ci/gitlab/*.py
726       - subprojects/*.wrap
727       - subprojects/gst-docs/**/*
728       - subprojects/gst-devtools/**/*
729       - subprojects/gst-editing-services/**/*
730       - subprojects/gst-libav/**/*
731       - subprojects/gst-omx/**/*
732       - subprojects/gst-plugins-bad/**/*
733       - subprojects/gst-plugins-base/**/*
734       - subprojects/gst-plugins-good/**/*
735       - subprojects/gst-plugins-ugly/**/*
736       - subprojects/gstreamer/**/*
737       - subprojects/gstreamer-vaapi/**/*
738       - subprojects/gst-rtsp-server/**/*
739
740 # FIXME: Using trigger: causes permission issues, workaround using old REST API.
741 # https://gitlab.com/gitlab-org/gitlab/-/issues/341737
742 cerbero trigger:
743   stage: build
744   timeout: '4h'
745   tags:
746     - placeholder-job
747   extends:
748     - '.fedora image'
749     - '.fdo.suffixed-image@fedora'
750   needs:
751     - "trigger"
752     - "fedora amd64 docker"
753   script:
754     - ci/gitlab/trigger_cerbero_pipeline.py
755
756   rules:
757     # Never run post merge
758     - if: '$CI_PROJECT_NAMESPACE == "gstreamer" && $CI_COMMIT_BRANCH == $GST_UPSTREAM_BRANCH'
759       when: never
760     - changes:
761       - .gitlab-ci.yml
762       - ci/gitlab/*.py
763       - subprojects/gst-devtools/**/*
764       - subprojects/gst-editing-services/**/*
765       - subprojects/gst-libav/**/*
766       - subprojects/gst-plugins-bad/**/*
767       - subprojects/gst-plugins-base/**/*
768       - subprojects/gst-plugins-good/**/*
769       - subprojects/gst-plugins-ugly/**/*
770       - subprojects/gst-python/**/*
771       - subprojects/gstreamer/**/*
772       - subprojects/gst-rtsp-server/**/*
773       - subprojects/gst-examples/**/*