name: CI

on: [push]

jobs:
  auto-tests:
    name: Pytest Tests
    runs-on: ubuntu-24.04
    timeout-minutes: 10

    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Install system dependencies (Rust + Python)
        run: |
          sudo apt-get update
          sudo apt-get install -y \
            build-essential \
            pkg-config \
            libssl-dev \
            clang \
            lld \
            protobuf-compiler \
            make \
            wget

      - name: Install binaryen 120
        run: |
          wget https://github.com/WebAssembly/binaryen/releases/download/version_120/binaryen-version_120-x86_64-linux.tar.gz
          tar xvf binaryen-version_120-x86_64-linux.tar.gz
          echo "$(pwd)/binaryen-version_120/bin" >> $GITHUB_PATH

      - name: Install the latest version of uv
        uses: astral-sh/setup-uv@v5

      - name: Install Rust
        run: |
          curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
          echo "$HOME/.cargo/bin" >> $GITHUB_PATH
          rustup install stable
          rustup component add rust-src --toolchain stable
          rustup target add wasm32-wasip1

      - name: Set up Python environment and dependencies
        run: |
          uv venv .venv --python=3.12
          uv pip install -U rust-contracts-builder
          echo "$(pwd)/.venv/bin" >> $GITHUB_PATH

      - name: Apply required modifications for rust-contracts-builder
        run: |
          sed -i "s/wasm32-wasi /wasm32-wasip1 /g" .venv/lib/python3.12/site-packages/rust_contracts_builder/__init__.py
          sed -i "s/wasm32-wasi\//wasm32-wasip1\//g" .venv/lib/python3.12/site-packages/rust_contracts_builder/__init__.py

      - name: Build Rust project
        run: rust-contract build
        working-directory: tests/contracts/skygpu-contract

      - uses: actions/cache@v3
        name: Cache venv
        with:
          path: ./.venv
          key: venv-${{ hashFiles('uv.lock') }}

      - name: Install with dev
        run: uv sync

      - name: Run tests
        run: |
          uv run pytest