raft-engine 0.4.2

A persistent storage engine for Multi-Raft logs
Documentation
name: Rust

on: [push, pull_request]

env:
  CARGO_TERM_COLOR: always

jobs:
  nightly:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-latest, macos-latest ]
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Install nightly toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly-2023-12-31
          override: true
          components: rustfmt, clippy, rust-src
      - uses: Swatinem/rust-cache@v1
        with:
          sharedKey: ${{ matrix.os }}
      - name: Cache dependencies
        if: ${{ matrix.os == 'ubuntu-latest' }}
        run: if [[ ! -e ~/.cargo/bin/grcov ]]; then cargo install grcov; fi
      - name: Format
        run: |
          make format
          git diff --exit-code
      - name: Clippy
        run: make clippy
        env:
          EXTRA_CARGO_ARGS: '--fix'
      - name: Run tests
        run: make test
        env:
          RUST_BACKTRACE: 1
          EXTRA_CARGO_ARGS: '--verbose'
      - name: Run asan tests
        if: ${{ matrix.os == 'ubuntu-latest' }}
        run: make test
        env:
          RUST_BACKTRACE: 1
          RUSTFLAGS: '-Zsanitizer=address'
          RUSTDOCFLAGS: '-Zsanitizer=address'
          EXTRA_CARGO_ARGS: '--verbose -Zbuild-std --target x86_64-unknown-linux-gnu'
  stable:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ ubuntu-latest ]
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.75.0
          override: true
          components: rustfmt, clippy, rust-src
      - uses: Swatinem/rust-cache@v1
        with:
          sharedKey: ${{ matrix.os }}-stable
      - name: Clippy
        run: make clippy
        env:
          WITH_STABLE_TOOLCHAIN: 'force'
      - name: Run tests
        run: make test
        env:
          RUST_BACKTRACE: 1
          EXTRA_CARGO_ARGS: '--verbose'
          WITH_STABLE_TOOLCHAIN: 'force'
  coverage:
    runs-on: ubuntu-latest
    needs: nightly
    steps:
      - uses: actions/checkout@v2
        with:
          ref: ${{ github.event.pull_request.head.sha }}
      - name: Install nightly toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: nightly-2023-12-31
          override: true
          components: llvm-tools-preview
      - uses: Swatinem/rust-cache@v1
        with:
          sharedKey: ubuntu-latest
      - name: Install grcov
        run: if [[ ! -e ~/.cargo/bin/grcov ]]; then cargo install --locked grcov; fi
      - name: Run tests
        run: |
          make test_matrix
        env:
          RUSTFLAGS: '-Cinstrument-coverage'
          LLVM_PROFILE_FILE: '%p-%m.profraw'
          EXTRA_CARGO_ARGS: '--verbose'
      - name: Run grcov
        run: grcov `find . \( -name "*.profraw" \) -print` --binary-path target/debug/deps/ -s . -t lcov --branch --ignore-not-existing --ignore '../**' --ignore '/*' -o coverage.lcov
      - name: Upload
        uses: codecov/codecov-action@v3
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        with:
          file: coverage.lcov