on:
  push:
    branches: [master]
  pull_request:
    branches: ["*"]

name: build

jobs:
  test_macos:
    name: Run Tests on macOS
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v1
      - name: Cache cargo registry
        uses: actions/cache@v3
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache cargo index
        uses: actions/cache@v3
        with:
          path: ~/.cargo/git
          key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache cargo build
        uses: actions/cache@v3
        with:
          path: target
          key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
      - name: Setup toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          components: clippy
          override: true
      - name: check
        run: cargo check
      - name: clippy
        run: cargo clippy
      - name: test
        run: cargo test
      - name: build
        run: cargo build --release

  test_ubuntu:
    name: Run Tests on Ubuntu (x86_64)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - name: Cache cargo registry
        uses: actions/cache@v3
        with:
          path: ~/.cargo/registry
          key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache cargo index
        uses: actions/cache@v3
        with:
          path: ~/.cargo/git
          key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
      - name: Cache cargo build
        uses: actions/cache@v3
        with:
          path: target
          key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
      - name: check
        run: cargo check
      - name: clippy
        run: cargo clippy
      - name: test
        run: cargo test
      - name: build
        run: cargo build --release
