Skip to content

Update test/test-suite/test_foreign.py #4713

Update test/test-suite/test_foreign.py

Update test/test-suite/test_foreign.py #4713

Workflow file for this run

name: CI
on: [push, pull_request, workflow_dispatch]
permissions: {}
jobs:
CI:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- name: "Linux x64 (Ubuntu 24.04) - GCC 14"
os: ubuntu-24.04
build: { cc: gcc-14, cxx: g++-14, linker: ld, docs: true }
- name: "Linux x64 (Ubuntu 24.04) - Clang 19 with ASan and UBSan"
os: ubuntu-24.04
build: { cc: clang-19, cxx: clang++-19, linker: ld.lld-19, sanitize: 'address,undefined' }
- name: "Linux x64 (Ubuntu 24.04) - Clang 19 with TSan"
os: ubuntu-24.04
build: { cc: clang-19, cxx: clang++-19, linker: ld.lld-19, sanitize: 'thread' }
- name: "macOS arm64 (14) - Xcode 15"
os: macos-14
build: { cc: clang, cxx: clang++, linker: ld.lld }
env:
CC: ${{ matrix.build.cc }}
CXX: ${{ matrix.build.cxx }}
LD: ${{ matrix.build.linker }}
CPPFLAGS: -Wall
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Install Ubuntu dependencies
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install \
meson gi-docgen pkg-config \
libarchive-dev libcfitsio-dev libcgif-dev \
libexif-dev libexpat1-dev libffi-dev \
libfftw3-dev libheif-dev libheif-plugin-aomenc \
libheif-plugin-x265 libhwy-dev libimagequant-dev \
libjpeg-dev libjxl-dev liblcms2-dev \
libmatio-dev libnifti-dev libopenexr-dev \
libopenjp2-7-dev libopenslide-dev libpango1.0-dev \
libpng-dev libpoppler-glib-dev librsvg2-dev \
libtiff5-dev libwebp-dev
- name: Install macOS dependencies
if: runner.os == 'macOS'
run: |
pip3 install meson --break-system-packages
# Run `brew update` to ensure we have the latest formulae.
# Note: GHA macOS runners set `HOMEBREW_NO_AUTO_UPDATE=1`
# by default, as updating can be time-consuming.
brew update
brew install \
ninja pkgconf \
cfitsio cgif fftw fontconfig glib \
highway jpeg-xl libarchive libexif \
libheif libimagequant libmatio librsvg \
libspng libtiff little-cms2 mozjpeg \
openexr openjpeg openslide pango \
poppler webp
- name: Install Clang 19
if: runner.os == 'Linux' && matrix.build.cc == 'clang-19'
run: sudo apt-get install clang-19 libclang-rt-19-dev lld-19 llvm-19
- name: Prepare macOS environment
if: runner.os == 'macOS'
run: |
echo "PKG_CONFIG_PATH=$(brew --prefix mozjpeg)/lib/pkgconfig:$(brew --prefix libarchive)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV
- name: Prepare sanitizers environment
if: matrix.build.sanitize
run: |
echo "CPPFLAGS=-g -fno-omit-frame-pointer -fno-sanitize=function -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" >> $GITHUB_ENV
echo "LDFLAGS=-g -shared-libsan" >> $GITHUB_ENV
# Glib is built without -fno-omit-frame-pointer. We need
# to disable the fast unwinder to get full stacktraces.
echo "ASAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/asan.supp:fast_unwind_on_malloc=0:allocator_may_return_null=1" >> $GITHUB_ENV
echo "LSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/lsan.supp:fast_unwind_on_malloc=0" >> $GITHUB_ENV
echo "TSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/tsan.supp:print_suppressions=1:ignore_noninstrumented_modules=1" >> $GITHUB_ENV
# Ensure UBSan issues causes the program to abort.
echo "UBSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/ubsan.supp:halt_on_error=1:abort_on_error=1:print_stacktrace=1" >> $GITHUB_ENV
echo "$(dirname $($CC -print-prog-name=llvm-symbolizer))" >> $GITHUB_PATH
- name: Prepare ASan/UBSan
if: matrix.build.sanitize == 'address,undefined'
run: |
ASAN_DSO=$($CC -print-file-name=libclang_rt.asan-x86_64.so)
echo "SANITIZE_DSO=$ASAN_DSO" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$(dirname $ASAN_DSO)" >> $GITHUB_ENV
- name: Prepare TSan
if: matrix.build.sanitize == 'thread'
run: |
TSAN_DSO=$($CC -print-file-name=libclang_rt.tsan-x86_64.so)
echo "SANITIZE_DSO=$TSAN_DSO" >> $GITHUB_ENV
echo "LD_LIBRARY_PATH=$(dirname $TSAN_DSO)" >> $GITHUB_ENV
- name: Configure libvips
run:
meson setup build
-Ddebug=true
-Ddeprecated=false
-Dmagick=disabled
-Ddocs=${{ matrix.build.docs || 'false' }}
-Dintrospection=${{ matrix.build.docs && 'enabled' || 'disabled' }}
-Db_sanitize=${{ matrix.build.sanitize || 'none' }}
-Db_lundef=${{ matrix.build.sanitize && 'false' || 'true' }}
|| (cat build/meson-logs/meson-log.txt && exit 1)
- name: Build libvips
run: meson compile -C build
- name: Check libvips
run:
# TSan is slow, so disable timeout in test cases
meson test -C build --timeout-multiplier=${{ matrix.build.sanitize == 'thread' && '0' || '1' }}
|| (cat build/meson-logs/testlog.txt && exit 1)
- name: Install libvips
run: sudo meson install -C build
- name: Rebuild the shared library cache
if: runner.os == 'Linux'
run: sudo ldconfig
- name: Install pyvips
run: pip3 install pyvips[test] --break-system-packages
- name: Run test suite
env:
VIPS_LEAK: 1
LD_PRELOAD: ${{ env.SANITIZE_DSO }}
run: python3 -m pytest -sv --log-cli-level=WARNING test/test-suite