1 # see https://docs.gitlab.com/ce/ci/yaml/README.html for all available options
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
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"
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.
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
40 SAMBA_CI_CONTAINER_REGISTRY: registry.gitlab.com/samba-team/devel/samba
42 # Set this to the contents of bootstrap/sha1sum.txt
43 # which is generated by bootstrap/template.py --render
45 SAMBA_CI_CONTAINER_TAG: f25e1fa0a828f428ade0e4f37d8a646ff1e207d4
47 # We use the ubuntu1804 image as default as
48 # it matches what we have on sn-devel-184.
50 SAMBA_CI_CONTAINER_IMAGE: ubuntu1804
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
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_fedora32: fedora32
64 SAMBA_CI_CONTAINER_IMAGE_fedora33: fedora33
65 SAMBA_CI_CONTAINER_IMAGE_centos7: centos7
66 SAMBA_CI_CONTAINER_IMAGE_centos8: centos8
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
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}
80 extends: .shared_runner_build_image
81 # All Samba jobs are interruptible, this avoids burning CPU when a
82 # newer branch is pushed.
87 AUTOBUILD_JOB_NAME: $CI_JOB_NAME
90 key: ccache.${CI_JOB_NAME}.${SAMBA_CI_JOB_IMAGE}.${SAMBA_CI_FLAVOR}
103 # ld will fail if coverage enabled, force link ld to ld.bfd
104 - if [ -n "$SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE" ]; then sudo ln -sf $(which ld.bfd) $(which ld); fi
105 # See bootstrap/.gitlab-ci.yml how to generate a new image
106 - echo "SAMBA_CI_CONTAINER_REGISTRY[${SAMBA_CI_CONTAINER_REGISTRY}]"
107 - echo "SAMBA_CI_CONTAINER_TAG[${SAMBA_CI_CONTAINER_TAG}]"
108 - echo "SAMBA_CI_JOB_IMAGE[${SAMBA_CI_JOB_IMAGE}]"
109 - echo "CI_JOB_IMAGE[${CI_JOB_IMAGE}]"
110 - bootstrap/template.py --sha1sum > /tmp/sha1sum-template.txt
111 - diff -u bootstrap/sha1sum.txt /tmp/sha1sum-template.txt
112 - echo "${SAMBA_CI_CONTAINER_TAG}" > /tmp/sha1sum-tag.txt
113 - diff -u bootstrap/sha1sum.txt /tmp/sha1sum-tag.txt
114 - diff -u bootstrap/sha1sum.txt /sha1sum.txt
115 - echo "${CI_COMMIT_SHA} ${CI_COMMIT_TITLE}" > /tmp/commit.txt
116 - export CCACHE_BASEDIR="${PWD}"
117 - export CCACHE_DIR="${PWD}/ccache" && mkdir -pv "$CCACHE_DIR"
118 - export CC="ccache cc"
119 - export CXX="ccache c++"
127 - CCACHE_BASEDIR="${PWD}" CCACHE_DIR="${PWD}/ccache" ccache -s -c
138 - runner_system_failure
139 - stuck_or_timeout_failure
143 - job_execution_timeout
146 - data_integrity_failure
149 # gitlab predefines CI_JOB_NAME for each job. The gitlab job usually matches the
150 # autobuild name, which means we can define a default template that runs most autobuild jobs
151 - script/autobuild.py $AUTOBUILD_JOB_NAME $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase
153 # Ensure when adding a new job below that you also add it to
154 # the dependencies for 'pages' below for the code coverage page
158 extends: .shared_template
160 - script/autobuild.py ldb $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/ldb
161 - script/autobuild.py pidl $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/pidl
162 - script/autobuild.py replace $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/replace
163 - script/autobuild.py talloc $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/talloc
164 - script/autobuild.py tdb $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/tdb
165 - script/autobuild.py tevent $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/tevent
166 - script/autobuild.py samba-xc $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/samba-xc
167 - script/autobuild.py docs-xml $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase/docs-xml
169 .shared_template_build_only:
170 extends: .shared_template
179 - samba-testbase.tar.gz
181 # gitlab predefines CI_JOB_NAME for each job. The gitlab job usually matches the
182 # autobuild name, which means we can define a default template that runs most autobuild jobs
183 - script/autobuild.py $AUTOBUILD_JOB_NAME $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase
184 # On success we need to pack everything into an artifacts file
185 # which needs to be in the git checkout.
186 # As tar doesn't handle hardlink of read-only files,
187 # we remember the acls and add write permissions
188 # before creating the archive. The consumer will apply
190 - cp -a /sha1sum.txt /tmp/samba-testbase/image-sha1sum.txt
191 - cp -a /tmp/commit.txt /tmp/samba-testbase/commit.txt
192 - ln -s /tmp/samba-testbase/${AUTOBUILD_JOB_NAME}/ /tmp/samba-testbase/build_subdir_link
193 - pushd /tmp && getfacl -R samba-testbase > samba-testbase.acl.dump && popd
194 - chmod -R +w /tmp/samba-testbase
195 - mv /tmp/samba-testbase.acl.dump /tmp/samba-testbase/
196 - tar cfz samba-testbase.tar.gz /tmp/samba-testbase
197 - ls -la samba-testbase.tar.gz
198 - sha1sum samba-testbase.tar.gz
200 .shared_template_test_only:
203 - .shared_runner_test
206 # We unpack the artifacts file created by the .shared_template_build_only
208 - ls -la samba-testbase.tar.gz
209 - sha1sum samba-testbase.tar.gz
210 - tar xfz samba-testbase.tar.gz -C /
211 - diff -u /tmp/samba-testbase/image-sha1sum.txt /sha1sum.txt
212 - diff -u /tmp/samba-testbase/commit.txt /tmp/commit.txt
213 - mv /tmp/samba-testbase/samba-testbase.acl.dump /tmp/samba-testbase.acl.dump
214 - pushd /tmp && setfacl --restore=/tmp/samba-testbase.acl.dump && popd
215 - ls -la /tmp/samba-testbase/
216 - ls -la /tmp/samba-testbase/build_subdir_link
217 - ls -la /tmp/samba-testbase/build_subdir_link/
218 - 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
219 - ls -la /tmp/samba-testbase/build_subdir_link/
220 # gitlab predefines CI_JOB_NAME for each job. The gitlab job usually matches the
221 # autobuild name, which means we can define a default template that runs most autobuild jobs
222 - script/autobuild.py $AUTOBUILD_JOB_NAME $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE --skip-dependencies --verbose --nocleanup --keeplogs --tail --full-testbase /tmp/samba-testbase
225 extends: .shared_template_build_only
228 .needs_samba-def-build:
229 extends: .shared_template_test_only
231 - job: samba-def-build
235 extends: .shared_template_build_only
238 .needs_samba-mit-build:
239 extends: .shared_template_test_only
241 - job: samba-mit-build
245 extends: .shared_template_build_only
247 .needs_samba-h5l-build:
248 extends: .shared_template_test_only
250 - job: samba-h5l-build
254 extends: .shared_template_build_only
256 .needs_samba-nt4-build:
257 extends: .shared_template_test_only
259 - job: samba-nt4-build
262 samba-no-opath-build:
263 extends: .shared_template_build_only
265 .needs_samba-no-opath-build:
266 extends: .shared_template_test_only
268 - job: samba-no-opath-build
272 extends: .shared_template
275 extends: .shared_template
278 extends: .shared_template
281 extends: .shared_template
284 extends: .needs_samba-def-build
287 extends: .needs_samba-def-build
290 extends: .needs_samba-def-build
293 extends: .needs_samba-def-build
296 extends: .needs_samba-def-build
299 extends: .needs_samba-def-build
302 extends: .needs_samba-def-build
305 extends: .needs_samba-def-build
308 extends: .needs_samba-def-build
311 extends: .needs_samba-def-build
314 extends: .shared_template
317 extends: .shared_template
319 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_ubuntu1604}
322 extends: .shared_template
325 extends: .shared_template
328 extends: .needs_samba-def-build
331 extends: .needs_samba-mit-build
333 samba-ad-dc-4a-mitkrb5:
334 extends: .needs_samba-mit-build
336 samba-ad-dc-4b-mitkrb5:
337 extends: .needs_samba-mit-build
339 # This task is run first to ensure we compile before we start the
340 # main run as it is the fastest full compile of Samba.
342 extends: .shared_template
344 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora33}
347 extends: .private_runner_test
351 # These jobs are only run if the gitlab repo has private runners available.
352 # To enable private jobs, you must add the following var and value to
353 # your gitlab repo by navigating to:
354 # settings -> CI/CD -> Environment variables
355 - $SUPPORT_PRIVATE_TEST == "yes"
357 .needs_samba-def-build-private:
359 - .needs_samba-def-build
362 .needs_samba-mit-build-private:
364 - .needs_samba-mit-build
367 .needs_samba-h5l-build-private:
369 - .needs_samba-h5l-build
372 .needs_samba-nt4-build-private:
374 - .needs_samba-nt4-build
377 .needs_samba-no-opath-build-private:
379 - .needs_samba-no-opath-build
383 extends: .needs_samba-h5l-build-private
386 extends: .needs_samba-def-build-private
389 extends: .needs_samba-nt4-build-private
391 samba-ad-dc-1-mitkrb5:
392 extends: .needs_samba-mit-build-private
395 extends: .needs_samba-no-opath-build-private
398 extends: .needs_samba-no-opath-build-private
400 # 'pages' is a special job which can publish artifacts in `public` dir to gitlab pages
402 extends: .shared_runner_build_image
404 dependencies: # tell gitlab to download artifacts for these jobs
423 - samba-ad-dc-4a-mitkrb5
424 - samba-ad-dc-4b-mitkrb5
430 - samba-schemaupgrade
431 - samba-ad-dc-1-mitkrb5
437 - ./configure.developer
440 - lcov $(ls *.info | xargs -I{} echo -n "-a {} ") -o all.info
442 - genhtml all.info --output-directory public --prefix=$(pwd) --title "coverage report for $CI_COMMIT_REF_NAME $CI_COMMIT_SHORT_SHA"
449 - $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE == "--enable-coverage"
453 extends: .shared_runner_build_image
455 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora33}
458 - wget https://scan.coverity.com/download/linux64 --post-data "token=$COVERITY_SCAN_TOKEN&project=$COVERITY_SCAN_PROJECT_NAME" -O /tmp/coverity_tool.tgz
459 - tar xf /tmp/coverity_tool.tgz
460 - ./configure.developer --with-cluster-support --with-system-mitkrb5 --with-experimental-mit-ad-dc
461 - cov-analysis-linux64-*/bin/cov-build --dir cov-int make -j$(nproc)
462 - tar czf cov-int.tar.gz cov-int
464 --form token=$COVERITY_SCAN_TOKEN
465 --form email=$COVERITY_SCAN_EMAIL
466 --form file=@cov-int.tar.gz
467 --form version="`git describe --tags`"
468 --form description="CI build"
469 https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME
475 - $COVERITY_SCAN_TOKEN != null
476 - $COVERITY_SCAN_PROJECT_NAME != null
477 - $COVERITY_SCAN_EMAIL != null
485 # We build samba-o3 on all supported distributions
489 extends: .shared_template
491 AUTOBUILD_JOB_NAME: samba-o3
494 # do not run o3 for coverage since they are using different images
495 - $SAMBA_CI_AUTOBUILD_ENABLE_COVERAGE == ""
498 extends: .samba-o3-template
500 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_ubuntu1804}
503 extends: .samba-o3-template
505 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_ubuntu2004}
508 extends: .samba-o3-template
510 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_debian10}
512 opensuse151-samba-o3:
513 extends: .samba-o3-template
515 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_opensuse151}
517 opensuse152-samba-o3:
518 extends: .samba-o3-template
520 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_opensuse152}
523 extends: .samba-o3-template
525 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_centos7}
526 # Git on CentOS doesn't support shallow git cloning
528 # We need a newer GnuTLS version on CentOS7
529 PKG_CONFIG_PATH: "/usr/lib64/compat-gnutls34/pkgconfig:/usr/lib64/compat-nettle32/pkgconfig"
532 extends: .samba-o3-template
534 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_centos8}
537 extends: .samba-o3-template
539 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora32}
542 extends: .samba-o3-template
544 SAMBA_CI_JOB_IMAGE: ${SAMBA_CI_CONTAINER_IMAGE_fedora33}
547 # Keep the samba-o3 sections at the end ...