rust_decimal 1.33.1

Decimal number implementation written in pure Rust suitable for financial and fixed-precision calculations.
Documentation
on:
  pull_request:
    types: [opened, synchronize, reopened]
  push:
    branches:
      - master
      - "[1-9].x"

name: Continuous integration

jobs:
  ci:
    name: Build and test
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - stable
          - beta

    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@v3

      - name: Cache cargo registry
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
          key: ${{ runner.os }}-${{ matrix.backend }}-cargo-${{ hashFiles('**/Cargo.toml') }}

      - 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

      - name: Run default tests
        run: cargo make test-default

      - name: Run legacy operation tests
        run: cargo make test-legacy-ops

      - name: Run mathematical function tests
        run: cargo make test-maths

      - name: Run miscellaneous tests
        run: cargo make test-misc

      - name: Run database tests
        run: cargo make test-db

      - name: Run serde tests
        run: cargo make test-serde

      - 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

  fuzz:
    name: Fuzz
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: nightly

      - name: Install Cargo Fuzz
        run: cargo install cargo-fuzz

      - uses: davidB/rust-cargo-make@v1

      - 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