Skip to content

ci

ci #4170

Workflow file for this run

name: ci
on:
push:
pull_request:
schedule: [cron: "40 1 * * *"]
jobs:
test-release-build:
name: Build
runs-on: ubuntu-latest
strategy:
matrix:
include:
- toolchain: "nightly"
features: "bench,serde,bt,singlethreaded"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "${{ matrix.toolchain }}"
override: true
- name: Build | Release Mode
uses: actions-rs/cargo@v1
with:
command: build
args: --release --features "${{ matrix.features }}" --manifest-path openraft/Cargo.toml
openraft-test-bench:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- toolchain: "nightly"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "${{ matrix.toolchain }}"
override: true
- name: Test build for benchmark
uses: actions-rs/cargo@v1
with:
command: bench
args: --features bench nothing-to-run --manifest-path openraft/Cargo.toml
# Run openraft unit test `openraft/` and integration test `tests/`.
openraft-test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- toolchain: "stable"
send_delay: "0"
features: ""
# With network delay
- toolchain: "nightly"
send_delay: "30"
features: ""
# Feature-flag: Standard raft term
- toolchain: "nightly"
send_delay: "0"
features: "single-term-leader"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "${{ matrix.toolchain }}"
override: true
# - A store with defensive checks returns error when unexpected accesses are sent to RaftStore.
# - Raft should not depend on defensive error to work correctly.
- name: Test crate `openraft/`
uses: actions-rs/cargo@v1
with:
command: test
args: --features "${{ matrix.features }}" --manifest-path openraft/Cargo.toml
env:
# Parallel tests block each other and result in timeout.
RUST_TEST_THREADS: 2
RUST_LOG: debug
RUST_BACKTRACE: full
OPENRAFT_NETWORK_SEND_DELAY: ${{ matrix.send_delay }}
- name: Test crate `tests/`
uses: actions-rs/cargo@v1
with:
command: test
args: --features "${{ matrix.features }}" --manifest-path tests/Cargo.toml
env:
# Parallel tests block each other and result in timeout.
RUST_TEST_THREADS: 2
RUST_LOG: debug
RUST_BACKTRACE: full
OPENRAFT_NETWORK_SEND_DELAY: ${{ matrix.send_delay }}
- name: Upload artifact
uses: actions/upload-artifact@v3
if: failure()
with:
name: "ut-${{ matrix.toolchain }}-${{ matrix.features }}-${{ matrix.send_delay }}"
path: |
openraft/_log/
tests/_log/
stores:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- store: "stores/memstore"
- store: "stores/rocksstore"
- store: "stores/sledstore"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "nightly"
override: true
# - A store with defensive checks returns error when unexpected accesses are sent to RaftStore.
# - Raft should not depend on defensive error to work correctly.
- name: Unit Tests, with defensive store
uses: actions-rs/cargo@v1
with:
command: test
args: --manifest-path "${{ matrix.store }}/Cargo.toml"
env:
# Parallel tests block each other and result in timeout.
RUST_TEST_THREADS: 2
RUST_LOG: debug
RUST_BACKTRACE: full
OPENRAFT_STORE_DEFENSIVE: on
# Test external crate.
# cluster_benchmark is a standalone crate for benchmarking openraft cluster.
cluster-benchmark:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- crate: "cluster_benchmark"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "nightly"
override: true
- name: Unit Tests
uses: actions-rs/cargo@v1
with:
command: test
args: --tests nothing --manifest-path "${{ matrix.crate }}/Cargo.toml"
env:
RUST_LOG: debug
RUST_BACKTRACE: full
# Test external crate.
rt-monoio:
runs-on: ubuntu-latest
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "nightly"
override: true
- name: Unit Tests
uses: actions-rs/cargo@v1
with:
command: test
args: --tests --manifest-path "rt-monoio/Cargo.toml"
env:
RUST_LOG: debug
RUST_BACKTRACE: full
# Feature "serde" will be enabled if one of the member crates enables
# "serde", such as `memstore`, when building a cargo workspace.
#
# To test openraft with "serde" off, it must not build other crates.
#
# This job only tests crate `openraft`.
openraft-feature-test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
# No feature flags are enabled
- toolchain: "nightly"
features: ""
# Enable "serde"
- toolchain: "nightly"
features: "serde"
# Some test requires feature single-term-leader on and serde off.
# This can only be tested without building another crate that enables
# `serde`.
# Move this test to unit-test when the snapshot API is upgraded to
# non-serde-dependent.
- toolchain: "nightly"
features: "single-term-leader"
- toolchain: "nightly"
features: "single-term-leader,serde,singlethreaded"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "${{ matrix.toolchain }}"
override: true
- name: Test crate `openraft/`
uses: actions-rs/cargo@v1
with:
command: test
args: --features "${{ matrix.features }}" --manifest-path openraft/Cargo.toml
env:
# Parallel tests block each other and result in timeout.
RUST_TEST_THREADS: 2
RUST_LOG: debug
RUST_BACKTRACE: full
- name: Upload artifact
uses: actions/upload-artifact@v3
if: failure()
with:
name: openraft-feature-test
path: |
openraft/_log/
# Integration tests with various features.
tests-feature-test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- toolchain: "nightly"
features: ""
- toolchain: "nightly"
features: "single-term-leader"
- toolchain: "nightly"
features: "loosen-follower-log-revert"
steps:
- name: Setup | Checkout
uses: actions/checkout@v4
- name: Setup | Toolchain
uses: actions-rs/[email protected]
with:
toolchain: "${{ matrix.toolchain }}"
override: true
- name: Test crate `tests/`
uses: actions-rs/cargo@v1
with:
command: test
args: --features "${{ matrix.features }}" --manifest-path tests/Cargo.toml
env:
# Parallel tests block each other and result in timeout.
RUST_TEST_THREADS: 2
RUST_LOG: debug
RUST_BACKTRACE: full
- name: Upload artifact
uses: actions/upload-artifact@v3
if: failure()
with:
name: tests-feature-test
path: |
tests/_log/
lint:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions-rs/[email protected]
with:
components: rustfmt, clippy
- name: Format
uses: actions-rs/cargo@v1
with:
command: fmt
args: --all -- --check
- name: clippy
shell: bash
run: |
cargo clippy --no-deps --workspace --all-targets -- -D warnings
cargo clippy --no-deps --workspace --all-targets --features "bt,serde,bench,single-term-leader,compat" -- -D warnings
- name: Build-doc
uses: actions-rs/cargo@v1
with:
command: doc
args: --all --no-deps
env:
RUSTDOCFLAGS: "-D warnings"
- name: Audit dependencies
shell: bash
# if: "!contains(github.event.head_commit.message, 'skip audit')"
run: cargo audit --db ./target/advisory-db
examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
toolchain:
- "stable"
- "nightly"
example:
- "memstore"
- "raft-kv-memstore"
- "raft-kv-memstore-network-v2"
- "raft-kv-memstore-opendal-snapshot-data"
- "raft-kv-memstore-singlethreaded"
- "raft-kv-rocksdb"
steps:
- uses: actions/checkout@v4
- uses: actions-rs/[email protected]
with:
toolchain: "${{ matrix.toolchain }}"
override: true
components: rustfmt, clippy
# Run the following steps in the exmple dir in order to reuse the `./target` dir.
- name: Test examples/${{ matrix.example }}
shell: bash
run: |
cd examples/${{ matrix.example }}
cargo test
env:
RUST_LOG: debug
- name: Test demo script of examples/${{ matrix.example }}
# The script is not meant for testing. Just to ensure it works but do not
# rely on it.
if: ${{ matrix.toolchain == 'stable' }}
shell: bash
run: |
cd examples/${{ matrix.example }}
./test-cluster.sh
- name: Format
# clippy/format produces different result with stable and nightly. Only with nightly.
if: ${{ matrix.toolchain == 'nightly' }}
shell: bash
run: |
cd examples/${{ matrix.example }}
cargo fmt --all -- --check
- name: Clippy
# clippy/format produces different result with stable and nightly. Only with nightly.
if: ${{ matrix.toolchain == 'nightly' }}
shell: bash
run: |
cd examples/${{ matrix.example }}
cargo clippy --no-deps --all-targets -- -D warnings