name: CI

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

env:
  CARGO_TERM_COLOR: always

jobs:
  self-care:
    name: Flake self-check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Check Nix flake inputs
        uses: DeterminateSystems/flake-checker-action@v7
        with:
          fail-mode: true

  pre-commit-checks:
    name: "Pre-commit checks: cargo fmt, typos"
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v11
      - name: Nix Cache
        uses: DeterminateSystems/magic-nix-cache-action@v6
      - name: Rust Cache
        uses: Swatinem/rust-cache@v2
      - name: Pre-commit checks
        run: nix develop -i -L .#stable --command pre-commit run --all-files

  clippy:
    name: "Stable build, clippy and test"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        build-args:
          [
            -p cdk,
            -p cdk --no-default-features,
            -p cdk --no-default-features --features wallet,
            -p cdk --no-default-features --features mint,
            -p cdk-redb,
            -p cdk-sqlite,
            -p cdk-axum,
            -p cdk-cln,
            -p cdk-lnd,
            -p cdk-phoenixd,
            -p cdk-strike,
            -p cdk-lnbits,
            -p cdk-integration-tests,
            -p cdk-fake-wallet,
            --bin cdk-cli,
            --bin cdk-mintd
          ]
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v11
      - name: Nix Cache
        uses: DeterminateSystems/magic-nix-cache-action@v6
      - name: Rust Cache
        uses: Swatinem/rust-cache@v2
      - name: Build
        run: nix develop -i -L .#stable --command cargo build ${{ matrix.build-args }}
      - name: Clippy
        run: nix develop -i -L .#stable --command cargo clippy ${{ matrix.build-args }} -- -D warnings
      - name: Test
        run: nix develop -i -L .#stable --command cargo test ${{ matrix.build-args }}

  msrv-build:
    name: "MSRV build"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        build-args:
          [
            -p cdk,
            -p cdk --no-default-features,
            -p cdk --no-default-features --features wallet,
            -p cdk --no-default-features --features mint,
            -p cdk-axum,
            -p cdk-strike,
            -p cdk-lnbits,
            -p cdk-phoenixd
            -p cdk-fake-wallet
            -p cdk-cln
          ]
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v11
      - name: Nix Cache
        uses: DeterminateSystems/magic-nix-cache-action@v6
      - name: Rust Cache
        uses: Swatinem/rust-cache@v2
      - name: Build
        run: nix develop -i -L .#msrv --command cargo build ${{ matrix.build-args }}

  
  db-msrv-build:
    name: "DB MSRV build"
    runs-on: ubuntu-latest
    strategy:
      matrix:
        build-args:
          [
            -p cdk-sqlite
            -p cdk-redb
          ]
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v11
      - name: Nix Cache
        uses: DeterminateSystems/magic-nix-cache-action@v6
      - name: Rust Cache
        uses: Swatinem/rust-cache@v2
      - name: Build
        run: nix develop -i -L .#db_shell --command cargo build ${{ matrix.build-args }}

  check-wasm:
    name: Check WASM
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - stable
        target:
          - wasm32-unknown-unknown
        build-args:
          [
            -p cdk,
            -p cdk --no-default-features,
            -p cdk --no-default-features --features wallet,
            -p cdk-js
          ]
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v11
      - name: Nix Cache
        uses: DeterminateSystems/magic-nix-cache-action@v6
      - name: Rust Cache
        uses: Swatinem/rust-cache@v2
      - name: Build cdk and binding
        run: nix develop -i -L ".#${{ matrix.rust }}" --command cargo build ${{ matrix.build-args }} --target ${{ matrix.target }}

        
  check-wasm-msrv:
    name: Check WASM
    runs-on: ubuntu-latest
    strategy:
      matrix:
        rust:
          - msrv
        target:
          - wasm32-unknown-unknown
        build-args:
          [
            -p cdk,
            -p cdk --no-default-features,
            -p cdk --no-default-features --features wallet,
          ]
    steps:
      - name: checkout
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@v11
      - name: Nix Cache
        uses: DeterminateSystems/magic-nix-cache-action@v6
      - name: Rust Cache
        uses: Swatinem/rust-cache@v2
      - name: Build cdk wasm
        run: nix develop -i -L ".#${{ matrix.rust }}" --command cargo build ${{ matrix.build-args }} --target ${{ matrix.target }}