on: [push, pull_request]

name: Test and Build

jobs:
  test:
    strategy:
      matrix:
        os: [ubuntu-latest]
        rust-toolchain: [stable]
      fail-fast: false

    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Cache build artifacts
        id: cache-cargo
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: test-${{ runner.os }}-cargo-${{ matrix.rust-toolchain }}

      - name: Install Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.rust-toolchain }}
          components: rustfmt
          override: true

      - name: Verify versions
        run: rustc --version && rustup --version && cargo --version

      - name: Build code
        run: cargo build

      - name: Test code
        run: cargo test

      - name: Check code style
        run: cargo fmt -- --check
