name: Test Wasm Version
on:
  push:
    branches: ["main"]
    paths-ignore:
      - "**.md"
  pull_request:
    branches: ["main"]
    types: [opened, synchronize]
    paths-ignore:
      - "**.md"

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always
  REVIVE_WASM_INSTALL_DIR: ${{ github.workspace }}/target/wasm32-unknown-emscripten/release

jobs:
  build:
    runs-on: ubuntu-24.04
    defaults:
      run:
        shell: bash
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          target: wasm32-unknown-emscripten
          # without this it will override our rust flags
          rustflags: ""

      - name: Download Host LLVM
        uses: ./.github/actions/get-llvm
        with:
          target: x86_64-unknown-linux-gnu

      - name: Download Wasm LLVM
        uses: ./.github/actions/get-llvm
        with:
          target: wasm32-unknown-emscripten

      - name: Install emsdk
        uses: ./.github/actions/get-emsdk

      - name: Set LLVM Environment Variables
        run: |
          echo "LLVM_SYS_181_PREFIX=$(pwd)/llvm-x86_64-unknown-linux-gnu" >> $GITHUB_ENV
          echo "REVIVE_LLVM_TARGET_PREFIX=$(pwd)/llvm-wasm32-unknown-emscripten" >> $GITHUB_ENV

      - name: Build Revive
        run: |
          source emsdk/emsdk_env.sh
          make install-wasm

      - uses: actions/upload-artifact@v4
        with:
          name: revive-wasm
          path: |
            ${{ env.REVIVE_WASM_INSTALL_DIR }}/resolc.js
            ${{ env.REVIVE_WASM_INSTALL_DIR }}/resolc.wasm
            ${{ env.REVIVE_WASM_INSTALL_DIR }}/resolc_web.js
          retention-days: 1

  test:
    needs: build
    strategy:
      matrix:
        os: ["ubuntu-24.04", "macos-15", "windows-2022"]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v4

      - name: Create Target Directory
        run: mkdir -p ${{ env.REVIVE_WASM_INSTALL_DIR }}

      - name: Download Artifact
        uses: actions/download-artifact@v4
        with:
          name: revive-wasm
          path: ${{ env.REVIVE_WASM_INSTALL_DIR }}

      - name: Set Up Node.js
        uses: actions/setup-node@v3
        with:
          node-version: "20"

      - name: Install Node Packages
        run: npm install

      - name: Test emscripten
        run: |
          echo "Running tests for ${{ matrix.os }}"
          npm run test:wasm

      - name: Test @parity/resolc
        run: |
          echo "Running tests for ${{ matrix.os }}"
          npm run -w js/resolc test

      - name: Run Playwright tests
        run: |
          cd js/emscripten
          npx playwright install --with-deps
          npx playwright test
