.gitlab-ci: Avoid duplicate CI on all merge requests
[Samba.git] / .gitlab-ci-main.yml
blobd876923f9e78b0d894f893f11749a1a2c2f5e897
1 # see https://docs.gitlab.com/ce/ci/yaml/README.html for all available options
3 # Stages explained
5 # images: Build the images with the bootstrap script
6 # build_first: Build a few things first to find silly errors (fast job)
7 #              (don't pay for 35 machines until something compiles)
8 # build: The main parallel job
9 #              (keep these to 1hour as we are billed per hour)
10 # test_only: Tests using the build from prior stages, these typically
11 #            have an explicit dependency defined to a specific build job,
12 #            which means that start as soon as the build job finished.
13 # test_private: Like test_only, but running on private runners
14 # report: Code coverage reporting
16 stages:
17   - images
18   - build_first
19   - build
20   - test_only
21   - test_private
22   - report
24 variables:
25   # We want to be resilient to runner failures
26   ARTIFACT_DOWNLOAD_ATTEMPTS: "3"
27   EXECUTOR_JOB_SECTION_ATTEMPTS: "3"
28   GET_SOURCES_ATTEMPTS: "3"
29   RESTORE_CACHE_ATTEMPTS: "3"
30   #
31   GIT_STRATEGY: fetch
32   GIT_DEPTH: "3"
33   #
34   # we run autobuild.py inside a samba CI docker image located on gitlab's registry
35   # overwrite this variable if you want use your own image registry.
36   #
37   # Or better ask for access to the shared development repository, see
38   # https://wiki.samba.org/index.php/Samba_CI_on_gitlab#Getting_Access
39   #
40   SAMBA_CI_CONTAINER_REGISTRY: registry.gitlab.com/samba-team/devel/samba
41   #
42   # Set this to the contents of bootstrap/sha1sum.txt
43   # which is generated by bootstrap/template.py --render
44   #
45   SAMBA_CI_CONTAINER_TAG: 752c448d3186fe93a0c4039b8fbe897bb67a1f33
46   #
47   # We use the ubuntu1804 image as default as
48   # it matches what we have on sn-devel-184.
49   #
50   SAMBA_CI_CONTAINER_IMAGE: ubuntu1804
51   #
52   # The following images are available
53   # Please see the samba-o3 sections at the end of this file!
54   # We should run that for each available image
55   #
56   SAMBA_CI_CONTAINER_IMAGE_ubuntu1604: ubuntu1604
57   SAMBA_CI_CONTAINER_IMAGE_ubuntu1804: ubuntu1804
58   SAMBA_CI_CONTAINER_IMAGE_ubuntu2004: ubuntu2004
59   SAMBA_CI_CONTAINER_IMAGE_debian9: debian9
60   SAMBA_CI_CONTAINER_IMAGE_debian10: debian10
61   SAMBA_CI_CONTAINER_IMAGE_opensuse151: opensuse151
62   SAMBA_CI_CONTAINER_IMAGE_opensuse152: opensuse152
63   SAMBA_CI_CONTAINER_IMAGE_fedora33: fedora33
64   SAMBA_CI_CONTAINER_IMAGE_fedora34: fedora34
65   SAMBA_CI_CONTAINER_IMAGE_centos7: centos7
66   SAMBA_CI_CONTAINER_IMAGE_centos8: centos8
68 include:
69   # The image creation details are specified in a separate file
70   # See bootstrap/README.md for details
71   - 'bootstrap/.gitlab-ci.yml'
73 .shared_runner_build_image:
74   extends: .shared_runner_build
75   variables:
76     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE}
77   image: ${SAMBA_CI_CONTAINER_REGISTRY}/samba-ci-${SAMBA_CI_JOB_IMAGE}:${SAMBA_CI_CONTAINER_TAG}
79 .shared_template:
80   extends: .shared_runner_build_image
81   # All Samba jobs are interruptible, this avoids burning CPU when a
82   # newer branch is pushed.
83   interruptible: true
84   timeout: 2h
86   # Otherwise we run twice, once on push and once on MR
87   # https://forum.gitlab.com/t/new-rules-syntax-and-detached-pipelines/37292
88   rules:
89     - if: $CI_MERGE_REQUEST_ID
90       when: never
91     - when: on_success
93   variables:
94     AUTOBUILD_JOB_NAME: $CI_JOB_NAME
95   stage: build
96   cache:
97     key: ccache.${CI_JOB_NAME}.${SAMBA_CI_JOB_IMAGE}.${SAMBA_CI_FLAVOR}
98     paths:
99       - ccache
100   before_script:
101     - uname -a
102     - lsb_release -a
103     - cat /etc/os-release
104     - lscpu
105     - cat /proc/cpuinfo
106     - mount
107     - df -h
108     - cat /proc/swaps
109     - free -h
110       # ld will fail if coverage enabled, force link ld to ld.bfd
111     - if [ -n "$SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE" ]; then sudo ln -sf $(which ld.bfd) $(which ld); fi
112       # See bootstrap/.gitlab-ci.yml how to generate a new image
113     - echo "SAMBA_CI_CONTAINER_REGISTRY[${SAMBA_CI_CONTAINER_REGISTRY}]"
114     - echo "SAMBA_CI_CONTAINER_TAG[${SAMBA_CI_CONTAINER_TAG}]"
115     - echo "SAMBA_CI_JOB_IMAGE[${SAMBA_CI_JOB_IMAGE}]"
116     - echo "CI_JOB_IMAGE[${CI_JOB_IMAGE}]"
117     - bootstrap/template.py --sha1sum > /tmp/sha1sum-template.txt
118     - diff -u bootstrap/sha1sum.txt /tmp/sha1sum-template.txt
119     - echo "${SAMBA_CI_CONTAINER_TAG}" > /tmp/sha1sum-tag.txt
120     - diff -u bootstrap/sha1sum.txt /tmp/sha1sum-tag.txt
121     - diff -u bootstrap/sha1sum.txt /sha1sum.txt
122     - echo "${CI_COMMIT_SHA} ${CI_COMMIT_TITLE}" > /tmp/commit.txt
123     - export CCACHE_BASEDIR="${PWD}"
124     - export CCACHE_DIR="${PWD}/ccache" && mkdir -pv "$CCACHE_DIR"
125     - export CC="ccache cc"
126     - export CXX="ccache c++"
127     - ccache -z -M 500M
128     - ccache -s
129   after_script:
130     - mount
131     - df -h
132     - cat /proc/swaps
133     - free -h
134     - CCACHE_BASEDIR="${PWD}" CCACHE_DIR="${PWD}/ccache" ccache -s -c
135   artifacts:
136     expire_in: 1 week
137     paths:
138       - "*.stdout"
139       - "*.stderr"
140       - "*.info"
141       - public
142       - system-info.txt
143   retry:
144     max: 2
145     when:
146       - runner_system_failure
147       - stuck_or_timeout_failure
148       - api_failure
149       - runner_unsupported
150       - stale_schedule
151       - job_execution_timeout
152       - archived_failure
153       - scheduler_failure
154       - data_integrity_failure
156   script:
157     # gitlab predefines CI_JOB_NAME for each job. The gitlab job usually matches the
158     # autobuild name, which means we can define a default template that runs most autobuild jobs
159     - script/autobuild.py $AUTOBUILD_JOB_NAME $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE  --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase
161 # Ensure when adding a new job below that you also add it to
162 # the dependencies for 'pages' below for the code coverage page
163 # generation.
165 others:
166   extends: .shared_template
167   script:
168     - script/autobuild.py ldb      $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/ldb
169     - script/autobuild.py pidl     $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/pidl
170     - script/autobuild.py replace  $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/replace
171     - script/autobuild.py talloc   $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/talloc
172     - script/autobuild.py tdb      $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/tdb
173     - script/autobuild.py tevent   $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/tevent
174     - script/autobuild.py samba-xc $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/samba-xc
175     - script/autobuild.py docs-xml $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/docs-xml
177 .shared_template_build_only:
178   extends: .shared_template
179   timeout: 2h
180   artifacts:
181     expire_in: 1 week
182     paths:
183       - "*.stdout"
184       - "*.stderr"
185       - "*.info"
186       - system-info.txt
187       - samba-testbase.tar.gz
188   script:
189     # gitlab predefines CI_JOB_NAME for each job. The gitlab job usually matches the
190     # autobuild name, which means we can define a default template that runs most autobuild jobs
191     - script/autobuild.py $AUTOBUILD_JOB_NAME $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE  --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase
192     # On success we need to pack everything into an artifacts file
193     # which needs to be in the git checkout.
194     # As tar doesn't handle hardlink of read-only files,
195     # we remember the acls and add write permissions
196     # before creating the archive. The consumer will apply
197     # the acls again.
198     - cp -a /sha1sum.txt /tmp/samba-testbase/image-sha1sum.txt
199     - cp -a /tmp/commit.txt /tmp/samba-testbase/commit.txt
200     - ln -s /tmp/samba-testbase/${AUTOBUILD_JOB_NAME}/ /tmp/samba-testbase/build_subdir_link
201     - pushd /tmp && getfacl -R samba-testbase > samba-testbase.acl.dump && popd
202     - chmod -R +w /tmp/samba-testbase
203     - mv /tmp/samba-testbase.acl.dump /tmp/samba-testbase/
204     - tar cfz samba-testbase.tar.gz /tmp/samba-testbase
205     - ls -la samba-testbase.tar.gz
206     - sha1sum samba-testbase.tar.gz
208 .shared_template_test_only:
209   extends:
210     - .shared_template
211     - .shared_runner_test
212   stage: test_only
213   script:
214     # We unpack the artifacts file created by the .shared_template_build_only
215     # run we depend on
216     - ls -la samba-testbase.tar.gz
217     - sha1sum samba-testbase.tar.gz
218     - tar xfz samba-testbase.tar.gz -C /
219     - diff -u /tmp/samba-testbase/image-sha1sum.txt /sha1sum.txt
220     - diff -u /tmp/samba-testbase/commit.txt /tmp/commit.txt
221     - mv /tmp/samba-testbase/samba-testbase.acl.dump /tmp/samba-testbase.acl.dump
222     - pushd /tmp && setfacl --restore=/tmp/samba-testbase.acl.dump && popd
223     - ls -la /tmp/samba-testbase/
224     - ls -la /tmp/samba-testbase/build_subdir_link
225     - ls -la /tmp/samba-testbase/build_subdir_link/
226     - if [ -n "$SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE" ]; then find /tmp/samba-testbase/build_subdir_link/ -type d -printf "'%p'\n" | xargs chmod u+w; fi
227     - ls -la /tmp/samba-testbase/build_subdir_link/
228     # gitlab predefines CI_JOB_NAME for each job. The gitlab job usually matches the
229     # autobuild name, which means we can define a default template that runs most autobuild jobs
230     - script/autobuild.py $AUTOBUILD_JOB_NAME $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --skip-dependencies --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase
232 samba-def-build:
233   extends: .shared_template_build_only
234   stage: build_first
236 .needs_samba-def-build:
237   extends: .shared_template_test_only
238   needs:
239     - job: samba-def-build
240       artifacts: true
242 samba-mit-build:
243   extends: .shared_template_build_only
244   variables:
245     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora34}
246   stage: build_first
248 .needs_samba-mit-build:
249   extends: .shared_template_test_only
250   variables:
251     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora34}
252   needs:
253     - job: samba-mit-build
254       artifacts: true
256 samba-h5l-build:
257   extends: .shared_template_build_only
259 .needs_samba-h5l-build:
260   extends: .shared_template_test_only
261   needs:
262     - job: samba-h5l-build
263       artifacts: true
265 samba-nt4-build:
266   extends: .shared_template_build_only
268 .needs_samba-nt4-build:
269   extends: .shared_template_test_only
270   needs:
271     - job: samba-nt4-build
272       artifacts: true
274 samba-no-opath-build:
275   extends: .shared_template_build_only
277 .needs_samba-no-opath-build:
278   extends: .shared_template_test_only
279   needs:
280     - job: samba-no-opath-build
281       artifacts: true
283 samba:
284   extends: .shared_template
286 samba-mitkrb5:
287   extends: .shared_template
288   variables:
289     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora34}
291 samba-minimal-smbd:
292   extends: .shared_template
294 samba-nopython:
295   extends: .shared_template
297 samba-admem:
298   extends: .needs_samba-def-build
300 samba-ad-dc-2:
301   extends: .needs_samba-def-build
303 samba-ad-dc-3:
304   extends: .needs_samba-def-build
306 samba-ad-dc-4a:
307   extends: .needs_samba-def-build
309 samba-ad-dc-4b:
310   extends: .needs_samba-def-build
312 samba-ad-dc-5:
313   extends: .needs_samba-def-build
315 samba-ad-dc-6:
316   extends: .needs_samba-def-build
318 samba-ad-back1:
319   extends: .needs_samba-def-build
321 samba-ad-back2:
322   extends: .needs_samba-def-build
324 samba-schemaupgrade:
325   extends: .needs_samba-def-build
327 samba-libs:
328   extends: .shared_template
330 samba-fuzz:
331   extends: .shared_template
332   variables:
333     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_ubuntu2004}
335 ctdb:
336   extends: .shared_template
338 samba-ctdb:
339   extends: .shared_template
341 samba-ad-dc-ntvfs:
342   extends: .needs_samba-def-build
344 samba-admem-mit:
345   extends: .needs_samba-mit-build
347 samba-addc-mit-4a:
348   extends: .needs_samba-mit-build
350 samba-addc-mit-4b:
351   extends: .needs_samba-mit-build
353 # This task is run first to ensure we compile before we start the
354 # main run as it is the fastest full compile of Samba.
355 samba-fips:
356   extends: .shared_template
357   variables:
358     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora34}
360 .private_test_only:
361   extends: .private_runner_test
362   stage: test_private
363   rules:
364       # See above, to avoid a duplicate CI on the MR (these rules override the others)
365     - if: $CI_MERGE_REQUEST_ID
366       when: never
368       # These jobs are only run if the gitlab repo has private runners available.
369       # To enable private jobs, you must add the following var and value to
370       # your gitlab repo by navigating to:
371       # settings -> CI/CD -> Environment variables
372     - if: $SUPPORT_PRIVATE_TEST == "yes"
374 .needs_samba-def-build-private:
375   extends:
376     - .needs_samba-def-build
377     - .private_test_only
379 .needs_samba-mit-build-private:
380   extends:
381     - .needs_samba-mit-build
382     - .private_test_only
384 .needs_samba-h5l-build-private:
385   extends:
386     - .needs_samba-h5l-build
387     - .private_test_only
389 .needs_samba-nt4-build-private:
390   extends:
391     - .needs_samba-nt4-build
392     - .private_test_only
394 .needs_samba-no-opath-build-private:
395   extends:
396     - .needs_samba-no-opath-build
397     - .private_test_only
399 samba-fileserver:
400   extends: .needs_samba-h5l-build-private
402 # This is a full build without the AD DC so we test the build with MIT
403 # Kerberos from the default system (Ubuntu 18.04 at this stage).
404 # Runtime behaviour checked via the ktest (static ccache and keytab)
405 # environment
406 samba-ktest-mit:
407  extends: .shared_template
409 samba-ad-dc-1:
410   extends: .needs_samba-def-build-private
412 samba-nt4:
413   extends: .needs_samba-nt4-build-private
415 samba-addc-mit-1:
416   extends: .needs_samba-mit-build-private
418 samba-no-opath1:
419   extends: .needs_samba-no-opath-build-private
421 samba-no-opath2:
422   extends: .needs_samba-no-opath-build-private
424 # 'pages' is a special job which can publish artifacts in `public` dir to gitlab pages
425 pages:
426   extends: .shared_runner_build_image
427   stage: report
428   dependencies:  # tell gitlab to download artifacts for these jobs
429     - others
430     - samba
431     - samba-mitkrb5
432     - samba-admem
433     - samba-ad-dc-2
434     - samba-ad-dc-3
435     - samba-ad-dc-4a
436     - samba-ad-dc-4b
437     - samba-ad-dc-5
438     - samba-ad-dc-6
439     - samba-libs
440     - samba-minimal-smbd
441     - samba-nopython
442     - samba-fuzz
443     # - ctdb  # TODO
444     - samba-ctdb
445     - samba-ad-dc-ntvfs
446     - samba-admem-mit
447     - samba-addc-mit-4a
448     - samba-addc-mit-4b
449     - samba-ad-back1
450     - samba-ad-back2
451     - samba-fileserver
452     - samba-ad-dc-1
453     - samba-nt4
454     - samba-schemaupgrade
455     - samba-addc-mit-1
456     - samba-fips
457     - samba-no-opath1
458     - samba-no-opath2
459     - ubuntu1804-samba-o3
460   script:
461     - ls -la *.info
462     - ./configure.developer
463     - make -j
464     - ls -la *.info
465     - lcov $(ls *.info | xargs -I{} echo -n "-a {} ") -o all.info
466     - ls -la *.info
467     - genhtml all.info --ignore-errors source --output-directory public --prefix=$(pwd) --title "coverage report for $CI_COMMIT_REF_NAME $CI_COMMIT_SHORT_SHA"
468   artifacts:
469     expire_in: 30 days
470     paths:
471       - public
472   only:
473     variables:
474       - $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE == "--enable-coverage"
476 # Coverity Scan
477 coverity:
478   extends: .shared_runner_build_image
479   variables:
480     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora34}
481   stage: build
482   script:
483     - wget https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_SCAN_TOKEN&project=$COVERITY_SCAN_PROJECT_NAME" -O /tmp/coverity_tool.tgz
484     - tar xf /tmp/coverity_tool.tgz
485     - ./configure.developer --with-cluster-support --with-system-mitkrb5 --with-experimental-mit-ad-dc
486     - cov-analysis-linux64-*/bin/cov-build --dir cov-int make -j$(nproc)
487     - tar czf cov-int.tar.gz cov-int
488     - curl
489       --form token=$COVERITY_SCAN_TOKEN
490       --form email=$COVERITY_SCAN_EMAIL
491       --form file=@cov-int.tar.gz
492       --form version="`git describe --tags`"
493       --form description="CI build"
494       https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME
495   only:
496     refs:
497       - master
498       - schedules
499     variables:
500       - $COVERITY_SCAN_TOKEN != null
501       - $COVERITY_SCAN_PROJECT_NAME != null
502       - $COVERITY_SCAN_EMAIL != null
503   artifacts:
504     expire_in: 1 week
505     when: on_failure
506     paths:
507       - cov-int/*.txt
510 # We build samba-o3 on all supported distributions
513 # This job, which matches the main CI, needs to still do coverage so
514 # we show the coverage on the "none" environment tests
516 # We want --enable-coverage specified here otherwise we will have a
517 # different set of build options on the coverage build and can fail
518 # when -O3 gets combined with --enable-coverage in the scheduled
519 # builds.
521 ubuntu1804-samba-o3:
522   extends: .shared_template
523   variables:
524     AUTOBUILD_JOB_NAME: samba-o3
525     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_ubuntu1804}
526     SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE: "--enable-coverage"
527   rules:
528     # See above, to avoid a duplicate CI on the MR (these rules override the others)
529     - if: $CI_MERGE_REQUEST_ID
530       when: never
531     # do not run o3 builds (which run a lot of VMs) if told not to
532     # (this uses the same variable as autobuild.py)
533     - if: $AUTOBUILD_SKIP_SAMBA_O3 == "1"
534       when: never
536 # All other jobs do not want code coverage.
537 .samba-o3-template:
538   extends: .shared_template
539   variables:
540     AUTOBUILD_JOB_NAME: samba-o3
541   rules:
542     # See above, to avoid a duplicate CI on the MR (these rules override the others)
543     - if: $CI_MERGE_REQUEST_ID
544       when: never
545     # do not run o3 builds (which run a lot of VMs) if told not to
546     # (this uses the same variable as autobuild.py)
547     - if: $AUTOBUILD_SKIP_SAMBA_O3 == "1"
548       when: never
549     # do not run o3 for coverage since they are using different images
550     - if: $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE == ""
552 ubuntu2004-samba-o3:
553   extends: .samba-o3-template
554   variables:
555     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_ubuntu2004}
557 debian10-samba-o3:
558   extends: .samba-o3-template
559   variables:
560     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_debian10}
562 opensuse151-samba-o3:
563   extends: .samba-o3-template
564   variables:
565     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_opensuse151}
567 opensuse152-samba-o3:
568   extends: .samba-o3-template
569   variables:
570     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_opensuse152}
572 centos7-samba-o3:
573   extends: .samba-o3-template
574   variables:
575     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_centos7}
576     # Git on CentOS doesn't support shallow git cloning
577     GIT_DEPTH: ""
578     # We need a newer GnuTLS version on CentOS7
579     PKG_CONFIG_PATH: "/usr/lib64/compat-gnutls34/pkgconfig:/usr/lib64/compat-nettle32/pkgconfig"
581 centos8-samba-o3:
582   extends: .samba-o3-template
583   variables:
584     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_centos8}
586 fedora33-samba-o3:
587   extends: .samba-o3-template
588   variables:
589     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora33}
591 fedora34-samba-o3:
592   extends: .samba-o3-template
593   variables:
594     SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora34}
597 # Keep the samba-o3 sections at the end ...