# Workflow that uses OpenHands to review a pull request. PR must be labeled 'review-this'
name: Use OpenHands to Review Pull Request

on:
  pull_request:
    types: [synchronize, labeled]

permissions:
  contents: write
  pull-requests: write

jobs:
  dogfood:
    if: contains(github.event.pull_request.labels.*.name, 'review-this')
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - name: Set up Docker Buildx
      id: buildx
      uses: docker/setup-buildx-action@v3
    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.12'
    - name: install git, github cli
      run: |
        sudo apt-get install -y git gh
        git config --global --add safe.directory $PWD
    - name: Checkout Repository
      uses: actions/checkout@v4
      with:
        ref: ${{ github.event.pull_request.base.ref }} # check out the target branch
    - name: Download Diff
      run: |
        curl -O "${{ github.event.pull_request.diff_url }}" -L
    - name: Write Task File
      run: |
        echo "Your coworker wants to apply a pull request to this project." > task.txt
        echo "Read and review ${{ github.event.pull_request.number }}.diff file. Create a review-${{ github.event.pull_request.number }}.txt and write your concise comments and suggestions there." >> task.txt
        echo "Do not ask me for confirmation at any point." >> task.txt
        echo "" >> task.txt
        echo "Title" >> task.txt
        echo "${{ github.event.pull_request.title }}" >> task.txt
        echo "" >> task.txt
        echo "Description" >> task.txt
        echo "${{ github.event.pull_request.body }}" >> task.txt
        echo "" >> task.txt
        echo "Diff file is: ${{ github.event.pull_request.number }}.diff" >> task.txt
    - name: Set up environment
      run: |
        curl -sSL https://install.python-poetry.org | python3 -
        export PATH="/github/home/.local/bin:$PATH"
        poetry install --without evaluation,llama-index
        poetry run playwright install --with-deps chromium
    - name: Run OpenHands
      env:
        LLM_API_KEY: ${{ secrets.LLM_API_KEY }}
        LLM_MODEL: ${{ vars.LLM_MODEL }}
      run: |
        # Append path to launch poetry
        export PATH="/github/home/.local/bin:$PATH"
        # Append path to correctly import package, note: must set pwd at first
        export PYTHONPATH=$(pwd):$PYTHONPATH
        export WORKSPACE_MOUNT_PATH=$GITHUB_WORKSPACE
        export WORKSPACE_BASE=$GITHUB_WORKSPACE
        echo -e "/exit\n" | poetry run python openhands/core/main.py -i 50 -f task.txt
        rm task.txt
    - name: Check if review file is non-empty
      id: check_file
      run: |
        ls -la
        if [[ -s review-${{ github.event.pull_request.number }}.txt ]]; then
          echo "non_empty=true" >> $GITHUB_OUTPUT
        fi
      shell: bash
    - name: Create PR review if file is non-empty
      env:
        GH_TOKEN: ${{ github.token }}
      if: steps.check_file.outputs.non_empty == 'true'
      run: |
        gh pr review ${{ github.event.pull_request.number }} --comment --body-file "review-${{ github.event.pull_request.number }}.txt"
