mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-26 02:13:38 +08:00
8f563846e8
When we changed our default from RelWithDebInfo to Debug, we inadvertently ended up with all CI building and running in Debug mode. Change at least one of them back to Release to make sure we don't have any optimizations that cause funky stuff. I'm changing the Ubuntu CI image because it's hopefully the fastest (since rust is relatively dog-slow to compile in release mode).
171 lines
5.4 KiB
YAML
171 lines
5.4 KiB
YAML
name: make test
|
|
|
|
on: [push, pull_request]
|
|
|
|
env:
|
|
CTEST_PARALLEL_LEVEL: "1"
|
|
CMAKE_BUILD_PARALLEL_LEVEL: "4"
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
ubuntu:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@1.70
|
|
- name: Install deps
|
|
run: |
|
|
sudo apt install gettext libpcre2-dev python3-pip tmux
|
|
sudo pip3 install pexpect
|
|
# Generate a locale that uses a comma as decimal separator.
|
|
sudo locale-gen fr_FR.UTF-8
|
|
- name: cmake
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo
|
|
- name: make
|
|
run: |
|
|
make VERBOSE=1
|
|
- name: make test
|
|
run: |
|
|
make VERBOSE=1 test
|
|
|
|
ubuntu-32bit-static-pcre2:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@1.70
|
|
with:
|
|
targets: "i586-unknown-linux-gnu" # rust-toolchain wants this comma-separated
|
|
- name: Install deps
|
|
run: |
|
|
sudo apt update
|
|
sudo apt install gettext python3-pip g++-multilib tmux
|
|
sudo pip3 install pexpect
|
|
- name: cmake
|
|
env:
|
|
CFLAGS: "-m32"
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake -DFISH_USE_SYSTEM_PCRE2=OFF -DRust_CARGO_TARGET=i586-unknown-linux-gnu ..
|
|
- name: make
|
|
run: |
|
|
make VERBOSE=1
|
|
- name: make test
|
|
run: |
|
|
make VERBOSE=1 test
|
|
|
|
ubuntu-asan:
|
|
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
# Rust has two different memory sanitizers of interest; they can't be used at the same time:
|
|
# * AddressSanitizer detects out-of-bound access, use-after-free, use-after-return,
|
|
# use-after-scope, double-free, invalid-free, and memory leaks.
|
|
# * MemorySanitizer detects uninitialized reads.
|
|
#
|
|
RUSTFLAGS: "-Zsanitizer=address"
|
|
# RUSTFLAGS: "-Zsanitizer=memory -Zsanitizer-memory-track-origins"
|
|
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
# All -Z options require running nightly
|
|
- uses: dtolnay/rust-toolchain@nightly
|
|
with:
|
|
# ASAN uses `cargo build -Zbuild-std` which requires the rust-src component
|
|
# this is comma-separated
|
|
components: rust-src
|
|
- name: Install deps
|
|
run: |
|
|
sudo apt install gettext libpcre2-dev python3-pip tmux
|
|
sudo pip3 install pexpect
|
|
- name: cmake
|
|
env:
|
|
CC: clang
|
|
run: |
|
|
mkdir build && cd build
|
|
# Rust's ASAN requires the build system to explicitly pass a --target triple. We read that
|
|
# value from CMake variable Rust_CARGO_TARGET (shared with corrosion).
|
|
cmake .. -DASAN=1 -DRust_CARGO_TARGET=x86_64-unknown-linux-gnu -DCMAKE_BUILD_TYPE=Debug
|
|
- name: make
|
|
run: |
|
|
make VERBOSE=1
|
|
- name: make test
|
|
env:
|
|
FISH_CI_SAN: 1
|
|
ASAN_OPTIONS: check_initialization_order=1:detect_stack_use_after_return=1:detect_leaks=1:fast_unwind_on_malloc=0
|
|
# use_tls=0 is a workaround for LSAN crashing with "Tracer caught signal 11" (SIGSEGV),
|
|
# which seems to be an issue with TLS support in newer glibc versions under virtualized
|
|
# environments. Follow https://github.com/google/sanitizers/issues/1342 and
|
|
# https://github.com/google/sanitizers/issues/1409 to track this issue.
|
|
# UPDATE: this can cause spurious leak reports for __cxa_thread_atexit_impl() under glibc.
|
|
LSAN_OPTIONS: verbosity=0:log_threads=0:use_tls=1:print_suppressions=0
|
|
run: |
|
|
llvm_version=$(clang --version | awk 'NR==1 { split($NF, version, "."); print version[1] }')
|
|
export ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-$llvm_version
|
|
export LSAN_OPTIONS="$LSAN_OPTIONS:suppressions=$PWD/build_tools/lsan_suppressions.txt"
|
|
make VERBOSE=1 test
|
|
|
|
# Our clang++ tsan builds are not recognizing safe rust patterns (such as the fact that Drop
|
|
# cannot be called while a thread is using the object in question). Rust has its own way of
|
|
# running TSAN, but for the duration of the port from C++ to Rust, we'll keep this disabled.
|
|
|
|
# ubuntu-threadsan:
|
|
#
|
|
# runs-on: ubuntu-latest
|
|
#
|
|
# steps:
|
|
# - uses: actions/checkout@v4
|
|
# - uses: dtolnay/rust-toolchain@1.70
|
|
# - name: Install deps
|
|
# run: |
|
|
# sudo apt install gettext libpcre2-dev python3-pip tmux
|
|
# sudo pip3 install pexpect
|
|
# - name: cmake
|
|
# env:
|
|
# FISH_CI_SAN: 1
|
|
# CC: clang
|
|
# run: |
|
|
# mkdir build && cd build
|
|
# cmake ..
|
|
# - name: make
|
|
# run: |
|
|
# make
|
|
# - name: make test
|
|
# run: |
|
|
# make test
|
|
|
|
macos:
|
|
|
|
runs-on: macos-latest
|
|
|
|
env:
|
|
# macOS runners keep having issues loading Cargo.toml dependencies from git (GitHub) instead
|
|
# of crates.io, so give this a try. It's also sometimes significantly faster on all platforms.
|
|
CARGO_NET_GIT_FETCH_WITH_CLI: true
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: dtolnay/rust-toolchain@1.70
|
|
- name: Install deps
|
|
run: |
|
|
# --break-system-packages because homebrew has now declared itself "externally managed".
|
|
# this is CI so we don't actually care.
|
|
sudo pip3 install --break-system-packages pexpect
|
|
brew install tmux
|
|
- name: cmake
|
|
run: |
|
|
mkdir build && cd build
|
|
cmake -DWITH_GETTEXT=NO -DCMAKE_BUILD_TYPE=Debug ..
|
|
- name: make
|
|
run: |
|
|
make VERBOSE=1
|
|
- name: make test
|
|
run: |
|
|
make VERBOSE=1 test
|