on:
  push:
    branches:
      - master
  pull_request: {}

name: Continuous integration

jobs:
  ci:
    strategy:
      matrix:
        rust:
          - nightly
          - nightly-2019-05-21  # MSRV
        os:
          - ubuntu-latest
          - windows-latest
          - macOS-latest

        cargo_flags:
          - "--all-features"
          - "--no-default-features"

    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v1
        name: Checkout

      - uses: actions-rs/toolchain@v1
        name: Verify Rust Toolchain
        with:
          profile: minimal
          toolchain: ${{ matrix.rust }}
          override: true
          components: rustfmt, clippy

      - name: Remove Rust Toolchain file
        run: rm rust-toolchain

      - uses: actions-rs/cargo@v1
        name: Clippy Lint
        with:
          command: clippy
          args: ${{ matrix.cargo_flags }} --all-targets -- -D warnings

      - uses: actions-rs/cargo@v1
        name: Build
        with:
          command: build
          args: ${{ matrix.cargo_flags }} --verbose

      - uses: actions-rs/cargo@v1
        name: Unit Tests
        with:
          command: test
          args: ${{ matrix.cargo_flags }}

      - uses: actions-rs/cargo@v1
        name: Format Check
        with:
          command: fmt
          args: --all -- --check

      - uses: actions-rs/cargo@v1
        name: Build Documentation
        with:
          command: doc
          args: ${{ matrix.cargo_flags }} --no-deps