mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-24 02:31:03 +00:00
ci: add an ABI check job
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7875>
This commit is contained in:
parent
c3d4d500e0
commit
5b32fe7b24
7 changed files with 134 additions and 0 deletions
|
@ -37,6 +37,7 @@ variables:
|
|||
INDENT_AMD64_SUFFIX: 'amd64/gst-indent'
|
||||
COMMITLINT_AMD64_SUFFIX: 'amd64/commitlint'
|
||||
WINDOWS_AMD64_SUFFIX: 'amd64/windows'
|
||||
ABI_CHECK_AMD64_SUFFIX: 'amd64/abi-check'
|
||||
|
||||
WINDOWS_IMAGE: "$CI_REGISTRY_IMAGE/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH"
|
||||
WINDOWS_UPSTREAM_IMAGE: "$CI_REGISTRY/$FDO_UPSTREAM_REPO/$WINDOWS_AMD64_SUFFIX:$WINDOWS_TAG-$GST_UPSTREAM_BRANCH"
|
||||
|
@ -263,6 +264,28 @@ windows amd64 docker:
|
|||
tags:
|
||||
- gst-mac-arm
|
||||
|
||||
.abi-check image:
|
||||
variables:
|
||||
CCACHE_DIR: !reference [".fedora image", "variables", CCACHE_DIR]
|
||||
FDO_DISTRIBUTION_VERSION: !reference [".fedora image", "variables", FDO_DISTRIBUTION_VERSION]
|
||||
FDO_REPO_SUFFIX: !reference [".fedora image", "variables", FDO_REPO_SUFFIX]
|
||||
FDO_BASE_IMAGE: '$CI_REGISTRY_IMAGE/$FDO_REPO_SUFFIX:$FEDORA_TAG-$GST_UPSTREAM_BRANCH'
|
||||
FDO_DISTRIBUTION_TAG: "abi-check-$ABI_CHECK_TAG-$GST_UPSTREAM_BRANCH"
|
||||
FDO_DISTRIBUTION_PACKAGES: 'libabigail'
|
||||
FDO_DISTRIBUTION_EXEC: 'GIT_BRANCH=$CI_COMMIT_REF_NAME GIT_URL=$CI_REPOSITORY_URL bash ci/docker/abi-check/prepare.sh'
|
||||
ABI_CHECK_CACHE: '/abi-check-cache'
|
||||
|
||||
abi-check docker:
|
||||
# placeholder-job has very minimal CPU available and may overrun the job
|
||||
# timeout if an image rebuild (which builds GStreamer) needs to be performed.
|
||||
#tags: [ 'placeholder-job' ]
|
||||
stage: 'preparation'
|
||||
extends:
|
||||
- '.abi-check image'
|
||||
- '.fdo.container-build@fedora'
|
||||
needs:
|
||||
- 'fedora amd64 docker'
|
||||
|
||||
# ---- Preparation ----- #
|
||||
#
|
||||
# gst-indent!!
|
||||
|
@ -701,6 +724,26 @@ build macos:
|
|||
-Dgst-plugins-good:cairo=enabled
|
||||
-Dgst-plugins-good:soup=enabled
|
||||
|
||||
abi-check:
|
||||
stage: 'build'
|
||||
extends:
|
||||
- '.abi-check image'
|
||||
- '.fdo.suffixed-image@fedora'
|
||||
- '.build'
|
||||
needs:
|
||||
- "trigger"
|
||||
- 'abi-check docker'
|
||||
script:
|
||||
- $CI_PROJECT_DIR/ci/scripts/abi-check.sh build/
|
||||
variables:
|
||||
ABI_CHECK_DIR: 'abi-dumps'
|
||||
artifacts:
|
||||
expire_in: "7 days"
|
||||
when: "always"
|
||||
paths:
|
||||
- 'meson-logs/'
|
||||
- '$ABI_CHECK_DIR'
|
||||
|
||||
# ---- Tests ----- #
|
||||
|
||||
.test:
|
||||
|
|
|
@ -13,4 +13,6 @@ variables:
|
|||
|
||||
LINT_TAG: '2024-02-20.0'
|
||||
|
||||
ABI_CHECK_TAG: '2024-11-18.0'
|
||||
|
||||
WINDOWS_TAG: '2024-11-12.0'
|
||||
|
|
13
ci/docker/abi-check/install-abi-check-cache.sh
Normal file
13
ci/docker/abi-check/install-abi-check-cache.sh
Normal file
|
@ -0,0 +1,13 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
meson_args="${MESON_ARGS:-}"
|
||||
|
||||
install_prefix=/tmp/install
|
||||
MESON_ARGS="${meson_args} --prefix ${install_prefix} --optimization=g" ./ci/scripts/build.sh build/
|
||||
ninja -C build/ install
|
||||
|
||||
find ${install_prefix}/lib64 -type f -iname *libgst*.so.* -print0 | xargs -0 -I '{}' bash ./ci/scripts/save-abi.sh {} ${ABI_CHECK_CACHE}
|
||||
|
||||
rm -rf $install_prefix
|
5
ci/docker/abi-check/prepare.sh
Normal file
5
ci/docker/abi-check/prepare.sh
Normal file
|
@ -0,0 +1,5 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
bash ./ci/docker/abi-check/install-abi-check-cache.sh
|
37
ci/scripts/abi-check.sh
Executable file
37
ci/scripts/abi-check.sh
Executable file
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
builddir="$1"
|
||||
|
||||
meson_args="${MESON_ARGS:-}"
|
||||
|
||||
if [[ -z "$builddir" ]]; then
|
||||
echo "Usage: build.sh <build_directory>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ${ABI_CHECK_CACHE}
|
||||
echo ${ABI_CHECK_DIR}
|
||||
|
||||
# nproc works on linux
|
||||
# sysctl for macos
|
||||
_jobs=$(nproc || sysctl -n hw.ncpu)
|
||||
jobs="${FDO_CI_CONCURRENT:-$_jobs}"
|
||||
|
||||
install_prefix=/tmp/install
|
||||
MESON_ARGS="${meson_args} --prefix ${install_prefix} --optimization=g" ./ci/scripts/build.sh build/
|
||||
ninja -C $builddir install
|
||||
|
||||
find ${install_prefix}/lib64 -type f -iname *libgst*.so.* -print0 | xargs -0 -I '{}' bash ${CI_PROJECT_DIR}/ci/scripts/save-abi.sh {} ${ABI_CHECK_DIR}
|
||||
|
||||
fail_file=abi-compare-failure
|
||||
if ! find ${ABI_CHECK_CACHE} -type f -print0 | xargs -0 -I '{}' bash ${CI_PROJECT_DIR}/ci/scripts/compare-abi.sh {} ${CI_PROJECT_DIR}/${ABI_CHECK_DIR}/ ${fail_file}
|
||||
then
|
||||
echo ABI comparison failed for the following modules!
|
||||
cat ${fail_file}
|
||||
rm -rf $install_prefix
|
||||
exit 1;
|
||||
fi
|
||||
|
||||
rm -rf $install_prefix
|
24
ci/scripts/compare-abi.sh
Executable file
24
ci/scripts/compare-abi.sh
Executable file
|
@ -0,0 +1,24 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
old_abi=${1}
|
||||
output_dir=${2}
|
||||
output_fail_file=${3}
|
||||
upstream_branch=${GST_UPSTREAM_BRANCH:-}
|
||||
|
||||
module=$(basename ${old_abi})
|
||||
|
||||
opts="--drop-private-types"
|
||||
if [ "x$upstream_branch" = "xmain" ]
|
||||
then
|
||||
# don't error out on added symbols
|
||||
opts="${opts} --no-added-syms"
|
||||
fi
|
||||
|
||||
mkdir -p ${output_dir}
|
||||
if ! abidiff ${opts} ${old_abi} ${output_dir}/${module}
|
||||
then
|
||||
echo ${module} >> ${output_fail_file}
|
||||
exit 1;
|
||||
fi
|
10
ci/scripts/save-abi.sh
Executable file
10
ci/scripts/save-abi.sh
Executable file
|
@ -0,0 +1,10 @@
|
|||
#! /bin/bash
|
||||
|
||||
set -eux
|
||||
|
||||
filename=${1}
|
||||
output_dir=${2}
|
||||
module=$(basename ${filename} | cut -f1,2 -d'.')
|
||||
|
||||
mkdir -p ${output_dir}
|
||||
abidw -o ${output_dir}/${module}.abi --drop-private-types ${filename}
|
Loading…
Reference in a new issue