2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 06:25:31 +00:00

Add API Checker

ABI checker tools generate HTML and TXT API compatibility reports of
BIND libraries. Comparison is being done between two bind source trees
which hold built BIND.

In the CI one version is the reference version defined by
BIND_BASELINE_VERSION variable, the latter one is the HEAD of branch
under test.
This commit is contained in:
Michal Nowak
2020-02-26 11:24:45 +01:00
parent e0430d74ef
commit 49bc08e612
3 changed files with 115 additions and 0 deletions

View File

@@ -1332,3 +1332,34 @@ respdiff:sid:amd64:
untracked: true
expire_in: "1 day"
when: on_failure
# ABI check
abi-check:sid:amd64:
<<: *debian_sid_amd64_image
stage: build
dependencies:
- autoreconf:sid:amd64
needs:
- autoreconf:sid:amd64
variables:
CC: gcc
CFLAGS: "${CFLAGS_COMMON} -Og"
BIND_BASELINE_VERSION: v9_16_0
script:
- *configure
- ${MAKE} -j${BUILD_PARALLEL_JOBS:-1} V=1
- 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 ..
- util/api-checker.sh . refbind
artifacts:
paths:
- "*.html"
- "abi-*.dump"
expire_in: "1 week"
only:
- master@isc-projects/bind9
- /^v9_[1-9][0-9]$/@isc-projects/bind9

83
util/api-checker.sh Executable file
View File

@@ -0,0 +1,83 @@
#!/bin/bash
#
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# See the COPYRIGHT file distributed with this work for additional
# information regarding copyright ownership.
set -e
# Exit if program $1 is not found in PATH.
check_program() {
if ! command -v "${1}" > /dev/null 2>&1; then
echo "'${1}' not found in PATH" >&2
exit 1
fi
}
# Check that we were spawned with two arguments and that these arguments are two
# different directories.
check_args() {
if [ ${#} -ne 2 ] || [ ! -d "${1}" ] || [ ! -d "${2}" ] || [ "${1}" = "${2}" ]; then
echo "Usage:"
echo ""
echo " ${0} <TESTDIR> <REFDIR>"
echo ""
echo "Generate API compatibility reports for BIND libraries."
echo ""
echo " <TESTDIR> is a directory with current (new) BIND version"
echo " <REFDIR> is a directory with reference (old) BIND version"
exit 1
fi
}
check_args "${@}"
TESTBIND="${1}"
REFBIND="${2}"
# Ensure the required tools are available in PATH.
check_program abi-dumper
check_program abi-compliance-checker
check_program git
check_program w3m
# Find all libraries which have designated 'api' file and
# generate ABI dump file for them.
while read -r SO; do
APIFILE="$(dirname "${SO}")/../api"
pushd "$(dirname "${APIFILE}")"
GIT_REVISION=$(git rev-parse HEAD | cut -c 1-10)
popd
# Get LIBINTERFACE, LIBREVISION, LIBAGE from the 'api' file.
eval "$(grep -v "^#" "${APIFILE}" | tr -d " ")"
VERSION="${LIBINTERFACE}.${LIBREVISION}.${LIBAGE}-${GIT_REVISION}"
abi-dumper "${SO}" -o abi-"$(basename "${SO}" .so)-${VERSION}".dump -lver "${VERSION}"
done < <(find "${TESTBIND}"/lib/*/.libs/ "${REFBIND}"/lib/*/.libs/ -name '*.so')
# Generate HTML API compatibility reports for all libraries.
find . -maxdepth 1 -name 'abi-*.dump' | sort | while read -r OLD; read -r NEW; do
SONAME=${OLD/.\/abi-/}
SONAME=${SONAME/-*/}
if abi-compliance-checker -l "${SONAME}" -old "${OLD}" -new "${NEW}"; then
REPORT_PREFIX="PASS"
else
echo "***** Compatibility problems detected"
REPORT_PREFIX="WARN"
fi
OLD_REPORT_PATH="$(find "compat_reports/${SONAME}" -name '*.html')"
NEW_REPORT_PATH="${REPORT_PREFIX}-${SONAME}.html"
mv "${OLD_REPORT_PATH}" "${NEW_REPORT_PATH}"
echo
done
# Generate TXT API compatibility reports from HTML reports for all BIND libraries.
echo "Generate TXT API compatibility reports from HTML reports for all BIND libraries:"
while read -r HTMLREPORT; do
TXTREPORT="${HTMLREPORT/.html/.txt}"
echo " w3m: ${HTMLREPORT} -> ${TXTREPORT}"
w3m -dump -cols 75 -O ascii -T text/html "${HTMLREPORT}" > "${TXTREPORT}"
done < <(find . -maxdepth 1 -name '*.html')

View File

@@ -2566,6 +2566,7 @@
./util/COPYRIGHT.NOM X 2001,2004,2007,2016,2018,2019,2020
./util/COPYRIGHT.PORTION X 1996,1997,1998,1999,2000,2001,2004,2007,2016,2018,2019,2020
./util/COPYRIGHT.TOP X 2018,2019,2020
./util/api-checker.sh SH 2020
./util/bindkeys.pl PERL 2009,2010,2011,2012,2014,2016,2017,2018,2019,2020
./util/branchsync.sh SH 2013,2016,2018,2019,2020
./util/check-ans-prereq.sh SH 2019,2020