congee 0.4.1

A Rust implementation of ART-OLC concurrent adaptive radix tree.
Documentation
name: congee

on:
  push:
    branches:
      - main 
      - tiered
  pull_request:
    branches: [ main ]
  schedule:
    - cron:  '0 10 * * 3'

jobs:
  check:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Setup toolchain
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: stable
        components: rustfmt, clippy
    - name: Check
      run: cargo clippy --all-features -- -D warnings
  
  fmt:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Setup toolchain
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: stable
        components: rustfmt, clippy
    - name: Format check
      run: cargo fmt --all -- --check

  test_sans:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Setup toolchain
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: nightly
        components: rust-src
    - name: Install llvm-dev
      run: sudo apt install llvm-dev 
    - name: Run cargo test
      run: cargo test
    - name: Run address sanitizer tests
      run: |
        env ASAN_OPTIONS="detect_odr_violation=0" RUSTFLAGS="-Z sanitizer=address" \
        cargo test -Zbuild-std --target x86_64-unknown-linux-gnu --tests
    - name: Run memory sanitizer tests
      run: |
        env RUSTFLAGS="-Z sanitizer=memory" \
        cargo test -Zbuild-std --target x86_64-unknown-linux-gnu --tests
  
  shuttle:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Setup toolchain
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: nightly
        components: rust-src
    - name: Shuttle concurrent insert read
      run: cargo test --features "shuttle" shuttle_concurrent_insert_read --release -- --nocapture
    - name: Shuttle insert only
      run: cargo test --features "shuttle" shuttle_insert_only --release -- --nocapture
    - name: congee_arc
      run: cargo test --features "shuttle" shuttle_get_insert_race --release -- --nocapture
 
  
  benchmark:
    needs: shuttle 
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Setup toolchain
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: stable
        components: rust-src
    - name: Run benchmark
      run: env SHUMAI_FILTER="basic-basic-.*-ART" SHUMAI_THREAD=4 cargo bench --bench basic
    - uses: actions/upload-artifact@v4
      with:
        name: shumai-results 
        path: target/benchmark/**/*.json
    - name: Convert benchmark output
      run: python3 .github/workflows/shumai_converter.py
    - name: Store benchmark result
      uses: benchmark-action/github-action-benchmark@v1
      with:
        name: 'Congee basic op performance'
        tool: 'customBiggerIsBetter'
        output-file-path: output.json
        fail-on-alert: true
        github-token: ${{ secrets.GITHUB_TOKEN }}
        auto-push: true

  
  
  fuzzing:
    needs: fmt
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
    - uses: actions/checkout@v4
    - name: Setup toolchain
      uses: dtolnay/rust-toolchain@v1
      with:
        toolchain: nightly
        components: rust-src, llvm-tools-preview
    - name: Install cargo-fuzz
      run: cargo install cargo-fuzz
    - name: Install cargo-binutils
      run: cargo install cargo-binutils
    - name: Clone fuzzing repo
      run: |
        cd fuzz
        git clone --depth 1 https://${{ secrets.PERSONAL_ACCESS_TOKEN }}@github.com/XiangpengHao/congee-fuzzing.git
        mv congee-fuzzing/* .
    - name: Run fuzzing
      run: |
        cd fuzz
        cargo fuzz run btree_check --release --debug-assertions -s address -- -max_len=655350 -runs=0
  
    # Seems to be a bug from cargo-fuzz: https://github.com/rust-fuzz/cargo-fuzz/issues/320
    # - name: Run fuzz coverage
    #   run: |
    #     cd fuzz
    #     cargo fuzz coverage btree_check corpus/btree_check
    #     cargo cov -- export target/x86_64-unknown-linux-gnu/release/btree_check --instr-profile=coverage/btree_check/coverage.profdata -ignore-filename-regex=".cargo" -format="lcov" > coverage.txt
    # - name: Upload to codecov.io
    #   uses: codecov/codecov-action@v2
    #   with:
    #     files: ./fuzz/coverage.txt
    #     flags: fuzzing