From 26d359b071809e2240207596b48348cd7980afb8 Mon Sep 17 00:00:00 2001 From: Johannes Altmanninger Date: Fri, 12 Jan 2024 12:18:27 +0100 Subject: [PATCH] Ubuntu ASAN Dockerfile --- docker/bionic-asan-clang.Dockerfile | 42 ---------------------- docker/context/fish_run_tests.sh | 2 +- docker/jammy-asan-clang.Dockerfile | 55 +++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 43 deletions(-) delete mode 100644 docker/bionic-asan-clang.Dockerfile create mode 100644 docker/jammy-asan-clang.Dockerfile diff --git a/docker/bionic-asan-clang.Dockerfile b/docker/bionic-asan-clang.Dockerfile deleted file mode 100644 index 6ed4d6666..000000000 --- a/docker/bionic-asan-clang.Dockerfile +++ /dev/null @@ -1,42 +0,0 @@ -FROM ubuntu:18.04 -LABEL org.opencontainers.image.source=https://github.com/fish-shell/fish-shell - -ENV LANG C.UTF-8 -ENV LC_ALL C.UTF-8 - -RUN apt-get update \ - && apt-get -y install \ - build-essential \ - cmake \ - clang-9 \ - gettext \ - git \ - libncurses5-dev \ - libpcre2-dev \ - locales \ - ninja-build \ - python3 \ - python3-pexpect \ - sudo \ - && locale-gen en_US.UTF-8 \ - && apt-get clean - -RUN groupadd -g 1000 fishuser \ - && useradd -p $(openssl passwd -1 fish) -d /home/fishuser -m -u 1000 -g 1000 fishuser \ - && adduser fishuser sudo \ - && mkdir -p /home/fishuser/fish-build \ - && mkdir /fish-source \ - && chown -R fishuser:fishuser /home/fishuser /fish-source - -USER fishuser -WORKDIR /home/fishuser - -COPY fish_run_tests.sh / - -ENV CXXFLAGS="-fno-omit-frame-pointer -fsanitize=undefined -fsanitize=address" \ - CC=clang-9 \ - CXX=clang++-9 \ - ASAN_OPTIONS=check_initialization_order=1:detect_stack_use_after_return=1:detect_leaks=1 \ - UBSAN_OPTIONS=print_stacktrace=1:report_error_type=1 - -CMD /fish_run_tests.sh diff --git a/docker/context/fish_run_tests.sh b/docker/context/fish_run_tests.sh index 1763aa91a..1b3d7894d 100755 --- a/docker/context/fish_run_tests.sh +++ b/docker/context/fish_run_tests.sh @@ -4,7 +4,7 @@ # It is the entry point for running Docker-based tests. cd ~/fish-build -cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug /fish-source +cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug /fish-source "$@" # Spawn a shell if FISH_RUN_SHELL_BEFORE_TESTS is set. if test -n "$FISH_RUN_SHELL_BEFORE_TESTS" diff --git a/docker/jammy-asan-clang.Dockerfile b/docker/jammy-asan-clang.Dockerfile new file mode 100644 index 000000000..1a8fa72b2 --- /dev/null +++ b/docker/jammy-asan-clang.Dockerfile @@ -0,0 +1,55 @@ +FROM ubuntu:jammy +LABEL org.opencontainers.image.source=https://github.com/fish-shell/fish-shell + +ENV LANG C.UTF-8 +ENV LC_ALL C.UTF-8 + +RUN apt-get update \ + && apt-get -y install \ + build-essential \ + cmake \ + clang \ + gettext \ + git \ + libncurses5-dev \ + libpcre2-dev \ + locales \ + ninja-build \ + python3 \ + python3-pexpect \ + tmux \ + rustc \ + sudo \ + && locale-gen en_US.UTF-8 \ + && apt-get clean + +RUN groupadd -g 1000 fishuser \ + && useradd -p $(openssl passwd -1 fish) -d /home/fishuser -m -u 1000 -g 1000 fishuser \ + && adduser fishuser sudo \ + && mkdir -p /home/fishuser/fish-build \ + && mkdir /fish-source \ + && chown -R fishuser:fishuser /home/fishuser /fish-source + +RUN llvm_version=$(clang --version | awk 'NR==1 { split($NF, version, "."); print version[1] }') \ + && echo "$llvm_version" >/.llvm-version + +USER fishuser +WORKDIR /home/fishuser + +RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > /tmp/rustup.sh \ + && sh /tmp/rustup.sh -y --default-toolchain nightly --component rust-src + +COPY fish_run_tests.sh / + +ENV \ + RUSTFLAGS=-Zsanitizer=address \ + CC=clang \ + CXX=clang++ \ + CXXFLAGS="-fno-omit-frame-pointer -fsanitize=undefined -fsanitize=address -DFISH_CI_SAN" \ + ASAN_OPTIONS=check_initialization_order=1:detect_stack_use_after_return=1:detect_leaks=1 \ + LSAN_OPTIONS=verbosity=0:log_threads=0:use_tls=1:print_suppressions=0:suppressions=/fish-source/build_tools/lsan_suppressions.txt \ + FISH_CI_SAN=1 + +CMD . ~/.cargo/env \ + && ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-$(cat /.llvm-version) \ + /fish_run_tests.sh -DASAN=1 -DRust_CARGO_TARGET=x86_64-unknown-linux-gnu