name: "marine"

on:
  pull_request:
  push:
    branches:
      - "master"

concurrency:
  group: "${{ github.workflow }}-${{ github.ref }}"
  cancel-in-progress: true

env:
  RUST_BACKTRACE: 1
  CARGO_TERM_COLOR: always

jobs:
  marine:
    name: "Run tests"
    runs-on: builder

    steps:
      - uses: actions/checkout@v3

      - name: Setup rust toolchain
        uses: actions-rust-lang/setup-rust-toolchain@v1

      - name: Setup node
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Install wasm-pack
        run: cargo install wasm-pack

      - name: Install marine cli
        run: cargo install --path tools/cli

      - name: Run cargo fmt
        run: cargo fmt --all -- --check

      - name: Build marine-js wasm
        run: ./build.sh
        working-directory: marine-js

      - name: Install marine-js npm dependencies
        uses: bahmutov/npm-install@v1
        with:
          working-directory: marine-js/npm-package

      - name: Build marine-js npm package
        run: npm run build
        working-directory: marine-js/npm-package

      - name: Build examples
        run: ./build.sh
        working-directory: examples

      - name: Build marine-runtime wasm-tests
        run: ./build.sh
        working-directory: marine/tests/wasm_tests

      - name: Build marine-core wasm-tests
        run: ./build.sh
        working-directory: core/tests/wasm_tests

      - name: Run cargo check
        run: |
          cargo check -v --all-features \
            -p marine-core \
            -p marine \
            -p fluence-app-service \
            -p marine \
            -p mrepl

      - name: Run cargo test
        run: |
          cargo test --release -v --all-features \
            -p marine-core \
            -p marine \
            -p fluence-app-service \
            -p marine \
            -p mrepl \

      - name: Run cargo clippy
        run: cargo clippy -v

      - name: Run marine-js Node tests
        run: npm run test
        working-directory: marine-js/npm-package
