name: CI

on: [pull_request]

jobs:
  format-check:
    runs-on: self-hosted

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.9'

    - name: Create virtual environment
      run: python -m venv tilelang_ci

    - name: Activate virtual environment and install dependencies
      run: |
        source tilelang_ci/bin/activate
        python -m pip install --upgrade pip
        if [ -f requirements-dev.txt ]; then python -m pip install -r requirements-dev.txt; fi

    - name: Update submodules recursively
      run: git submodule update --init --recursive

    - name: Run format check
      run: |
        source tilelang_ci/bin/activate
        ./format.sh

  build-test:
    runs-on: self-hosted
    needs: format-check

    steps:
    - name: Checkout repository
      uses: actions/checkout@v2
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: '3.9'

    - name: Create virtual environment
      run: python -m venv tilelang_ci

    - name: Activate virtual environment and install dependencies
      run: |
        source tilelang_ci/bin/activate
        python -m pip install --upgrade pip
        if [ -f requirements-test.txt ]; then PIP_NO_BUILD_ISOLATION=1 python -m pip install -r requirements-test.txt; fi

    - name: Install project in wheel mode
      run: |
        source tilelang_ci/bin/activate
        python -m pip install .

    - name: Run examples
      run: |
        source tilelang_ci/bin/activate
        cd examples
        python -m pytest **/test*.py

    - name: Run tests
      run: |
        source tilelang_ci/bin/activate
        cd testing/python
        export TILELANG_CLEAR_CACHE=1
        python -m pytest
