name: CI

on:
  push:
  pull_request:

env:
  CARGO_TERM_COLOR: always
  CARGO_REGISTRIES_MY_REGISTRY_INDEX: https://github.com/rust-lang/crates.io-index

jobs:
  # 1
  check:
    name: Rust project check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install latest nightly
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          components: rustfmt, clippy

      - name: Install Protoc
        uses: arduino/setup-protoc@v2

      # `cargo check` command here will use installed `nightly`
      # as it is set as an "override" for current directory

      - name: Run cargo check
        uses: actions-rs/cargo@v1
        with:
          command: check


      - name: Run cargo build
        uses: actions-rs/cargo@v1
        with:
          command: build


      - name: Run cargo test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all
  # 2
  fmt:
    name: Rust fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install latest nightly
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          components: rustfmt, clippy

      # `cargo check` command here will use installed `nightly`
      # as it is set as an "override" for current directory

      - name: Run cargo fmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: -- --check
  # 3
  e2e:
    name: Rust e2e sqllogictest
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install latest nightly
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          components: rustfmt, clippy

      - name: Install Protoc
        uses: arduino/setup-protoc@v2

      # `cargo check` command here will use installed `nightly`
      # as it is set as an "override" for current directory

      - name: Run cargo run sqllogictest-test
        uses: actions-rs/cargo@v1
        with:
          command: run
          args: --bin sqllogictest-test --manifest-path ./tests/sqllogictest/Cargo.toml
  # 4
  wasm-tests:
    name: Wasm cargo tests
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Install stable with wasm target
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: wasm32-unknown-unknown
          override: true

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install wasm-pack
        uses: jetli/wasm-pack-action@v0.4.0
        with:
          version: latest

      - name: Run wasm-bindgen tests (wasm32 target)
        run: wasm-pack test --node -- --package kite_sql --lib
  # 5
  wasm-examples:
    name: Wasm examples (nodejs)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Install stable with wasm target
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: wasm32-unknown-unknown
          override: true

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      - name: Install wasm-pack
        uses: jetli/wasm-pack-action@v0.4.0
        with:
          version: latest

      - name: Build wasm package
        run: wasm-pack build --release --target nodejs

      - name: Run wasm example scripts
        run: |
          node examples/wasm_hello_world.test.mjs
          node examples/wasm_index_usage.test.mjs
  # 6
  native-examples:
    name: Native examples
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true

      - name: Run hello_world example
        run: cargo run --example hello_world

      - name: Run transaction example
        run: cargo run --example transaction
