mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-04 12:20:42 +09:00
gitlab-ci: Improve abidiff
Only fail if it is an ABI incompatible change. Signed-off-by: Andreas Schneider <asn@cryptomilk.org> Reviewed-by: Jakub Jelen <jjelen@redhat.com>
This commit is contained in:
@@ -30,6 +30,7 @@ workflow:
|
|||||||
.build_options:
|
.build_options:
|
||||||
variables:
|
variables:
|
||||||
CMAKE_DEFAULT_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithDebInfo -DPICKY_DEVELOPER=ON"
|
CMAKE_DEFAULT_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithDebInfo -DPICKY_DEVELOPER=ON"
|
||||||
|
CMAKE_DEFAULT_DEBUG_OPTIONS: "-DCMAKE_C_FLAGS='-O0 -g -ggdb' -DPICKY_DEVELOPER=ON"
|
||||||
CMAKE_BUILD_OPTIONS: "-DWITH_BLOWFISH_CIPHER=ON -DWITH_SFTP=ON -DWITH_SERVER=ON -DWITH_ZLIB=ON -DWITH_PCAP=ON -DWITH_DEBUG_CRYPTO=ON -DWITH_DEBUG_PACKET=ON -DWITH_DEBUG_CALLTRACE=ON"
|
CMAKE_BUILD_OPTIONS: "-DWITH_BLOWFISH_CIPHER=ON -DWITH_SFTP=ON -DWITH_SERVER=ON -DWITH_ZLIB=ON -DWITH_PCAP=ON -DWITH_DEBUG_CRYPTO=ON -DWITH_DEBUG_PACKET=ON -DWITH_DEBUG_CALLTRACE=ON"
|
||||||
CMAKE_TEST_OPTIONS: "-DUNIT_TESTING=ON -DCLIENT_TESTING=ON -DSERVER_TESTING=ON -DGSSAPI_TESTING=ON -DWITH_BENCHMARKS=ON -DFUZZ_TESTING=ON"
|
CMAKE_TEST_OPTIONS: "-DUNIT_TESTING=ON -DCLIENT_TESTING=ON -DSERVER_TESTING=ON -DGSSAPI_TESTING=ON -DWITH_BENCHMARKS=ON -DFUZZ_TESTING=ON"
|
||||||
CMAKE_OPTIONS: $CMAKE_DEFAULT_OPTIONS $CMAKE_BUILD_OPTIONS $CMAKE_TEST_OPTIONS
|
CMAKE_OPTIONS: $CMAKE_DEFAULT_OPTIONS $CMAKE_BUILD_OPTIONS $CMAKE_TEST_OPTIONS
|
||||||
@@ -446,7 +447,7 @@ fedora/abidiff:
|
|||||||
stage: analysis
|
stage: analysis
|
||||||
variables:
|
variables:
|
||||||
GIT_DEPTH: "100"
|
GIT_DEPTH: "100"
|
||||||
CMAKE_OPTIONS: $CMAKE_DEFAULT_OPTIONS $CMAKE_BUILD_OPTIONS
|
CMAKE_OPTIONS: $CMAKE_DEFAULT_DEBUG_OPTIONS $CMAKE_BUILD_OPTIONS
|
||||||
image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
|
image: $CI_REGISTRY/$BUILD_IMAGES_PROJECT:$FEDORA_BUILD
|
||||||
before_script:
|
before_script:
|
||||||
- uname -a
|
- uname -a
|
||||||
@@ -480,12 +481,14 @@ fedora/abidiff:
|
|||||||
- cmake ${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR1} .. &&
|
- cmake ${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR1} .. &&
|
||||||
make -j$(nproc) && make -j$(nproc) install
|
make -j$(nproc) && make -j$(nproc) install
|
||||||
- popd
|
- popd
|
||||||
|
- ls -l ${INSTALL_DIR1}/lib*/
|
||||||
- git checkout ${CI_COMMIT_SHA}
|
- git checkout ${CI_COMMIT_SHA}
|
||||||
- pushd obj-${CI_COMMIT_SHA}
|
- pushd obj-${CI_COMMIT_SHA}
|
||||||
- cmake ${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR2} .. &&
|
- cmake ${CMAKE_OPTIONS} -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR2} .. &&
|
||||||
make -j$(nproc) && make -j$(nproc) install
|
make -j$(nproc) && make -j$(nproc) install
|
||||||
- popd
|
- popd
|
||||||
- abidiff --headers-dir1 ${INSTALL_DIR1}/include/libssh/ --headers-dir2 ${INSTALL_DIR2}/include/libssh/ ${INSTALL_DIR1}/lib64/libssh.so ${INSTALL_DIR2}/lib64/libssh.so
|
- ls -l ${INSTALL_DIR2}/lib*/
|
||||||
|
- ./.gitlab-ci/checkabi.sh ${INSTALL_DIR1} ${INSTALL_DIR2}
|
||||||
tags:
|
tags:
|
||||||
- saas-linux-small-amd64
|
- saas-linux-small-amd64
|
||||||
except:
|
except:
|
||||||
|
|||||||
42
.gitlab-ci/checkabi.sh
Executable file
42
.gitlab-ci/checkabi.sh
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
INSTALL_DIR1=${1}
|
||||||
|
INSTALL_DIR2=${2}
|
||||||
|
|
||||||
|
abidiff \
|
||||||
|
--headers-dir1 "${INSTALL_DIR1}/include/libssh/" \
|
||||||
|
--headers-dir2 "${INSTALL_DIR2}/include/libssh/" \
|
||||||
|
"${INSTALL_DIR1}/lib64/libssh.so" \
|
||||||
|
"${INSTALL_DIR2}/lib64/libssh.so" \
|
||||||
|
--fail-no-debug-info
|
||||||
|
abiret=$?
|
||||||
|
|
||||||
|
ABIDIFF_ERROR=$(((abiret & 0x01) != 0))
|
||||||
|
ABIDIFF_USAGE_ERROR=$(((abiret & 0x02) != 0))
|
||||||
|
ABIDIFF_ABI_CHANGE=$(((abiret & 0x04) != 0))
|
||||||
|
ABIDIFF_ABI_INCOMPATIBLE_CHANGE=$(((abiret & 0x08) != 0))
|
||||||
|
ABIDIFF_UNKNOWN_BIT_SET=$(((abiret & 0xf0) != 0))
|
||||||
|
|
||||||
|
if [ $ABIDIFF_ERROR -ne 0 ]; then
|
||||||
|
echo "abidiff reported ABIDIFF_ERROR."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ $ABIDIFF_USAGE_ERROR -ne 0 ]; then
|
||||||
|
echo "abidiff reported ABIDIFF_USAGE_ERROR."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ $ABIDIFF_UNKNOWN_BIT_SET -ne 0 ]; then
|
||||||
|
echo "abidiff reported ABIDIFF_UNKNOWN_BIT_SET."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $ABIDIFF_ABI_INCOMPATIBLE_CHANGE -ne 0 ]; then
|
||||||
|
echo "abidiff result ABIDIFF_ABI_INCOMPATIBLE_CHANGE, this breaks the API!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $ABIDIFF_ABI_CHANGE -ne 0 ]; then
|
||||||
|
echo "Ignoring abidiff result ABI_CHANGE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user