on: [push, pull_request]

name: Continuous integration

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - stable
          - 1.57
        target:
          - x86_64-unknown-linux-gnu
          - i686-unknown-linux-gnu
          - aarch64-unknown-linux-gnu
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}
          override: true
      - uses: actions-rs/cargo@v1
        with:
          command: check
          args: --all-features

  test:
    name: Test Suite
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - stable
        target:
          - x86_64-unknown-linux-gnu
          - i686-unknown-linux-gnu
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          target: ${{ matrix.target }}
          override: true
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all-features
  # docsrs:
  #   name: Generate docs.rs
  #   runs-on: ubuntu-latest
  #   strategy:
  #     matrix:
  #       rust:
  #         - nightly
  #   steps:
  #     - uses: actions/checkout@v2
  #     - uses: actions-rs/toolchain@v1
  #       with:
  #         profile: minimal
  #         toolchain: ${{ matrix.rust }}
  #         override: true
  #     - uses: actions-rs/cargo@v1
  #       with:
  #         command: doc
  #         args: --all-features
  #       env:
  #         RUSTFLAGS: --cfg docsrs
  #         RUSTDOCFLAGS: --cfg docsrs -Dwarnings
  msrv:
    name: Minimum supported rust version
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - 1.56
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          override: true
      - uses: actions-rs/cargo@v1
        with:
          command: test
  miri-test:
      runs-on: ubuntu-latest
      strategy:
        matrix:
          rust:
            - nightly
      steps:
        - uses: actions/checkout@v2
        - uses: actions-rs/toolchain@v1
          with:
            profile: minimal
            toolchain: ${{ matrix.rust }}
            override: true
            components: miri
        - name: miri test
          run: cargo miri test
