From b5fe4cf9ddce95974c281131b0b52787b17464f4 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 08:33:48 -0700 Subject: [PATCH 01/13] Updating github workflow in preperation for target testing --- .github/workflows/main.yml | 206 ++++++++++++++++++++++--------------- 1 file changed, 123 insertions(+), 83 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 329fbda..beb98f7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,6 +1,6 @@ on: pull_request: - types: [opened, synchronize, reopened] + types: [ opened, synchronize, reopened ] push: branches: - master @@ -10,14 +10,112 @@ name: Continuous integration jobs: ci: - name: Build and test + runs-on: ubuntu-latest + name: "CI pass" + needs: + - check_style + - minimum_rust_version + - docs + - test + - fuzz + steps: + - run: exit 0 + + check_style: + name: Check file formatting and style + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: stable + components: clippy, rustfmt + + - name: Cache cargo registry + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: clippy-cargo-${{ hashFiles('**/Cargo.toml') }} + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get -y install libpq-dev + + - name: Check file formatting + run: cargo fmt --all -- --check + + - name: Run clippy + run: cargo clippy --workspace --all-features + + minimum_rust_version: + name: Check minimum rust version + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: 1.60.0 + + - name: Cache cargo registry + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: minimal_rust_version-cargo-${{ hashFiles('**/Cargo.toml') }} + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get -y install libpq-dev + + - name: Use minimal dependencies + run: | + RUSTC_BOOTSTRAP=1 cargo update -Z minimal-versions + + - name: Check build + run: cargo check --workspace + + docs: + name: "Check documentation" + needs: [ test ] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + + - name: Check documentation + env: + RUSTDOCFLAGS: --cfg docsrs + run: cargo doc --no-deps --all-features + + test: + name: "Test" runs-on: ubuntu-latest strategy: matrix: - rust: + name: - stable - beta - + # - stable / wasm32 + # - beta / wasm32 + include: + - name: stable + rust: stable + - name: beta + rust: beta + - name: stable / wasm32 + rust: stable + target: wasm32-unknown-unknown + - name: beta / wasm32 + rust: beta + target: wasm32-unknown-unknown services: postgres: image: postgres:11.6 @@ -33,93 +131,65 @@ jobs: MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' ports: - 3306:3306 - steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - - name: Cache cargo registry - uses: actions/cache@v3 + - uses: dtolnay/rust-toolchain@stable with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: ${{ runner.os }}-${{ matrix.backend }}-cargo-${{ hashFiles('**/Cargo.toml') }} + toolchain: ${{ matrix.rust }} + targets: ${{ matrix.target }} - name: Install dependencies run: | sudo apt-get update sudo apt-get -y install libpq-dev - - name: Install toolchain - uses: dtolnay/rust-toolchain@stable - with: - toolchain: ${{ matrix.rust }} - - - uses: davidB/rust-cargo-make@v1 - - - name: Build rust-decimal - run: cargo build --workspace --all-features # Important to keep this to ensure docs.rs passes - - name: Run no_std tests run: cargo make test-no-std + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run default tests run: cargo make test-default + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run legacy operation tests run: cargo make test-legacy-ops + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run mathematical function tests run: cargo make test-maths + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run miscellaneous tests run: cargo make test-misc + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run database tests run: cargo make test-db + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run serde tests run: cargo make test-serde + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - name: Run macro tests run: cargo make test-macros - - check_style: - name: Check file formatting and style - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - uses: dtolnay/rust-toolchain@stable - with: - toolchain: stable - components: clippy, rustfmt - - - name: Cache cargo registry - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: clippy-cargo-${{ hashFiles('**/Cargo.toml') }} - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get -y install libpq-dev - - - name: Check file formatting - run: cargo fmt --all -- --check - - - name: Run clippy - run: cargo clippy --workspace --all-features + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} fuzz: name: Fuzz runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Rust toolchain uses: dtolnay/rust-toolchain@stable @@ -133,33 +203,3 @@ jobs: - name: Run fuzz tests run: cargo make fuzz - - minimum_rust_version: - name: Check minimum rust version - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - uses: dtolnay/rust-toolchain@stable - with: - toolchain: 1.60.0 - - - name: Cache cargo registry - uses: actions/cache@v3 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - key: minimal_rust_version-cargo-${{ hashFiles('**/Cargo.toml') }} - - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get -y install libpq-dev - - - name: Use minimal dependencies - run: | - RUSTC_BOOTSTRAP=1 cargo update -Z minimal-versions - - - name: Check build - run: cargo check --workspace From de38264d5f318a711c33879e24105347017adbe7 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 08:42:18 -0700 Subject: [PATCH 02/13] Added cargo make as well as removed wasm targets --- .github/workflows/main.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index beb98f7..4a071ac 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -103,19 +103,19 @@ jobs: name: - stable - beta - # - stable / wasm32 - # - beta / wasm32 + # - stable / wasm32 + # - beta / wasm32 include: - name: stable rust: stable - name: beta rust: beta - - name: stable / wasm32 - rust: stable - target: wasm32-unknown-unknown - - name: beta / wasm32 - rust: beta - target: wasm32-unknown-unknown + # - name: stable / wasm32 + # rust: stable + # target: wasm32-unknown-unknown + #- name: beta / wasm32 + # rust: beta + # target: wasm32-unknown-unknown services: postgres: image: postgres:11.6 @@ -139,6 +139,8 @@ jobs: toolchain: ${{ matrix.rust }} targets: ${{ matrix.target }} + - uses: davidB/rust-cargo-make@v1 + - name: Install dependencies run: | sudo apt-get update From c7cb960c9b12e492de9a119b8e5f9051a308dc4a Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 08:59:59 -0700 Subject: [PATCH 03/13] Split tests into multiple jobs --- .github/workflows/main.yml | 93 ++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 23 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4a071ac..feb0bb9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,7 +17,6 @@ jobs: - minimum_rust_version - docs - test - - fuzz steps: - run: exit 0 @@ -89,6 +88,8 @@ jobs: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable + with: + toolchain: nightly - name: Check documentation env: @@ -98,6 +99,16 @@ jobs: test: name: "Test" runs-on: ubuntu-latest + needs: + - standard_tests + - database_tests + - fuzz_tests + steps: + - run: exit 0 + + standard_tests: + name: "Standard Tests" + runs-on: ubuntu-latest strategy: matrix: name: @@ -116,21 +127,6 @@ jobs: #- name: beta / wasm32 # rust: beta # target: wasm32-unknown-unknown - services: - postgres: - image: postgres:11.6 - env: - POSTGRES_PASSWORD: '' - ports: - - 5432:5432 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 - mysql: - image: mysql:8 - env: - MYSQL_ROOT_PASSWORD: '' - MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' - ports: - - 3306:3306 steps: - uses: actions/checkout@v4 @@ -171,11 +167,6 @@ jobs: env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - - name: Run database tests - run: cargo make test-db - env: - CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - - name: Run serde tests run: cargo make test-serde env: @@ -186,8 +177,64 @@ jobs: env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - fuzz: - name: Fuzz + database_tests: + name: "Database Tests" + runs-on: ubuntu-latest + strategy: + matrix: + name: + - stable + - beta + # - stable / wasm32 + # - beta / wasm32 + include: + - name: stable + rust: stable + - name: beta + rust: beta + # - name: stable / wasm32 + # rust: stable + # target: wasm32-unknown-unknown + #- name: beta / wasm32 + # rust: beta + # target: wasm32-unknown-unknown + services: + postgres: + image: postgres:11.6 + env: + POSTGRES_PASSWORD: '' + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + mysql: + image: mysql:8 + env: + MYSQL_ROOT_PASSWORD: '' + MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' + ports: + - 3306:3306 + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ matrix.rust }} + targets: ${{ matrix.target }} + + - uses: davidB/rust-cargo-make@v1 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get -y install libpq-dev + + - name: Run database tests + run: cargo make test-db + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} + + fuzz_tests: + name: Fuzz Tests runs-on: ubuntu-latest steps: - name: Checkout repository From 80b7ea26640190c84d62f8d5d73269604d485192 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:09:01 -0700 Subject: [PATCH 04/13] Scope misc tests --- make/tests/misc.toml | 14 +-- src/rand.rs | 2 +- tests/decimal_tests.rs | 187 ++++++++++++++++++++++------------------- 3 files changed, 107 insertions(+), 96 deletions(-) diff --git a/make/tests/misc.toml b/make/tests/misc.toml index 06095b4..a149971 100644 --- a/make/tests/misc.toml +++ b/make/tests/misc.toml @@ -10,28 +10,28 @@ dependencies = [ [tasks.test-proptest] command = "cargo" -args = ["test", "--workspace", "--no-default-features", "--features=proptest", "--", "--skip", "generated"] +args = ["test", "--workspace", "--no-default-features", "--features=proptest", "proptest_tests", "--", "--skip", "generated"] [tasks.test-rust-fuzz] command = "cargo" -args = ["test", "--workspace", "--no-default-features", "--features=rust-fuzz", "rust_fuzz", "--", "--skip", "generated"] +args = ["test", "--workspace", "--no-default-features", "--features=rust-fuzz", "rust_fuzz_tests", "--", "--skip", "generated"] [tasks.test-rocket-traits] command = "cargo" -args = ["test", "--workspace", "--features=rocket-traits"] +args = ["test", "--workspace", "--features=rocket-traits", "rocket_tests"] [tasks.test-borsh] command = "cargo" -args = ["test", "--workspace", "--features=borsh", "--", "--skip", "generated"] +args = ["test", "--workspace", "--features=borsh", "borsh_tests", "--", "--skip", "generated"] [tasks.test-ndarray] command = "cargo" -args = ["test", "--workspace", "--features=ndarray", "--", "--skip", "generated"] +args = ["test", "--workspace", "--features=ndarray", "nd_array_tests", "--", "--skip", "generated"] [tasks.test-rkyv] command = "cargo" -args = ["test", "--workspace", "--features=rkyv", "--features=rkyv-safe", "--", "--skip", "generated"] +args = ["test", "--workspace", "--features=rkyv", "--features=rkyv-safe", "rkyv_tests", "--", "--skip", "generated"] [tasks.test-rand] command = "cargo" -args = ["test", "--workspace", "--features=rand", "--", "--skip", "generated"] +args = ["test", "--workspace", "--features=rand", "rand_tests", "--", "--skip", "generated"] diff --git a/src/rand.rs b/src/rand.rs index afd8a64..991c60d 100644 --- a/src/rand.rs +++ b/src/rand.rs @@ -125,7 +125,7 @@ fn sync_scales(mut a: Decimal, mut b: Decimal) -> (Decimal, Decimal) { } #[cfg(test)] -mod tests { +mod rand_tests { use std::collections::HashSet; use super::*; diff --git a/tests/decimal_tests.rs b/tests/decimal_tests.rs index 03ad08e..cb77bb5 100644 --- a/tests/decimal_tests.rs +++ b/tests/decimal_tests.rs @@ -128,103 +128,114 @@ fn it_can_serialize_deserialize() { } } -#[test] #[cfg(feature = "borsh")] -fn it_can_serialize_deserialize_borsh() { - let tests = [ - "12.3456789", - "5233.9008808150288439427720175", - "-5233.9008808150288439427720175", - ]; - for test in &tests { - let a = Decimal::from_str(test).unwrap(); - let mut bytes: Vec = Vec::new(); - borsh::BorshSerialize::serialize(&a, &mut bytes).unwrap(); - let b: Decimal = borsh::BorshDeserialize::deserialize(&mut bytes.as_slice()).unwrap(); - assert_eq!(test.to_string(), b.to_string()); - let bytes = borsh::try_to_vec_with_schema(&a); - assert!(bytes.is_ok(), "try_to_vec_with_schema.is_ok()"); - let bytes = bytes.unwrap(); - let result = borsh::try_from_slice_with_schema(&bytes); - assert!(result.is_ok(), "try_from_slice_with_schema.is_ok()"); - let b: Decimal = result.unwrap(); - assert_eq!(test.to_string(), b.to_string()); +mod borsh_tests { + use rust_decimal::Decimal; + use std::str::FromStr; + + #[test] + fn it_can_serialize_deserialize_borsh() { + let tests = [ + "12.3456789", + "5233.9008808150288439427720175", + "-5233.9008808150288439427720175", + ]; + for test in &tests { + let a = Decimal::from_str(test).unwrap(); + let mut bytes: Vec = Vec::new(); + borsh::BorshSerialize::serialize(&a, &mut bytes).unwrap(); + let b: Decimal = borsh::BorshDeserialize::deserialize(&mut bytes.as_slice()).unwrap(); + assert_eq!(test.to_string(), b.to_string()); + let bytes = borsh::try_to_vec_with_schema(&a); + assert!(bytes.is_ok(), "try_to_vec_with_schema.is_ok()"); + let bytes = bytes.unwrap(); + let result = borsh::try_from_slice_with_schema(&bytes); + assert!(result.is_ok(), "try_from_slice_with_schema.is_ok()"); + let b: Decimal = result.unwrap(); + assert_eq!(test.to_string(), b.to_string()); + } } } -#[test] #[cfg(feature = "ndarray")] -fn it_can_do_scalar_ops_in_ndarray() { - use ndarray::Array1; - use num_traits::FromPrimitive; +mod ndarray_tests { + use rust_decimal::Decimal; - let array_a = Array1::from(vec![ - Decimal::from_f32(1.0).unwrap(), - Decimal::from_f32(2.0).unwrap(), - Decimal::from_f32(3.0).unwrap(), - ]); - - // Add - let output = array_a.clone() + Decimal::from_f32(5.0).unwrap(); - let expectation = Array1::from(vec![ - Decimal::from_f32(6.0).unwrap(), - Decimal::from_f32(7.0).unwrap(), - Decimal::from_f32(8.0).unwrap(), - ]); - assert_eq!(output, expectation); - - // Sub - let output = array_a.clone() - Decimal::from_f32(5.0).unwrap(); - let expectation = Array1::from(vec![ - Decimal::from_f32(-4.0).unwrap(), - Decimal::from_f32(-3.0).unwrap(), - Decimal::from_f32(-2.0).unwrap(), - ]); - assert_eq!(output, expectation); - - // Mul - let output = array_a.clone() * Decimal::from_f32(5.0).unwrap(); - let expectation = Array1::from(vec![ - Decimal::from_f32(5.0).unwrap(), - Decimal::from_f32(10.0).unwrap(), - Decimal::from_f32(15.0).unwrap(), - ]); - assert_eq!(output, expectation); - - // Div - let output = array_a / Decimal::from_f32(5.0).unwrap(); - let expectation = Array1::from(vec![ - Decimal::from_f32(0.2).unwrap(), - Decimal::from_f32(0.4).unwrap(), - Decimal::from_f32(0.6).unwrap(), - ]); - assert_eq!(output, expectation); + #[test] + fn it_can_do_scalar_ops_in_ndarray() { + use ndarray::Array1; + use num_traits::FromPrimitive; + + let array_a = Array1::from(vec![ + Decimal::from_f32(1.0).unwrap(), + Decimal::from_f32(2.0).unwrap(), + Decimal::from_f32(3.0).unwrap(), + ]); + + // Add + let output = array_a.clone() + Decimal::from_f32(5.0).unwrap(); + let expectation = Array1::from(vec![ + Decimal::from_f32(6.0).unwrap(), + Decimal::from_f32(7.0).unwrap(), + Decimal::from_f32(8.0).unwrap(), + ]); + assert_eq!(output, expectation); + + // Sub + let output = array_a.clone() - Decimal::from_f32(5.0).unwrap(); + let expectation = Array1::from(vec![ + Decimal::from_f32(-4.0).unwrap(), + Decimal::from_f32(-3.0).unwrap(), + Decimal::from_f32(-2.0).unwrap(), + ]); + assert_eq!(output, expectation); + + // Mul + let output = array_a.clone() * Decimal::from_f32(5.0).unwrap(); + let expectation = Array1::from(vec![ + Decimal::from_f32(5.0).unwrap(), + Decimal::from_f32(10.0).unwrap(), + Decimal::from_f32(15.0).unwrap(), + ]); + assert_eq!(output, expectation); + + // Div + let output = array_a / Decimal::from_f32(5.0).unwrap(); + let expectation = Array1::from(vec![ + Decimal::from_f32(0.2).unwrap(), + Decimal::from_f32(0.4).unwrap(), + Decimal::from_f32(0.6).unwrap(), + ]); + assert_eq!(output, expectation); + } } -#[test] #[cfg(feature = "rkyv")] -fn it_can_serialize_deserialize_rkyv() { - use rkyv::Deserialize; - let tests = [ - "12.3456789", - "5233.9008808150288439427720175", - "-5233.9008808150288439427720175", - ]; - for test in &tests { - let a = Decimal::from_str(test).unwrap(); - let bytes = rkyv::to_bytes::<_, 256>(&a).unwrap(); +mod rkyv_tests { + #[test] + fn it_can_serialize_deserialize_rkyv() { + use rkyv::Deserialize; + let tests = [ + "12.3456789", + "5233.9008808150288439427720175", + "-5233.9008808150288439427720175", + ]; + for test in &tests { + let a = Decimal::from_str(test).unwrap(); + let bytes = rkyv::to_bytes::<_, 256>(&a).unwrap(); + + #[cfg(feature = "rkyv-safe")] + { + let archived = rkyv::check_archived_root::(&bytes[..]).unwrap(); + assert_eq!(archived, &a); + } - #[cfg(feature = "rkyv-safe")] - { - let archived = rkyv::check_archived_root::(&bytes[..]).unwrap(); + let archived = unsafe { rkyv::archived_root::(&bytes[..]) }; assert_eq!(archived, &a); - } - let archived = unsafe { rkyv::archived_root::(&bytes[..]) }; - assert_eq!(archived, &a); - - let deserialized: Decimal = archived.deserialize(&mut rkyv::Infallible).unwrap(); - assert_eq!(deserialized, a); + let deserialized: Decimal = archived.deserialize(&mut rkyv::Infallible).unwrap(); + assert_eq!(deserialized, a); + } } } @@ -4706,7 +4717,7 @@ mod generated { } #[cfg(feature = "proptest")] -mod proptest { +mod proptest_tests { use super::Decimal; use proptest::prelude::*; @@ -4720,7 +4731,7 @@ mod proptest { #[cfg(feature = "rocket-traits")] #[allow(clippy::disallowed_names)] -mod rocket { +mod rocket_tests { use crate::Decimal; use rocket::form::{Form, FromForm}; use std::str::FromStr; @@ -4743,7 +4754,7 @@ mod rocket { } #[cfg(feature = "rust-fuzz")] -mod rust_fuzz { +mod rust_fuzz_tests { use arbitrary::{Arbitrary, Unstructured}; use super::*; From b2761d2512e133396ce0c3a3b75f19623fdfe72a Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:14:01 -0700 Subject: [PATCH 05/13] Fixes rkyv test --- tests/decimal_tests.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/decimal_tests.rs b/tests/decimal_tests.rs index cb77bb5..e716fd1 100644 --- a/tests/decimal_tests.rs +++ b/tests/decimal_tests.rs @@ -212,6 +212,9 @@ mod ndarray_tests { #[cfg(feature = "rkyv")] mod rkyv_tests { + use rust_decimal::Decimal; + use std::str::FromStr; + #[test] fn it_can_serialize_deserialize_rkyv() { use rkyv::Deserialize; From 158ef1e91ef986855f8597153b2b060956de591e Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:18:19 -0700 Subject: [PATCH 06/13] Split dependency tests into separate job --- .github/workflows/main.yml | 45 ++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index feb0bb9..f0e0b58 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -101,6 +101,7 @@ jobs: runs-on: ubuntu-latest needs: - standard_tests + - dependency_tests - database_tests - fuzz_tests steps: @@ -162,18 +163,54 @@ jobs: env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - - name: Run miscellaneous tests - run: cargo make test-misc + - name: Run macro tests + run: cargo make test-macros env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} + dependency_tests: + name: "Dependency Tests" + runs-on: ubuntu-latest + strategy: + matrix: + name: + - stable + - beta + # - stable / wasm32 + # - beta / wasm32 + include: + - name: stable + rust: stable + - name: beta + rust: beta + # - name: stable / wasm32 + # rust: stable + # target: wasm32-unknown-unknown + #- name: beta / wasm32 + # rust: beta + # target: wasm32-unknown-unknown + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ matrix.rust }} + targets: ${{ matrix.target }} + + - uses: davidB/rust-cargo-make@v1 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get -y install libpq-dev + - name: Run serde tests run: cargo make test-serde env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} - - name: Run macro tests - run: cargo make test-macros + - name: Run miscellaneous dependency tests + run: cargo make test-misc env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} From aa9ab00162041d0ffa7c5e90785c18b5a8499ea5 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:25:23 -0700 Subject: [PATCH 07/13] Remove docs dependency --- .github/workflows/main.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f0e0b58..df60441 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -82,7 +82,6 @@ jobs: docs: name: "Check documentation" - needs: [ test ] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 From 95757ab8f21bf38881b5904cc77ee8b7db601527 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:33:54 -0700 Subject: [PATCH 08/13] rename pass state --- .github/workflows/main.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index df60441..3e14041 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,12 +6,13 @@ on: - master - "[1-9].x" -name: Continuous integration +name: CI jobs: ci: runs-on: ubuntu-latest - name: "CI pass" + # Keep this the same as this is what Github looks for to determine if the build passed + name: "✅ Pass" needs: - check_style - minimum_rust_version From 8e87f35156470dba4daae887a9cb142b3306b3fa Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:41:00 -0700 Subject: [PATCH 09/13] Split out database tests --- .github/workflows/main.yml | 60 +++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3e14041..13b2329 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: ci: runs-on: ubuntu-latest # Keep this the same as this is what Github looks for to determine if the build passed - name: "✅ Pass" + name: "Pass" needs: - check_style - minimum_rust_version @@ -217,6 +217,15 @@ jobs: database_tests: name: "Database Tests" runs-on: ubuntu-latest + needs: + - postgres_tests + - mysql_tests + steps: + - run: exit 0 + + postgres_tests: + name: "Database Tests - PostgreSQL" + runs-on: ubuntu-latest strategy: matrix: name: @@ -243,6 +252,48 @@ jobs: ports: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ matrix.rust }} + targets: ${{ matrix.target }} + + - uses: davidB/rust-cargo-make@v1 + + - name: Install dependencies + run: | + sudo apt-get update + sudo apt-get -y install libpq-dev + + - name: Run database tests + run: cargo make test-db-postgres-all + env: + CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} + + mysql_tests: + name: "Database Tests - MySQL" + runs-on: ubuntu-latest + strategy: + matrix: + name: + - stable + - beta + # - stable / wasm32 + # - beta / wasm32 + include: + - name: stable + rust: stable + - name: beta + rust: beta + # - name: stable / wasm32 + # rust: stable + # target: wasm32-unknown-unknown + #- name: beta / wasm32 + # rust: beta + # target: wasm32-unknown-unknown + services: mysql: image: mysql:8 env: @@ -260,13 +311,8 @@ jobs: - uses: davidB/rust-cargo-make@v1 - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get -y install libpq-dev - - name: Run database tests - run: cargo make test-db + run: cargo make db-mysql-all env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} From 2e812fb567f667078ee80bc871fb0b3c3f2190e3 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:44:14 -0700 Subject: [PATCH 10/13] Share matrix configuration --- .github/workflows/main.yml | 71 ++++---------------------------------- 1 file changed, 7 insertions(+), 64 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 13b2329..214722a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,6 +8,9 @@ on: name: CI +env: + MATRIX_CONFIG: '[{"name": "stable", "rust": "stable"}, {"name": "beta", "rust": "beta"}]' + jobs: ci: runs-on: ubuntu-latest @@ -112,22 +115,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - name: - - stable - - beta - # - stable / wasm32 - # - beta / wasm32 - include: - - name: stable - rust: stable - - name: beta - rust: beta - # - name: stable / wasm32 - # rust: stable - # target: wasm32-unknown-unknown - #- name: beta / wasm32 - # rust: beta - # target: wasm32-unknown-unknown + include: ${{fromJson(env.MATRIX_CONFIG)}} steps: - uses: actions/checkout@v4 @@ -173,22 +161,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - name: - - stable - - beta - # - stable / wasm32 - # - beta / wasm32 - include: - - name: stable - rust: stable - - name: beta - rust: beta - # - name: stable / wasm32 - # rust: stable - # target: wasm32-unknown-unknown - #- name: beta / wasm32 - # rust: beta - # target: wasm32-unknown-unknown + include: ${{fromJson(env.MATRIX_CONFIG)}} steps: - uses: actions/checkout@v4 @@ -228,22 +201,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - name: - - stable - - beta - # - stable / wasm32 - # - beta / wasm32 - include: - - name: stable - rust: stable - - name: beta - rust: beta - # - name: stable / wasm32 - # rust: stable - # target: wasm32-unknown-unknown - #- name: beta / wasm32 - # rust: beta - # target: wasm32-unknown-unknown + include: ${{fromJson(env.MATRIX_CONFIG)}} services: postgres: image: postgres:11.6 @@ -277,22 +235,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - name: - - stable - - beta - # - stable / wasm32 - # - beta / wasm32 - include: - - name: stable - rust: stable - - name: beta - rust: beta - # - name: stable / wasm32 - # rust: stable - # target: wasm32-unknown-unknown - #- name: beta / wasm32 - # rust: beta - # target: wasm32-unknown-unknown + include: ${{fromJson(env.MATRIX_CONFIG)}} services: mysql: image: mysql:8 From 302b3fe1d87f990891142d46264e51641de2d129 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:45:00 -0700 Subject: [PATCH 11/13] Fixes mysql tests --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 214722a..91f67e4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -255,7 +255,7 @@ jobs: - uses: davidB/rust-cargo-make@v1 - name: Run database tests - run: cargo make db-mysql-all + run: cargo make test-db-mysql-all env: CI_DECIMAL_TEST_TARGET: ${{ matrix.target }} From 3fcd23456a8297726fbe5b03df9ad103efdd2a58 Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 09:55:49 -0700 Subject: [PATCH 12/13] Revert back to non-shared matrix --- .github/workflows/main.yml | 47 ++++++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 91f67e4..879d329 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -8,9 +8,6 @@ on: name: CI -env: - MATRIX_CONFIG: '[{"name": "stable", "rust": "stable"}, {"name": "beta", "rust": "beta"}]' - jobs: ci: runs-on: ubuntu-latest @@ -114,8 +111,17 @@ jobs: name: "Standard Tests" runs-on: ubuntu-latest strategy: + # There doesn't seem to be a way to share the matrix between jobs matrix: - include: ${{fromJson(env.MATRIX_CONFIG)}} + name: + - stable + - beta + include: + # This allows us to define targets in the future (e.g. wasm32-unknown-unknown) + - name: stable + rust: stable + - name: beta + rust: beta steps: - uses: actions/checkout@v4 @@ -160,8 +166,17 @@ jobs: name: "Dependency Tests" runs-on: ubuntu-latest strategy: + # There doesn't seem to be a way to share the matrix between jobs matrix: - include: ${{fromJson(env.MATRIX_CONFIG)}} + name: + - stable + - beta + include: + # This allows us to define targets in the future (e.g. wasm32-unknown-unknown) + - name: stable + rust: stable + - name: beta + rust: beta steps: - uses: actions/checkout@v4 @@ -200,8 +215,17 @@ jobs: name: "Database Tests - PostgreSQL" runs-on: ubuntu-latest strategy: + # There doesn't seem to be a way to share the matrix between jobs matrix: - include: ${{fromJson(env.MATRIX_CONFIG)}} + name: + - stable + - beta + include: + # This allows us to define targets in the future (e.g. wasm32-unknown-unknown) + - name: stable + rust: stable + - name: beta + rust: beta services: postgres: image: postgres:11.6 @@ -234,8 +258,17 @@ jobs: name: "Database Tests - MySQL" runs-on: ubuntu-latest strategy: + # There doesn't seem to be a way to share the matrix between jobs matrix: - include: ${{fromJson(env.MATRIX_CONFIG)}} + name: + - stable + - beta + include: + # This allows us to define targets in the future (e.g. wasm32-unknown-unknown) + - name: stable + rust: stable + - name: beta + rust: beta services: mysql: image: mysql:8 From d82e8ed92e4146410f9eeda77af4618b728ed4fa Mon Sep 17 00:00:00 2001 From: Paul Mason Date: Sat, 13 Apr 2024 10:05:55 -0700 Subject: [PATCH 13/13] Registry caching --- .github/workflows/main.yml | 52 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 879d329..71b6087 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -33,7 +33,7 @@ jobs: components: clippy, rustfmt - name: Cache cargo registry - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ~/.cargo/registry @@ -62,7 +62,7 @@ jobs: toolchain: 1.60.0 - name: Cache cargo registry - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ~/.cargo/registry @@ -91,6 +91,14 @@ jobs: with: toolchain: nightly + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: docs-cargo-${{ hashFiles('**/Cargo.toml') }} + - name: Check documentation env: RUSTDOCFLAGS: --cfg docsrs @@ -130,6 +138,14 @@ jobs: toolchain: ${{ matrix.rust }} targets: ${{ matrix.target }} + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: tests-std-${{ matrix.rust }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.toml') }} + - uses: davidB/rust-cargo-make@v1 - name: Install dependencies @@ -185,6 +201,14 @@ jobs: toolchain: ${{ matrix.rust }} targets: ${{ matrix.target }} + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: tests-dep-${{ matrix.rust }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.toml') }} + - uses: davidB/rust-cargo-make@v1 - name: Install dependencies @@ -242,6 +266,14 @@ jobs: toolchain: ${{ matrix.rust }} targets: ${{ matrix.target }} + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: tests-pgsql-${{ matrix.rust }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.toml') }} + - uses: davidB/rust-cargo-make@v1 - name: Install dependencies @@ -285,6 +317,14 @@ jobs: toolchain: ${{ matrix.rust }} targets: ${{ matrix.target }} + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: tests-mysql-${{ matrix.rust }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.toml') }} + - uses: davidB/rust-cargo-make@v1 - name: Run database tests @@ -304,6 +344,14 @@ jobs: with: toolchain: nightly + - name: Cache cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + key: tests-fuzz-${{ matrix.rust }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.toml') }} + - name: Install Cargo Fuzz run: cargo install cargo-fuzz