name: CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

env:
  CARGO_TERM_COLOR: always

jobs:
  fmt:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: cargo fmt --all -- --config format_code_in_doc_comments=true --check

  build:
    name: Build
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - version: stable
        build-args:
          [
            -p cdk,
            -p cdk --no-default-features,
            -p cdk --no-default-features --features wallet,
            -p cdk --no-default-features --features mint --features redb,
            -p cdk --no-default-features --features wallet --features redb,
            -p cdk --no-default-features --features all-nuts,
          ]
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    - name: Cache
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
    - name: Set default toolchain
      run: rustup default ${{ matrix.rust.version }}
    - name: Set profile
      run: rustup set profile minimal && rustup component add clippy
    - name: Build
      run: cargo build ${{ matrix.build-args }}
    - name: Clippy
      run: cargo clippy ${{ matrix.build-args }} -- -D warnings

  build-wasm:
    name: Build WASM
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - version: stable
        build-args:
          [
            -p cdk,
          ]
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    - name: Cache
      uses: actions/cache@v3
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-cargo-wasm32-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }}
    - name: Set default toolchain
      run: rustup default ${{ matrix.rust.version }}
    - name: Add WASM
      run: rustup target add wasm32-unknown-unknown
    - name: Set profile
      run: rustup set profile minimal && rustup component add clippy
    - name: Build
      run: cargo build ${{ matrix.build-args }} --target wasm32-unknown-unknown
    - name: Clippy
      run: cargo clippy ${{ matrix.build-args }} --target wasm32-unknown-unknown -- -D warnings