diff --git a/.github/workflows/ci-sanitize.yml b/.github/workflows/ci-sanitize.yml new file mode 100644 index 00000000..4f0e3850 --- /dev/null +++ b/.github/workflows/ci-sanitize.yml @@ -0,0 +1,93 @@ +# Run tests with sanitizers enabled +# - UBSAN - undefined behaviour (default) +# - ASAN - memory leaks etc +# +# There are known problems, for now only for targeted testing + +name: Sanitizer checks +run-name: Sanitizer checks +on: + push: + branches: + - sanitize-test +jobs: + build-ubsan: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: uname -a + - run: sudo modprobe btrfs + - run: sudo apt-get install -y pkg-config gcc liblzo2-dev libzstd-dev libblkid-dev uuid-dev zlib1g-dev libext2fs-dev e2fsprogs libudev-dev python3-sphinx libaio-dev liburing-dev attr jq + - name: Configure + run: ./autogen.sh && ./configure --disable-documentation + - name: Make + run: make V=1 D=ubsan + - name: Tests cli + run: sudo make D=ubsan TEST_LOG=dump test-cli + - name: Tests mkfs + run: sudo make D=ubsan TEST_LOG=dump test-mkfs + - name: Tests check + run: sudo make D=ubsan TEST_LOG=dump test-check + - name: Tests check (lowmem) + run: sudo make D=ubsan TEST_LOG=dump test-check-lowmem + - name: Tests misc + run: sudo make D=ubsan TEST_LOG=dump test-misc + - name: Tests fuzz + run: sudo make D=ubsan TEST_LOG=dump test-fuzz + - name: Tests convert + run: sudo make D=ubsan TEST_LOG=dump test-convert + - name: Test internal APIs + run: make D=ubsan test-api + - name: Libbtrfsutil test + run: make D=ubsan test-libbtrfsutil + - name: Libbtrfs build test + run: make D=ubsan library-test + - name: Tests hash (correctness) + run: make D=ubsan hash-vectest && ./hash-vectest + - name: Save logs on failure + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: test-results + path: "tests/*-results.txt" + if-no-files-found: ignore + build-asan: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: uname -a + - run: sudo modprobe btrfs + - run: sudo apt-get install -y pkg-config gcc liblzo2-dev libzstd-dev libblkid-dev uuid-dev zlib1g-dev libext2fs-dev e2fsprogs libudev-dev python3-sphinx libaio-dev liburing-dev attr jq + - name: Configure + run: ./autogen.sh && ./configure --disable-documentation + - name: Make + run: make V=1 D=asan + - name: Tests cli + run: sudo make D=asan TEST_LOG=dump test-cli + - name: Tests mkfs + run: sudo make D=asan TEST_LOG=dump test-mkfs + - name: Tests check + run: sudo make D=asan TEST_LOG=dump test-check + - name: Tests check (lowmem) + run: sudo make D=asan TEST_LOG=dump test-check-lowmem + - name: Tests misc + run: sudo make D=asan TEST_LOG=dump test-misc + - name: Tests fuzz + run: sudo make D=asan TEST_LOG=dump test-fuzz + - name: Tests convert + run: sudo make D=asan TEST_LOG=dump test-convert + - name: Test internal APIs + run: make D=asan test-api + - name: Libbtrfsutil test + run: make D=asan test-libbtrfsutil + - name: Libbtrfs build test + run: make D=asan library-test + - name: Tests hash (correctness) + run: make D=asan hash-vectest && ./hash-vectest + - name: Save logs on failure + if: ${{ failure() }} + uses: actions/upload-artifact@v4 + with: + name: test-results + path: "tests/*-results.txt" + if-no-files-found: ignore