name: Rust layer CI
on:
  push:
    paths:
      - "bdk-ffi/**"
  pull_request:
    paths:
      - "bdk-ffi/**"

jobs:
  build-test:
    name: Build and test
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        rust:
          - version: 1.63.0 # STABLE
            clippy: true
          - version: 1.61.0 # MSRV
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Generate cache key
        run: echo "${{ matrix.rust.version }} ${{ matrix.features }}" | tee .cache_key

      - name: Cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('.cache_key') }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}

      - name: Set default toolchain
        run: rustup default ${{ matrix.rust.version }}

      - name: Set profile
        run: rustup set profile minimal

      - name: Add clippy
        if: ${{ matrix.rust.clippy }}
        run: rustup component add clippy

      - name: Update toolchain
        run: rustup update

      - name: Build
        run: cargo build

      - name: Clippy
        if: ${{ matrix.rust.clippy }}
        run: cargo clippy --all-targets --features "uniffi/bindgen-tests" -- -D warnings

      - name: Test
        run: CLASSPATH=./tests/jna/jna-5.8.0.jar cargo test --features uniffi/bindgen-tests

  fmt:
    name: Rust fmt
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Set default toolchain
        run: rustup default nightly

      - name: Set profile
        run: rustup set profile minimal

      - name: Add rustfmt
        run: rustup component add rustfmt

      - name: Update toolchain
        run: rustup update

      - name: Check fmt
        run: cargo fmt --all -- --config format_code_in_doc_comments=true --check
