Cross-version testing with named configurations
In #3381 (and #3385), we committed a backward-incompatible change to BIND 9.19.5, 9.18.7, and 9.16.33, explicitly requiring "inline-signing" for every "dnssec-policy". We did this backward-incompatible change deliberately, knowing the consequences for users and their configurations. But if we didn't, say, we were unaware this is a backward-incompatible change and fixed failing systems test by "tweaking a knob to make the CI pass", we would not have a second look before the change hits user configurations. "cross-version-config-tests" CI job is such a second look. It will run system tests from the latest release tag specific to the particular branch (e.g., v9.19.12 for the "main" branch) with BIND 9 binaries from the current "HEAD" (the future v9.19.13). This Frankenstein build gets conceived by altering the "TOP_BUILDDIR" variable in "bin/tests/system/conf.sh". Caveats: - Only system test configurations are tested; no actual test code is run. - Problems with namedN.conf configurations are not identified. When backward-incompatible change is introduced, the CI job is expected to fail. If the change is deliberate, the job will keep failing until the version with the backward-incompatible change is tagged, and the minor version in configure.ac is bumped.
This commit is contained in:
@@ -341,6 +341,50 @@ stages:
|
||||
sudo sh -x bin/tests/system/ifconfig.sh up;
|
||||
fi
|
||||
|
||||
cross-version-config-tests:
|
||||
stage: system
|
||||
<<: *base_image
|
||||
<<: *default_triggering_rules
|
||||
variables:
|
||||
CC: gcc
|
||||
CFLAGS: "${CFLAGS_COMMON}"
|
||||
# Disable option checking to prevent problems with new default options in
|
||||
# the &configure anchor.
|
||||
EXTRA_CONFIGURE: "--disable-option-checking"
|
||||
script:
|
||||
- *configure
|
||||
- *setup_interfaces
|
||||
- make -j${BUILD_PARALLEL_JOBS:-1}
|
||||
# Build system test binaries.
|
||||
- make -C bin/tests/system -j${TEST_PARALLEL_JOBS:-1} check TESTS=""
|
||||
- export BIND_BRANCH="$(sed -n -E "s|^m4_define\(\[bind_VERSION_MINOR\], ([0-9]+)\)dnl$|\1|p" configure.ac)"
|
||||
# When testing a .0 release, compare it against the previous development
|
||||
# release (e.g., 9.19.0 and 9.18.0 should both be compared against 9.17.22).
|
||||
- if [ "$(sed -n -E "s|^m4_define\(\[bind_VERSION_PATCH\], ([0-9]+)\)dnl$|\1|p" configure.ac)" = "0" ]; then export BIND_BRANCH=$((BIND_BRANCH - 1 - (BIND_BRANCH % 2))); fi
|
||||
- BASELINE="$(curl -s "https://gitlab.isc.org/api/v4/projects/1/repository/tags?search=^v9.${BIND_BRANCH}&order_by=version" | jq -r ".[0].name")"
|
||||
- git clone --branch "${BASELINE}" --depth 1 https://gitlab.isc.org/isc-projects/bind9.git "bind-${BASELINE}"
|
||||
- cd "bind-${BASELINE}"
|
||||
- autoreconf -fi
|
||||
- *configure
|
||||
- make -j${BUILD_PARALLEL_JOBS:-1}
|
||||
- *find_pytest
|
||||
- cd bin/tests/system
|
||||
# Run the setup phase of all system tests in the most recently tagged BIND 9
|
||||
# release using the binaries built for the current BIND 9 version. This
|
||||
# intends to detect obvious backward compatibility issues with the latter.
|
||||
- sed -i -E "s|(export TOP_BUILDDIR)=.*|\1=${CI_PROJECT_DIR}|" conf.sh
|
||||
- >
|
||||
"$PYTEST" --setup-only -n "${TEST_PARALLEL_JOBS:-1}"
|
||||
needs:
|
||||
- job: autoreconf
|
||||
artifacts: true
|
||||
artifacts:
|
||||
paths:
|
||||
- bind-*
|
||||
untracked: true
|
||||
expire_in: "1 day"
|
||||
when: on_failure
|
||||
|
||||
.display_pytest_failures: &display_pytest_failures
|
||||
- awk '/^=+ FAILURES =+/{flag=1;next}/^=+.*=+$/{flag=0}flag' bin/tests/system/pytest.out.txt || true
|
||||
- awk '/^=+ ERRORS =+/{flag=1;next}/^=+.*=+$/{flag=0}flag' bin/tests/system/pytest.out.txt || true
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
|
||||
### Before the Tagging Deadline
|
||||
|
||||
- [ ] ***(QA)*** Inspect the current output of the `cross-version-config-tests` job to verify that no unexpected backward-incompatible change was introduced in the current release cycle.
|
||||
- [ ] ***(QA)*** Ensure release notes are correct, ask Support and Marketing to check them as well. [Example](https://gitlab.isc.org/isc-private/bind9/-/merge_requests/510)
|
||||
- [ ] ***(QA)*** Add a release marker to `CHANGES`. Examples: [9.18](https://gitlab.isc.org/isc-projects/bind9/-/commit/f14d8ad78c0506fd4247187f2177f8eceeb6b3b9), [9.16](https://gitlab.isc.org/isc-projects/bind9/-/commit/1bcdf21874f99a00da389d723e0ad07dfd70f9f1)
|
||||
- [ ] ***(QA)*** Add a release marker to `CHANGES.SE` (Subscription Edition only). [Example](https://gitlab.isc.org/isc-private/bind9/-/commit/0f03d5737bcbdaa1bf713c6db1887b14938c3421)
|
||||
@@ -88,6 +89,7 @@
|
||||
- [ ] ***(QA)*** Ensure all new tags are annotated and signed. `git show --show-signature v9.19.12`
|
||||
- [ ] ***(QA)*** Push tags for the published releases to the public repository.
|
||||
- [ ] ***(QA)*** Merge published release tags (non-linearly) back into the their relevant development/maintenance branches. [Step 7 of the new workflow](https://gitlab.isc.org/isc-projects/bind9/-/merge_requests/6124#new-workflow)
|
||||
- [ ] ***(QA)*** Ensure `allow_failure: true` is removed from the `cross-version-config-tests` job if it was set during the current release cycle.
|
||||
- [ ] ***(QA)*** Sanitize confidential issues which are assigned to the current release milestone and do not describe a security vulnerability, then make them public.
|
||||
- [ ] ***(QA)*** Sanitize [confidential issues](https://gitlab.isc.org/isc-projects/bind9/-/issues/?sort=milestone_due_desc&state=opened&confidential=yes) which are assigned to older release milestones and describe security vulnerabilities, then make them public if appropriate[^2].
|
||||
- [ ] ***(QA)*** Update QA tools used in GitLab CI (e.g. Black, PyLint, Sphinx) by modifying the relevant [`Dockerfile`](https://gitlab.isc.org/isc-projects/images/-/merge_requests/228/diffs).
|
||||
|
||||
Reference in New Issue
Block a user