name: Tests

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

env:
  CARGO_TERM_COLOR: always

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
    - name: Install Rust
      run: rustup update stable

    - name: Install target
      run: rustup target add wasm32-unknown-unknown

    - name: Install pocket-ic
      run: src/tests/download-pocket-ic.sh

    - name: Install wasi2ic
      run: cargo install wasi2ic

    - name: Install cargo-llvm-cov
      uses: taiki-e/install-action@cargo-llvm-cov

    - name: Build test projects
      run: ./build_tests.sh
      
    - name: Run tests
      run: cargo test --verbose

    - name: Generate code coverage
      run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
      with:
        token: ${{ secrets.CODECOV_TOKEN }} 
        files: lcov.info
        fail_ci_if_error: true

