image: fedora:latest variables: DEPS: meson ninja-build gcc libasan liblsan libubsan pkg-config glib2-devel mingw64-gcc mingw64-pkg-config mingw64-glib2 clang-analyzer git-core before_script: - dnf install -y $DEPS - git fetch --tags https://gitlab.freedesktop.org/slirp/libslirp.git - git describe build: script: - meson --werror build || (cat build/meson-logs/meson-log.txt && exit 1) - ninja -C build - (cd build && meson test) || (cat build/meson-logs/testlog.txt && exit 1) - ninja -C build scan-build build-asan: script: - CFLAGS=-fsanitize=address meson --werror build || (cat build/meson-logs/meson-log.txt && exit 1) - ninja -C build - (cd build && ASAN_OPTIONS=detect_leaks=0 meson test) || (cat build/meson-logs/testlog.txt && exit 1) build-lsan: script: - CFLAGS=-fsanitize=leak meson --werror build || (cat build/meson-logs/meson-log.txt && exit 1) - ninja -C build - (cd build && meson test) || (cat build/meson-logs/testlog.txt && exit 1) build-usan: script: - CFLAGS=-fsanitize=undefined meson --werror build || (cat build/meson-logs/meson-log.txt && exit 1) - ninja -C build - (cd build && meson test) || (cat build/meson-logs/testlog.txt && exit 1) fuzz: parallel: matrix: - TARGET: [arp, ip-header, udp, udp-h, tftp, dhcp, icmp, tcp, tcp-h, ndp, ip6-header, udp6, udp6-h, tftp6, icmp6, tcp6, tcp6-h] script: - CC=clang CXX=clang++ meson build -Dllvm-fuzz=true || (cat build/meson-logs/meson-log.txt && exit 1) - ninja -C build - build/fuzzing/fuzz-$TARGET -seed=1234 -runs=1000000 fuzzing/IN_$TARGET artifacts: when: on_failure paths: - crash-* - leak-* - oom-* - timeout-* build-mingw64: script: - (mkdir buildw && cd buildw && mingw64-meson --werror) || (cat buildw/meson-logs/meson-log.txt && exit 1) - ninja -C buildw Coverity: only: refs: - master - coverity script: - dnf update -y - dnf install -y curl clang - curl -o /tmp/cov-analysis-linux64.tgz https://scan.coverity.com/download/linux64 --form project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN - tar xfz /tmp/cov-analysis-linux64.tgz - CC=clang meson build - cov-analysis-linux64-*/bin/cov-build --dir cov-int ninja -C build - tar cfz cov-int.tar.gz cov-int - curl https://scan.coverity.com/builds?project=$COVERITY_SCAN_PROJECT_NAME --form token=$COVERITY_SCAN_TOKEN --form email=$GITLAB_USER_EMAIL --form file=@cov-int.tar.gz --form version="`git describe --tags`" --form description="`git describe --tags` / $CI_COMMIT_TITLE / $CI_COMMIT_REF_NAME:$CI_PIPELINE_ID " integration-slirp4netns: variables: SLIRP4NETNS_VERSION: "v1.1.12" # Consumed by `make benchmark` BENCHMARK_IPERF3_DURATION: "10" script: # Install libslirp - meson build - ninja -C build install # Register the path of libslirp.so.0 - echo /usr/local/lib64 >/etc/ld.so.conf.d/libslirp.conf - ldconfig # Install the dependencies of slirp4netns and its test suite # TODO: install udhcpc for `slirp4netns/tests/test-slirp4netns-dhcp.sh` (currently skipped, due to lack of udhcpc) - dnf install -y autoconf automake findutils iperf3 iproute iputils jq libcap-devel libseccomp-devel nmap-ncat util-linux # Check whether the runner environment is configured correctly - unshare -rn true || (echo Make sure you have relaxed seccomp and appamor && exit 1) - unshare -rn ip tap add tap0 mode tap || (echo Make sure you have /dev/net/tun && exit 1) # Install slirp4netns - git clone https://github.com/rootless-containers/slirp4netns -b "${SLIRP4NETNS_VERSION}" - cd slirp4netns - ./autogen.sh - ./configure - make - make install - slirp4netns --version # Run slirp4netns integration test - make distcheck || (cat $(find . -name 'test-suite.log' ) && exit 1) # Run benchmark test to ensure that libslirp can actually handle packets, with several MTU configurations - make benchmark MTU=1500 - make benchmark MTU=512 - make benchmark MTU=65520