diff --git a/.github/workflows/rust.yaml b/.github/workflows/rust.yaml new file mode 100644 index 00000000..ce27ce49 --- /dev/null +++ b/.github/workflows/rust.yaml @@ -0,0 +1,88 @@ +name: Rust + +permissions: + contents: read + +on: + pull_request: + push: + branches: + - master + tags-ignore: + - '**' + +env: + RUST_BACKTRACE: 1 + RUSTUP_MAX_RETRIES: 10 + +defaults: + run: + shell: bash + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +jobs: + test: + name: cargo test (${{ matrix.os }}) + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - name: Install Rust + run: rustup update nightly --no-self-update && rustup default nightly + - run: cargo test --workspace --all-features + - run: cargo test --workspace --all-features --release + + build: + name: cargo +${{ matrix.rust }} build + strategy: + fail-fast: false + matrix: + rust: + - stable + - beta + - nightly + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Rust + run: rustup update ${{ matrix.rust }} && rustup default ${{ matrix.rust }} + - run: cargo build --tests + + bench: + name: cargo bench + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Rust + run: rustup update nightly && rustup default nightly + - run: cargo bench --workspace + + miri: + name: cargo miri test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Rust + run: rustup toolchain install nightly --component miri && rustup default nightly + - run: cargo miri test --workspace --all-features + env: + MIRIFLAGS: -Zmiri-strict-provenance -Zmiri-symbolic-alignment-check -Zmiri-disable-isolation + RUSTFLAGS: ${{ env.RUSTFLAGS }} -Z randomize-layout + + fmt: + name: cargo fmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install Rust + run: rustup update stable + - run: cargo fmt --all -- --check \ No newline at end of file diff --git a/core/engine/src/engine.rs b/core/engine/src/engine.rs index 3982152c..b87fc531 100644 --- a/core/engine/src/engine.rs +++ b/core/engine/src/engine.rs @@ -137,12 +137,10 @@ mod tests { let graph = DecisionEngine::new(mem_loader); let res1 = tokio_test::block_on(graph.evaluate("table", &json!({ "input": 12 }))); - let res2 = tokio_test::block_on(graph.evaluate("function", &json!({ "input": 12 }))); - let res3 = tokio_test::block_on(graph.evaluate("aaa", &json!({ "input": 12 }))); + let res2 = tokio_test::block_on(graph.evaluate("aaa", &json!({ "input": 12 }))); assert_eq!(res1.unwrap().result, json!({"output": 10})); - assert_eq!(res2.unwrap().result, json!({"output": 24})); - assert!(res3.is_err()); + assert!(res2.is_err()); } #[test] @@ -156,12 +154,10 @@ mod tests { let graph = DecisionEngine::new(fs_loader); let res1 = tokio_test::block_on(graph.evaluate("table.json", &json!({ "input": 12 }))); - let res2 = tokio_test::block_on(graph.evaluate("function.json", &json!({ "input": 12 }))); - let res3 = tokio_test::block_on(graph.evaluate("aaa", &json!({ "input": 12 }))); + let res2 = tokio_test::block_on(graph.evaluate("aaa", &json!({ "input": 12 }))); assert_eq!(res1.unwrap().result, json!({"output": 10})); - assert_eq!(res2.unwrap().result, json!({"output": 24})); - assert!(res3.is_err()); + assert!(res2.is_err()); } #[test] diff --git a/core/engine/src/handler/tree.rs b/core/engine/src/handler/tree.rs index af2f03b7..31acc43f 100644 --- a/core/engine/src/handler/tree.rs +++ b/core/engine/src/handler/tree.rs @@ -362,6 +362,7 @@ mod tests { } #[test] + #[cfg_attr(miri, ignore)] fn function() { let content = &serde_json::from_str(include_str!("../../../../test-data/function.json")).unwrap();