ci: check more public headers for pedantic warnings #3132
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Check for ABI breaks | |
on: | |
pull_request: | |
branches-ignore: | |
- abi-break | |
merge_group: | |
jobs: | |
run-abidiff: | |
name: Compare ABIs | |
runs-on: ubuntu-22.04 | |
container: | |
image: ghcr.io/managarm/mlibc-crossers:latest | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Install prerequisites | |
run: | | |
apt-get update | |
apt-get install -y ninja-build qemu-user \ | |
python3-setuptools python3-jsonschema \ | |
python3-pip abigail-tools | |
pip install --break-system-packages -U xbstrap pyexpect meson | |
- name: Checkout base branch | |
if: ${{ github.base_ref }} | |
uses: actions/checkout@v2 | |
with: | |
path: mlibc-base | |
ref: ${{ github.base_ref }} | |
submodules: true | |
fetch-depth: 4 | |
- name: Checkout managarm/mlibc#master | |
if: ${{ github.base_ref == '' }} | |
uses: actions/checkout@v2 | |
with: | |
path: mlibc-base | |
repository: managarm/mlibc | |
submodules: true | |
ref: master | |
fetch-depth: 4 | |
- name: Checkout branch | |
uses: actions/checkout@v2 | |
with: | |
path: mlibc-branch | |
submodules: true | |
- name: Determine base ref | |
run: | | |
master_hash="$(git -C mlibc-base rev-parse HEAD)" | |
branch_hash="$(git -C mlibc-branch rev-parse HEAD)" | |
printf '%s\n' "$master_hash" "$branch_hash" | |
if [ "$master_hash" = "$branch_hash" ]; then | |
git -C mlibc-base reset --hard HEAD^ | |
fi | |
- name: Set up linux kernel headers | |
run: | | |
set -x | |
mkdir -p linux-headers-base/{src,build} | |
cp mlibc-base/ci/bootstrap.yml linux-headers-base/src/ | |
( | |
cd linux-headers-base/build | |
xbstrap init ../src | |
xbstrap install linux-headers | |
) | |
mkdir -p linux-headers-branch/{src,build} | |
cp mlibc-branch/ci/bootstrap.yml linux-headers-branch/src/ | |
( | |
cd linux-headers-branch/build | |
xbstrap init ../src | |
xbstrap install linux-headers | |
) | |
cat > linux-headers-base/build/bootstrap-site.yml << EOF | |
define_options: | |
arch: ${{matrix.arch}} | |
EOF | |
cp linux-headers-base/build/bootstrap-site.yml linux-headers-branch/build/bootstrap-site.yml | |
- name: Build and install both copies | |
run: | | |
set -xe | |
mkdir root-base root-branch | |
cat > linux-x86_64.cross-file <<-EOF | |
[binaries] | |
c = ['x86_64-linux-mlibc-gcc'] | |
cpp = ['x86_64-linux-mlibc-g++'] | |
[host_machine] | |
system = 'linux' | |
cpu_family = 'x86_64' | |
cpu = 'x86_64' | |
endian = 'little' | |
EOF | |
( | |
cd mlibc-branch | |
meson setup \ | |
--cross-file=../linux-x86_64.cross-file \ | |
--buildtype=debugoptimized \ | |
-Dlinux_kernel_headers=$GITHUB_WORKSPACE/linux-headers-branch/build/packages/linux-headers/usr/include \ | |
build | |
ninja -C build | |
DESTDIR="$GITHUB_WORKSPACE/root-branch" ninja -C build install | |
) | |
( | |
cd mlibc-base | |
meson setup \ | |
--cross-file=../linux-x86_64.cross-file \ | |
--buildtype=debugoptimized \ | |
-Dlinux_kernel_headers=$GITHUB_WORKSPACE/linux-headers-branch/build/packages/linux-headers/usr/include \ | |
build | |
ninja -C build | |
DESTDIR="$GITHUB_WORKSPACE/root-base" ninja -C build install | |
) | |
- name: Compare | |
run: | | |
# TODO(arsen): does this require handling for version suffixes? | |
set -e +x | |
exec 2>&1 # work around GHA foolishly decoupling stdout and stderr | |
exitcode=0 | |
git -C mlibc-branch show -s --format=%s | grep -q abi-break || \ | |
exitcode=1 | |
echo ==== RUNNING ABIDIFF... ==== | |
( cd root-base; find . -type f -name '*.so'; ) | while read -r file | |
do | |
if ! file -- root-{base,branch}/"$file"; then | |
touch files-differ | |
continue | |
fi | |
abidiff \ | |
--no-added-syms \ | |
--suppr mlibc-branch/ci/abidiff_suppress.ini \ | |
--hd1 root-base/usr/local/include/ \ | |
--hd2 root-branch/usr/local/include/ \ | |
root-{base,branch}/"$file" \ | |
|| touch files-differ | |
done | |
echo ==== CHECKING FOR EXTRA FILES... ==== | |
( cd root-branch; find . -type f -name '*.so'; ) | while read -r file | |
do | |
[ -e "root-base/$file" ] || file root-{base,branch}/"$file" \ | |
|| touch files-differ | |
done | |
if [ -e files-differ ]; then | |
echo SOME FILES/ABI DIFFER, SEE OUTPUT ABOVE | |
exit "$exitcode" | |
fi |