From a7eab1303ebe31aadefdcb41579e0d9b7e94eef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20=C5=A0pa=C4=8Dek?= Date: Wed, 5 May 2021 17:21:23 +0200 Subject: [PATCH] WIP: multi-pipeline rebased on top of Ondrej's mighty taskmgr branch --- .gitlab-ci.yml | 1115 ++---------------------------------------------- 1 file changed, 41 insertions(+), 1074 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a6ad5dfd6d..331089dabc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -39,25 +39,29 @@ variables: # In multithreaded unit tests, abort on the first failure CMOCKA_TEST_ABORT: 1 - # Disable pytest's "cacheprovider" plugin to prevent it from creating - # cross-testrun files as there is no need to use that feature in CI. - PYTEST_ADDOPTS: "-p no:cacheprovider" - # Default platforms to run "stress" tests on BIND_STRESS_TEST_OS: linux BIND_STRESS_TEST_ARCH: amd64 + SHOTGUN_SCENARIO: + value: "udp" + description: "protocol combination to be tested, must be one of https://gitlab.nic.cz/knot/resolver-benchmarking/-/tree/master/roles/shotgun/files" + SHOTGUN_DURATION: + value: 60 + description: "test length in seconds" + SHOTGUN_TRAFFIC_MULTIPLIER: + value: 10 + description: "multiply client traffic, base value 1 = roughly 8 k QPS" + SHOTGUN_PERF_PROFILER: + value: "true" + description: "true/false = enable/disable profiling, disable for runs longer than 1 minute" + EXPERIMENT_CUSTOM_VERSION: + value: "$CI_COMMIT_SHA" + description: "DO NOT USE; this field does nothing for now" + stages: - - autoconf - - precheck - - build - - unit - - system - performance - - docs - - push - - postcheck - - release + - performance2 ### Runner Tag Templates @@ -215,7 +219,6 @@ stages: --disable-maintainer-mode \ --enable-developer \ --enable-option-checking=fatal \ - --enable-dnstap \ --with-cmocka \ --with-libxml2 \ --with-json-c \ @@ -430,1068 +433,32 @@ stages: # Jobs in the precheck stage -autoreconf: - <<: *autoconf_job - -misc: - <<: *precheck_job - script: - - sh util/checklibs.sh > checklibs.out - - sh util/tabify-changes < CHANGES > CHANGES.tmp - - diff -urNap CHANGES CHANGES.tmp - - perl util/check-changes CHANGES - - sh util/check-line-length.sh CHANGES - - test ! -f CHANGES.SE || sh util/tabify-changes < CHANGES.SE > CHANGES.tmp - - test ! -f CHANGES.SE || diff -urNap CHANGES.SE CHANGES.tmp - - test ! -f CHANGES.SE || perl util/check-changes master=0 CHANGES.SE - - test ! -f CHANGES.SE || sh util/check-line-length.sh CHANGES.SE - - rm CHANGES.tmp - - perl -w util/merge_copyrights - - diff -urNap util/copyrights util/newcopyrights - - rm util/newcopyrights - - perl -w util/update_copyrights < util/copyrights - - if test "$(git status --porcelain | grep -Ev '\?\?' | wc -l)" -gt "0"; then git status --short; exit 1; fi - - xmllint --noout --nonet `git ls-files '*.xml' '*.docbook'` - - sh util/check-win32util-configure - - sh util/check-categories.sh - - if git grep SYSTEMTESTTOP -- ':!.gitlab-ci.yml'; then echo 'Please use relative paths instead of $SYSTEMTESTTOP.'; exit 1; fi - - bash util/unused-headers.sh - needs: [] - artifacts: - paths: - - util/newcopyrights - - checklibs.out - expire_in: "1 day" - when: on_failure - -clang-format: - <<: *precheck_job - needs: [] - script: - - if [ -r .clang-format ]; then "${CLANG_FORMAT}" -i -style=file $(git ls-files '*.c' '*.h'); fi - - if test "$(git status --porcelain | grep -Ev '\?\?' | wc -l)" -gt "0"; then git status --short; exit 1; fi - -coccinelle: - <<: *precheck_job - needs: [] - script: - - util/check-cocci - - if test "$(git status --porcelain | grep -Ev '\?\?' | wc -l)" -gt "0"; then git status --short; exit 1; fi - -danger: - <<: *precheck_job - needs: [] - script: - - danger-python ci -f - only: - refs: - - merge_requests - variables: - - $DANGER_GITLAB_API_TOKEN - -flake8: - <<: *default_triggering_rules - <<: *base_image - stage: postcheck - needs: - - job: autoreconf - artifacts: true - script: - - *configure - - flake8 --max-line-length=80 $(git ls-files '*.py' | grep -vE '(ans\.py|dangerfile\.py)') - -pylint: - <<: *default_triggering_rules - <<: *base_image - stage: postcheck - needs: - - job: autoreconf - artifacts: true - script: - - *configure - - PYTHONPATH="$PYTHONPATH:$CI_PROJECT_DIR/bin/python" - - pylint --rcfile $CI_PROJECT_DIR/.pylintrc $(git ls-files '*.py' | grep -vE '(ans\.py|dangerfile\.py)') - -tarball-create: - stage: precheck - <<: *base_image - <<: *default_triggering_rules - script: - - ./configure --enable-maintainer-mode - - make maintainer-clean - - autoreconf -fi - - ./configure --enable-maintainer-mode - - make -j${BUILD_PARALLEL_JOBS:-1} all V=1 - - if test "$(git status --porcelain | grep -Ev '\?\?' | wc -l)" -gt "0"; then git status --short; exit 1; fi - - make -j${BUILD_PARALLEL_JOBS:-1} dist V=1 - artifacts: - paths: - - bind-*.tar.${TARBALL_EXTENSION} - needs: - - job: autoreconf - artifacts: true - -# Jobs for doc builds on Debian 10 "buster" (amd64) - -docs: - <<: *release_branch_triggering_rules - <<: *base_image - stage: docs - before_script: - - test -w "${CCACHE_DIR}" && export PATH="/usr/lib/ccache:${PATH}" - script: - - *configure - - make -j${BUILD_PARALLEL_JOBS:-1} -k doc V=1 - - qpdf --check doc/arm/_build/latex/Bv9ARM.pdf - - find doc/man/ -maxdepth 1 -name "*.[0-9]" -exec mandoc -T lint "{}" \; | ( ! grep -v -e "skipping paragraph macro. sp after" -e "unknown font, skipping request. ft C" ) - needs: - - job: autoreconf - artifacts: true - allow_failure: false - artifacts: - paths: - - doc/arm/ - - doc/man/ - - doc/misc/ - expire_in: "1 month" - -push:docs: - <<: *base_image - stage: push - needs: - - job: docs - artifacts: false - script: - - curl -X POST -F token=$GITLAB_PAGES_DOCS_TRIGGER_TOKEN -F ref=main $GITLAB_PAGES_DOCS_TRIGGER_URL - only: - - main@isc-projects/bind9 - - /^v9_[1-9][0-9]$/@isc-projects/bind9 - -# Jobs for regular GCC builds on Alpine Linux 3.13 (amd64) - -gcc:alpine3.13:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "${WITHOUT_READLINE}" - <<: *alpine_3_13_amd64_image - <<: *build_job - -system:gcc:alpine3.13:amd64: - <<: *alpine_3_13_amd64_image - <<: *system_test_job - needs: - - job: gcc:alpine3.13:amd64 - artifacts: true - -unit:gcc:alpine3.13:amd64: - <<: *alpine_3_13_amd64_image - <<: *unit_test_job - needs: - - job: gcc:alpine3.13:amd64 - artifacts: true - -# Jobs for regular GCC builds on CentOS 7 (amd64) - -gcc:centos7:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "--with-libidn2" - <<: *centos_centos7_amd64_image - <<: *build_job - -system:gcc:centos7:amd64: - <<: *centos_centos7_amd64_image - <<: *system_test_job - needs: - - job: gcc:centos7:amd64 - artifacts: true - -unit:gcc:centos7:amd64: - <<: *centos_centos7_amd64_image - <<: *unit_test_job - needs: - - job: gcc:centos7:amd64 - artifacts: true - -# Jobs for regular GCC builds on CentOS 8 (amd64) - -gcc:centos8:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "--enable-buffer-useinline --with-libidn2" - <<: *centos_centos8_amd64_image - <<: *build_job - -system:gcc:centos8:amd64: - <<: *centos_centos8_amd64_image - <<: *system_test_job - needs: - - job: gcc:centos8:amd64 - artifacts: true - -unit:gcc:centos8:amd64: - <<: *centos_centos8_amd64_image - <<: *unit_test_job - needs: - - job: gcc:centos8:amd64 - artifacts: true - -# Jobs for regular GCC builds on Debian 9 "stretch" (amd64) - -gcc:stretch:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -O2" - EXTRA_CONFIGURE: "--without-cmocka --without-gssapi" - <<: *debian_stretch_amd64_image - <<: *build_job - -system:gcc:stretch:amd64: - <<: *debian_stretch_amd64_image - <<: *system_test_job - needs: - - job: gcc:stretch:amd64 - artifacts: true - -unit:gcc:stretch:amd64: - <<: *debian_stretch_amd64_image - <<: *unit_test_job - needs: - - job: gcc:stretch:amd64 - artifacts: true - -# Jobs for regular GCC builds on Debian 10 "buster" (amd64) - -gcc:buster:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} --coverage -O0" - EXTRA_CONFIGURE: "--with-libidn2 ${WITH_READLINE_LIBEDIT}" - <<: *debian_buster_amd64_image - <<: *build_job - -system:gcc:buster:amd64: - <<: *debian_buster_amd64_image - <<: *system_test_gcov_job - needs: - - job: unit:gcc:buster:amd64 - artifacts: true - -unit:gcc:buster:amd64: - <<: *debian_buster_amd64_image - <<: *unit_test_gcov_job - needs: - - job: gcc:buster:amd64 - artifacts: true - -# Jobs for scan-build builds on Debian 10 "buster" (amd64) - -.scan_build: &scan_build | - ${SCAN_BUILD} --html-title="BIND 9 ($CI_COMMIT_SHORT_SHA)" \ - --keep-cc \ - --status-bugs \ - --keep-going \ - -o scan-build.reports \ - make -j${BUILD_PARALLEL_JOBS:-1} all V=1 - -scan-build: - <<: *default_triggering_rules - <<: *base_image - stage: postcheck - variables: - CC: "${CLANG}" - CFLAGS: "${CFLAGS_COMMON}" - CONFIGURE: "${SCAN_BUILD} ./configure" - EXTRA_CONFIGURE: "--with-libidn2" - script: - - *configure - - *scan_build - needs: - - job: autoreconf - artifacts: true - artifacts: - paths: - - scan-build.reports/ - expire_in: "1 day" - when: on_failure - -# Jobs for regular GCC builds on Debian "sid" (amd64) -# Also tests configration option: --without-lmdb. - -gcc:sid:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -O3" - EXTRA_CONFIGURE: "--with-libidn2 --without-lmdb" - RUN_MAKE_INSTALL: 1 - <<: *debian_sid_amd64_image - <<: *build_job - -system:gcc:sid:amd64: - <<: *debian_sid_amd64_image - <<: *system_test_job - needs: - - job: gcc:sid:amd64 - artifacts: true - -unit:gcc:sid:amd64: - <<: *debian_sid_amd64_image - <<: *unit_test_job - needs: - - job: gcc:sid:amd64 - artifacts: true - -cppcheck: - <<: *base_image - <<: *cppcheck_job - -# Job for out-of-tree GCC build on Debian "sid" (amd64) -# Also tests configration option: --with-lmdb. - -gcc:out-of-tree: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -Og" - CONFIGURE: "${CI_PROJECT_DIR}/configure" - EXTRA_CONFIGURE: "--with-libidn2 --with-lmdb" - RUN_MAKE_INSTALL: 1 - OUT_OF_TREE_WORKSPACE: /tmp/out_of_tree_workspace - <<: *base_image - <<: *build_job - -system:gcc:out-of-tree: - variables: - OUT_OF_TREE_WORKSPACE: /tmp/out_of_tree_workspace - needs: - - job: gcc:out-of-tree - artifacts: true - <<: *base_image - <<: *system_test_job - only: - - schedules - - tags - - web - -# Jobs for tarball GCC builds on Debian 10 "buster" (amd64) - -gcc:tarball: - variables: - CC: gcc - EXTRA_CONFIGURE: "--with-libidn2" - RUN_MAKE_INSTALL: 1 - <<: *base_image - <<: *build_job - before_script: - - tar --extract --file bind-*.tar.${TARBALL_EXTENSION} - - rm -f bind-*.tar.${TARBALL_EXTENSION} - - cd bind-* - needs: - - job: tarball-create - artifacts: true - only: - - schedules - - tags - - web - -system:gcc:tarball: - <<: *base_image - <<: *system_test_job - before_script: - - cd bind-* - - *setup_interfaces - needs: - - job: gcc:tarball - artifacts: true - only: - - schedules - - tags - - web - -unit:gcc:tarball: - <<: *base_image - <<: *unit_test_job - before_script: - - cd bind-* - needs: - - job: gcc:tarball - artifacts: true - only: - - schedules - - tags - - web - -# Jobs for debug GCC builds on openSUSE Tumbleweed (amd64) - -gcc:tumbleweed:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -DDEBUG" - EXTRA_CONFIGURE: "--with-libidn2 ${WITH_READLINE_READLINE}" - <<: *tumbleweed_latest_amd64_image - <<: *build_job - -system:gcc:tumbleweed:amd64: - <<: *tumbleweed_latest_amd64_image - <<: *system_test_job - needs: - - job: gcc:tumbleweed:amd64 - artifacts: true - -unit:gcc:tumbleweed:amd64: - <<: *tumbleweed_latest_amd64_image - <<: *unit_test_job - needs: - - job: gcc:tumbleweed:amd64 - artifacts: true - -# Jobs for regular GCC builds on Ubuntu 20.04 Focal Fossa (amd64) - -gcc:focal:amd64: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -Og" - EXTRA_CONFIGURE: "--with-libidn2" - <<: *ubuntu_focal_amd64_image - <<: *build_job - -system:gcc:focal:amd64: - <<: *ubuntu_focal_amd64_image - <<: *system_test_job - needs: - - job: gcc:focal:amd64 - artifacts: true - -unit:gcc:focal:amd64: - <<: *ubuntu_focal_amd64_image - <<: *unit_test_job - needs: - - job: gcc:focal:amd64 - artifacts: true - -# Jobs for ASAN builds on Debian 10 "buster" (amd64) - -gcc:asan: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -fsanitize=address,undefined" - LDFLAGS: "-fsanitize=address,undefined" - EXTRA_CONFIGURE: "--with-libidn2" - <<: *base_image - <<: *build_job - -system:gcc:asan: - variables: - ASAN_OPTIONS: ${ASAN_OPTIONS_COMMON} - <<: *base_image - <<: *system_test_job - needs: - - job: gcc:asan - artifacts: true - -unit:gcc:asan: - variables: - ASAN_OPTIONS: ${ASAN_OPTIONS_COMMON} - <<: *base_image - <<: *unit_test_job - needs: - - job: gcc:asan - artifacts: true - -clang:asan: - variables: - CC: ${CLANG} - CFLAGS: "${CFLAGS_COMMON} -fsanitize=address,undefined" - LDFLAGS: "-fsanitize=address,undefined" - EXTRA_CONFIGURE: "--with-libidn2" - <<: *base_image - <<: *build_job - -system:clang:asan: - variables: - ASAN_OPTIONS: ${ASAN_OPTIONS_COMMON} - <<: *base_image - <<: *system_test_job - needs: - - job: clang:asan - artifacts: true - -unit:clang:asan: - variables: - ASAN_OPTIONS: ${ASAN_OPTIONS_COMMON} - <<: *base_image - <<: *unit_test_job - needs: - - job: clang:asan - artifacts: true - -# Jobs for TSAN builds on Debian 10 "buster" (amd64) - -gcc:tsan: - <<: *base_image - <<: *build_job - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -fsanitize=thread" - LDFLAGS: "-fsanitize=thread" - EXTRA_CONFIGURE: "--with-libidn2 --enable-pthread-rwlock" - -system:gcc:tsan: - variables: - TSAN_OPTIONS: ${TSAN_OPTIONS_COMMON} - <<: *base_image - <<: *system_test_tsan_job - needs: - - job: gcc:tsan - artifacts: true - -unit:gcc:tsan: - variables: - TSAN_OPTIONS: ${TSAN_OPTIONS_COMMON} suppressions=$CI_PROJECT_DIR/tsan-suppressions.txt - <<: *base_image - <<: *unit_test_tsan_job - needs: - - job: gcc:tsan - artifacts: true - -clang:tsan: - <<: *base_image - <<: *build_job - variables: - CC: "${CLANG}" - CFLAGS: "${CFLAGS_COMMON} -fsanitize=thread" - LDFLAGS: "-fsanitize=thread" - EXTRA_CONFIGURE: "--with-libidn2 --enable-pthread-rwlock" - -system:clang:tsan: - variables: - TSAN_OPTIONS: ${TSAN_OPTIONS_COMMON} - <<: *base_image - <<: *system_test_tsan_job - needs: - - job: clang:tsan - artifacts: true - -unit:clang:tsan: - variables: - TSAN_OPTIONS: ${TSAN_OPTIONS_COMMON} suppressions=$CI_PROJECT_DIR/tsan-suppressions.txt - <<: *base_image - <<: *unit_test_tsan_job - needs: - - job: clang:tsan - artifacts: true - -# Jobs for builds with mutex-based atomics on Debian 10 "buster" (amd64) - -gcc:mutexatomics: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "--with-libidn2 --enable-mutex-atomics" - <<: *base_image - <<: *build_job - -system:gcc:mutexatomics: - <<: *base_image - <<: *system_test_job - needs: - - job: gcc:mutexatomics - artifacts: true - -unit:gcc:mutexatomics: - <<: *base_image - <<: *unit_test_job - needs: - - job: gcc:mutexatomics - artifacts: true - -# Jobs for Clang builds on Debian 10 "buster" (amd64) - -clang:buster:amd64: - variables: - CC: ${CLANG} - CFLAGS: "${CFLAGS_COMMON} -Wenum-conversion" - <<: *debian_buster_amd64_image - <<: *build_job - -system:clang:buster:amd64: - <<: *debian_buster_amd64_image - <<: *system_test_job - needs: - - job: clang:buster:amd64 - artifacts: true - -unit:clang:buster:amd64: - <<: *debian_buster_amd64_image - <<: *unit_test_job - needs: - - job: clang:buster:amd64 - artifacts: true - -# Jobs for PKCS#11-enabled GCC builds on Debian "sid" (amd64) - -gcc:softhsm2.4: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "--enable-native-pkcs11 --with-pkcs11=/usr/lib/softhsm/libsofthsm2.so" - <<: *base_image - <<: *build_job - -system:gcc:softhsm2.4: - <<: *base_image - <<: *system_test_job - needs: - - job: gcc:softhsm2.4 - artifacts: true - -unit:gcc:softhsm2.4: - <<: *base_image - <<: *unit_test_job - needs: - - job: gcc:softhsm2.4 - artifacts: true - -# Jobs for PKCS#11-enabled GCC builds on Fedora 33 (amd64) - -gcc:softhsm2.6: - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -O1" - EXTRA_CONFIGURE: "--with-libidn2 --enable-native-pkcs11 --with-pkcs11=/usr/lib64/pkcs11/libsofthsm2.so" - <<: *fedora_33_amd64_image - <<: *build_job - -system:gcc:softhsm2.6: - <<: *fedora_33_amd64_image - <<: *system_test_job - needs: - - job: gcc:softhsm2.6 - artifacts: true - -unit:gcc:softhsm2.6: - <<: *fedora_33_amd64_image - <<: *unit_test_job - needs: - - job: gcc:softhsm2.6 - artifacts: true - -# Jobs for Clang builds on FreeBSD 11 (amd64) - -clang:freebsd11:amd64: - variables: - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "${WITH_READLINE}" - USER: gitlab-runner - <<: *freebsd_11_amd64_image - <<: *build_job - -system:clang:freebsd11:amd64: - <<: *freebsd_11_amd64_image - <<: *system_test_job - variables: - USER: gitlab-runner - TEST_PARALLEL_JOBS: 4 - needs: - - job: clang:freebsd11:amd64 - artifacts: true - -unit:clang:freebsd11:amd64: - <<: *freebsd_11_amd64_image - <<: *unit_test_job - needs: - - job: clang:freebsd11:amd64 - artifacts: true - -# Jobs for Clang builds on FreeBSD 12 (amd64) - -clang:freebsd12:amd64: - variables: - CFLAGS: "${CFLAGS_COMMON}" - EXTRA_CONFIGURE: "${WITH_READLINE_EDITLINE}" - USER: gitlab-runner - <<: *freebsd_12_amd64_image - <<: *build_job - -system:clang:freebsd12:amd64: - <<: *freebsd_12_amd64_image - <<: *system_test_job - variables: - USER: gitlab-runner - TEST_PARALLEL_JOBS: 4 - needs: - - job: clang:freebsd12:amd64 - artifacts: true - -unit:clang:freebsd12:amd64: - <<: *freebsd_12_amd64_image - <<: *unit_test_job - needs: - - job: clang:freebsd12:amd64 - artifacts: true - -# Jobs for Clang builds on OpenBSD (amd64) - -clang:openbsd:amd64: - variables: - CC: clang - USER: gitlab-runner - EXTRA_CONFIGURE: "--disable-dnstap" - <<: *openbsd_amd64_image - <<: *build_job - -system:clang:openbsd:amd64: - <<: *openbsd_amd64_image - <<: *system_test_job - variables: - USER: gitlab-runner - needs: - - job: clang:openbsd:amd64 - artifacts: true - only: - - schedules - - web - -unit:clang:openbsd:amd64: - <<: *openbsd_amd64_image - <<: *unit_test_job - variables: - USER: gitlab-runner - # There's no socket option on OpenBSD, so we need to set this globally - TCP_CONNECTIONTIMEOUT: 1 - needs: - - job: clang:openbsd:amd64 - artifacts: true - -# Jobs for Visual Studio 2017 builds on Windows (amd64) - -msvc:windows:amd64: - <<: *windows_server_2016_amd64_image - <<: *windows_build_job - <<: *default_triggering_rules - variables: - VSCONF: Release - -system:msvc:windows:amd64: - <<: *windows_server_2016_amd64_image - <<: *windows_system_test_job - variables: - VSCONF: Release - needs: - - job: msvc:windows:amd64 - artifacts: true - -msvc-debug:windows:amd64: - <<: *windows_server_2016_amd64_image - <<: *windows_build_job - variables: - VSCONF: Debug - only: - - schedules - - tags - - web - -system:msvc-debug:windows:amd64: - <<: *windows_server_2016_amd64_image - <<: *windows_system_test_job - variables: - VSCONF: Debug - needs: - - job: msvc-debug:windows:amd64 - artifacts: true - -# Job producing a release tarball - -release: - <<: *base_image - stage: release - script: - - export BIND_DIRECTORY="$(basename "$(find . -name "bind-*.tar.*" -printf "%f")" ".tar.${TARBALL_EXTENSION}")" - # Remove redundant files and system test utilities from Windows build artifacts - - find Build/Release/ -name "*.pdb" -print -delete - - find Build/Debug/ \( -name "*.bsc" -o -name "*.idb" \) -print -delete - - find Build/ -regextype posix-extended -regex "Build/.*/($(find bin/tests/ -type f | sed -nE "s|^bin/tests(/system)?/win32/(.*)\.vcxproj$|\2|p" | paste -d"|" -s))\..*" -print -delete - # Create Windows zips - - openssl dgst -sha256 "${BIND_DIRECTORY}.tar.${TARBALL_EXTENSION}" | tee Build/Release/SHA256 Build/Debug/SHA256 - - cp "doc/arm/_build/latex/Bv9ARM.pdf" Build/Release/ - - cp "doc/arm/_build/latex/Bv9ARM.pdf" Build/Debug/ - - ( cd Build/Release; zip "../../BIND${BIND_DIRECTORY#bind-}.x64.zip" * ) - - ( cd Build/Debug; zip "../../BIND${BIND_DIRECTORY#bind-}.debug.x64.zip" * ) - # Prepare release tarball contents (tarballs + zips + documentation) - - mkdir -p release/doc/arm - - pushd release - - mv "../${BIND_DIRECTORY}.tar.${TARBALL_EXTENSION}" ../BIND*.zip . - - tar --extract --file="${BIND_DIRECTORY}.tar.${TARBALL_EXTENSION}" - - mv "${BIND_DIRECTORY}"/{CHANGES*,COPYRIGHT,LICENSE,README.md,srcid} . - - rm -rf "${BIND_DIRECTORY}" - - mv "../doc/arm/_build/html" doc/arm/ - - mv "../doc/arm/_build/latex/Bv9ARM.pdf" doc/arm/ - - mv "../doc/arm/_build/epub/Bv9ARM.epub" doc/arm/ - - echo 'Redirect' > "RELEASE-NOTES-${BIND_DIRECTORY}.html" - - popd - # Create release tarball - - tar --create --file="${CI_COMMIT_TAG}.tar.gz" --gzip release/ - needs: - - job: tarball-create - artifacts: true - - job: msvc:windows:amd64 - artifacts: true - - job: msvc-debug:windows:amd64 - artifacts: true - - job: docs - artifacts: true - only: - - tags - artifacts: - paths: - - "*.tar.gz" - expire_in: "1 day" - -# Coverity Scan analysis upload - -.coverity_cache_prep: &coverity_cache_prep | - test -f cov-analysis-linux64.md5 && test -f cov-analysis-linux64.tgz || ( - curl --output cov-analysis-linux64.md5 https://scan.coverity.com/download/linux64 \ - --form project=$COVERITY_SCAN_PROJECT_NAME \ - --form token=$COVERITY_SCAN_TOKEN \ - --form md5=1 - curl --output cov-analysis-linux64.tgz https://scan.coverity.com/download/linux64 \ - --form project=$COVERITY_SCAN_PROJECT_NAME \ - --form token=$COVERITY_SCAN_TOKEN - ) - test "$(md5sum cov-analysis-linux64.tgz | awk '{ print $1 }')" = "$(cat cov-analysis-linux64.md5)" - tar --extract --gzip --file=cov-analysis-linux64.tgz - test -d cov-analysis-linux64-2020.09 - -.coverity_build: &coverity_build | - cov-analysis-linux64-2020.09/bin/cov-build --dir cov-int sh -c 'make -j${BUILD_PARALLEL_JOBS:-1} -k all V=1' - tar --create --gzip --file=cov-int.tar.gz cov-int/ - curl -v https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME \ - --form token=$COVERITY_SCAN_TOKEN \ - --form email=bind-changes@isc.org \ - --form file=@cov-int.tar.gz \ - --form version="$(git rev-parse --short HEAD)" \ - --form description="$(git rev-parse --short HEAD) / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID" 2>&1 \ - | tee curl-response.txt - grep -q 'Build successfully submitted' curl-response.txt - -coverity: - <<: *base_image - stage: postcheck - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -Og" - EXTRA_CONFIGURE: "--with-libidn2" - script: - - *coverity_cache_prep - - *configure - - *coverity_build - needs: - - job: autoreconf - artifacts: true - artifacts: - paths: - - curl-response.txt - - cov-int.tar.gz - expire_in: "1 week" - when: on_failure - only: - variables: - - $COVERITY_SCAN_PROJECT_NAME - - $COVERITY_SCAN_TOKEN - cache: - key: cov-analysis-linux64-2020.09 - paths: - - cov-analysis-linux64.md5 - - cov-analysis-linux64.tgz - -# Respdiff test - -respdiff: - <<: *base_image - stage: system - variables: - CC: gcc - CFLAGS: "${CFLAGS_COMMON} -Og" - BIND_BASELINE_VERSION: v9_11_24 - script: - - autoreconf -fi - - ./configure - - make -j${BUILD_PARALLEL_JOBS:-1} V=1 - - *setup_interfaces - - git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.isc.org/isc-private/bind-qa.git - - git clone --branch "${BIND_BASELINE_VERSION}" --depth 1 https://gitlab.isc.org/isc-projects/bind9.git refbind - - cd refbind/ - - ./configure - - make -j${BUILD_PARALLEL_JOBS:-1} V=1 - - cd ../bind-qa/bind9/respdiff - - bash respdiff.sh -q "${PWD}/100k_mixed.txt" -c 3 -w "${PWD}/rspworkdir" "${CI_PROJECT_DIR}/refbind" "${CI_PROJECT_DIR}" - needs: - - job: tarball-create - artifacts: true - only: - - tags - artifacts: - paths: - - refbind - untracked: true - expire_in: "1 day" - when: on_failure - -# "Stress" tests - -.stress: &stress_job +resolver-shotgun-pipeline-generator: stage: performance + tags: + - linux-benchmarking + dependencies: [] + variables: + ANSIBLE_FORCE_COLOR: "true" + ANSIBLE_STDOUT_CALLBACK: "unixy" + GIT_STRATEGY: "none" + image: "$CI_REGISTRY/isc-projects/images/shotgun-controller" script: - - *configure - - *setup_interfaces - - *setup_softhsm - - make -j${BUILD_PARALLEL_JOBS:-1} -k all V=1 - - make install - - git clone --depth 1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.isc.org/isc-private/bind-qa.git - - cd bind-qa/bind9/stress - - DIG="${BIND_INSTALL_PATH}/bin/dig" WORKSPACE="${CI_PROJECT_DIR}" bash stress.sh - needs: - - job: autoreconf - artifacts: true - artifacts: - untracked: true - expire_in: "1 day" - when: always - timeout: 2h - -stress:authoritative:fedora:33:amd64: - <<: *fedora_33_amd64_image - <<: *linux_stress_amd64 - <<: *stress_job - variables: - CC: gcc - FLAME: /usr/bin/flame - MODE: authoritative - RATE: 10000 - RUN_TIME: 1 - only: - variables: - - $CI_COMMIT_TAG || ($BIND_STRESS_TEST_OS =~ /linux/i && $BIND_STRESS_TEST_MODE =~ /authoritative/i && $BIND_STRESS_TEST_ARCH =~ /amd64/i) - -stress:recursive:fedora:33:amd64: - <<: *fedora_33_amd64_image - <<: *linux_stress_amd64 - <<: *stress_job - variables: - CC: gcc - FLAME: /usr/bin/flame - MODE: recursive - RATE: 10000 - RUN_TIME: 1 - only: - variables: - - $CI_COMMIT_TAG || ($BIND_STRESS_TEST_OS =~ /linux/i && $BIND_STRESS_TEST_MODE =~ /recursive/i && $BIND_STRESS_TEST_ARCH =~ /amd64/i) - -stress:authoritative:fedora:33:arm64: - <<: *fedora_33_arm64_image - <<: *linux_stress_arm64 - <<: *stress_job - variables: - CC: gcc - FLAME: /usr/bin/flame - MODE: authoritative - RATE: 10000 - RUN_TIME: 1 - only: - variables: - - $CI_COMMIT_TAG || ($BIND_STRESS_TEST_OS =~ /linux/i && $BIND_STRESS_TEST_MODE =~ /authoritative/i && $BIND_STRESS_TEST_ARCH =~ /arm64/i) - -stress:recursive:fedora:33:arm64: - <<: *fedora_33_arm64_image - <<: *linux_stress_arm64 - <<: *stress_job - variables: - CC: gcc - FLAME: /usr/bin/flame - MODE: recursive - RATE: 10000 - RUN_TIME: 1 - only: - variables: - - $CI_COMMIT_TAG || ($BIND_STRESS_TEST_OS =~ /linux/i && $BIND_STRESS_TEST_MODE =~ /recursive/i && $BIND_STRESS_TEST_ARCH =~ /arm64/i) - -stress:authoritative:freebsd12:amd64: - <<: *freebsd_12_amd64_image - <<: *freebsd_stress_amd64 - <<: *stress_job - variables: - CC: clang - FLAME: /usr/local/bin/flame - MODE: authoritative - RATE: 10000 - RUN_TIME: 1 - only: - variables: - - $CI_COMMIT_TAG || ($BIND_STRESS_TEST_OS =~ /freebsd/i && $BIND_STRESS_TEST_MODE =~ /authoritative/i && $BIND_STRESS_TEST_ARCH =~ /amd64/i) - -stress:recursive:freebsd12:amd64: - <<: *freebsd_12_amd64_image - <<: *freebsd_stress_amd64 - <<: *stress_job - variables: - CC: clang - FLAME: /usr/local/bin/flame - MODE: recursive - RATE: 10000 - RUN_TIME: 1 - only: - variables: - - $CI_COMMIT_TAG || ($BIND_STRESS_TEST_OS =~ /freebsd/i && $BIND_STRESS_TEST_MODE =~ /recursive/i && $BIND_STRESS_TEST_ARCH =~ /amd64/i) - -gcov: - <<: *base_image - <<: *default_triggering_rules - stage: postcheck - needs: - - job: system:gcc:buster:amd64 - artifacts: true - script: - # *.gcno and *.gcda files generated for shared library objects are created - # in directories in which gcovr is unable to process them properly - # (.../.libs/...). Move such *.gcno and *.gcda files one level higher. - - find . -regex ".*/\.libs/.*\.\(gcda\|gcno\)" -execdir mv "{}" .. \; - # Help gcovr process the nasty tricks in lib/dns/code.h, where we include C - # source files from lib/dns/rdata/*/, using an even nastier trick. - - find lib/dns/rdata/* -name "*.c" -execdir cp -f "{}" ../../ \; - # Generate XML file in the Cobertura XML format suitable for use by GitLab - # for the purpose of displaying code coverage information in the diff view - # of a given merge request. - - gcovr --root . --exclude-directories bin/tests --exclude-directories doc --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' --xml -o coverage.xml - - gcovr --root . --exclude-directories bin/tests --exclude-directories doc --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' --html-details -o coverage.html - - gcovr --root . --exclude-directories bin/tests --exclude-directories doc --exclude-directories lib/samples --exclude 'lib/.*/tests/.*' -o coverage.txt - - tail -n 3 coverage.txt + - echo "$CI_COMMIT_SHA" + - test -d bind-qa && git fetch -C bind-qa || git clone --single-branch --branch=shotgun --depth=1 https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.isc.org/isc-private/bind-qa.git + - git -C bind-qa clean -ffxdq + - git -C bind-qa reset --hard origin/shotgun + - bind-qa/shotgun/shotgunrunner.py > child-pipeline.yaml artifacts: paths: - - coverage*.html - - coverage.txt - - coverage.xml - reports: - cobertura: coverage.xml + - child-pipeline.yaml + expire_in: "1 hour" + timeout: 5m -# Pairwise testing of ./configure options - -pairwise: - <<: *base_image - stage: build - needs: - - job: autoreconf - artifacts: true - script: - - util/pairwise-testing.sh - artifacts: - paths: - - pairwise-commands.txt - - pairwise-model.txt - - pairwise-output.*.txt - when: on_failure - only: - variables: - - $PAIRWISE_TESTING +resolver-shotgun-child-pipeline: + stage: performance2 + trigger: + include: + - artifact: child-pipeline.yaml + job: resolver-shotgun-pipeline-generator + strategy: depend