name: 'CI'
on:
  pull_request:
  push:
    branches:
      - master

env:
  RUST_BACKTRACE: 1
  CARGO_TERM_COLOR: always

jobs:
  ci-pass:
    name: CI is green
    runs-on: ubuntu-latest
    needs:
      - test
      - build-extra
      - lint
    steps:
      - run: exit 0

  test:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt
    - name: Run tests
      run: |
        cargo check --all-targets
        cargo check --all-targets --no-default-features
        cargo test --features js_tests
        cargo test --no-default-features --features js_tests
        cargo test --benches

  build-extra:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: wasm32-unknown-unknown
      - name: Build WASM
        run: |
          cargo build --target=wasm32-unknown-unknown --no-default-features --features wasm-bindgen
      - name: Build release
        run: |
          cargo build --release --no-default-features
      - name: Build examples
        run: |
          cargo build --example replication

  lint:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v3
    - uses: dtolnay/rust-toolchain@stable
      with:
        components: rustfmt, clippy
    - uses: actions-rs/clippy-check@v1
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
    - name: Format check
      run: |
        cargo fmt -- --check
