mirror of
https://github.com/OpenHands/OpenHands.git
synced 2025-12-25 21:36:52 +08:00
128 lines
4.3 KiB
YAML
128 lines
4.3 KiB
YAML
# Workflow that runs python tests
|
|
name: Run Python Tests
|
|
|
|
# The jobs in this workflow are required, so they must run at all times
|
|
# * Always run on "main"
|
|
# * Always run on PRs
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
|
|
# If triggered by a PR, it will be in the same group. However, each commit on main will be in its own unique group
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ (github.head_ref && github.ref) || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
# Run python tests on Linux
|
|
test-on-linux:
|
|
name: Python Tests on Linux
|
|
runs-on: blacksmith-4vcpu-ubuntu-2404
|
|
env:
|
|
INSTALL_DOCKER: "0" # Set to '0' to skip Docker installation
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.12"]
|
|
permissions:
|
|
# For coverage comment and python-coverage-comment-action branch
|
|
pull-requests: write
|
|
contents: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Set up Docker Buildx
|
|
id: buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
- name: Install tmux
|
|
run: sudo apt-get update && sudo apt-get install -y tmux
|
|
- name: Setup Node.js
|
|
uses: useblacksmith/setup-node@v5
|
|
with:
|
|
node-version: "22.x"
|
|
- name: Install poetry via pipx
|
|
run: pipx install poetry
|
|
- name: Set up Python
|
|
uses: useblacksmith/setup-python@v6
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
cache: "poetry"
|
|
- name: Install Python dependencies using Poetry
|
|
run: |
|
|
poetry install --with dev,test,runtime
|
|
poetry run pip install pytest-xdist
|
|
poetry run pip install pytest-rerunfailures
|
|
- name: Build Environment
|
|
run: make build
|
|
- name: Run Unit Tests
|
|
run: PYTHONPATH=".:$PYTHONPATH" poetry run pytest --forked -n auto -s ./tests/unit --cov=openhands --cov-branch
|
|
env:
|
|
COVERAGE_FILE: ".coverage.${{ matrix.python_version }}"
|
|
- name: Run Runtime Tests with CLIRuntime
|
|
run: PYTHONPATH=".:$PYTHONPATH" TEST_RUNTIME=cli poetry run pytest -n 5 --reruns 2 --reruns-delay 3 -s tests/runtime/test_bash.py --cov=openhands --cov-branch
|
|
env:
|
|
COVERAGE_FILE: ".coverage.runtime.${{ matrix.python_version }}"
|
|
- name: Store coverage file
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: coverage-openhands
|
|
path: |
|
|
.coverage.${{ matrix.python_version }}
|
|
.coverage.runtime.${{ matrix.python_version }}
|
|
include-hidden-files: true
|
|
|
|
test-enterprise:
|
|
name: Enterprise Python Unit Tests
|
|
runs-on: blacksmith-4vcpu-ubuntu-2404
|
|
strategy:
|
|
matrix:
|
|
python-version: ["3.12"]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Install poetry via pipx
|
|
run: pipx install poetry
|
|
- name: Set up Python
|
|
uses: useblacksmith/setup-python@v6
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
cache: "poetry"
|
|
- name: Install Python dependencies using Poetry
|
|
working-directory: ./enterprise
|
|
run: poetry install --with dev,test
|
|
- name: Run Unit Tests
|
|
# Use base working directory for coverage paths to line up.
|
|
run: PYTHONPATH=".:$PYTHONPATH" poetry run --project=enterprise pytest --forked -n auto -s -p no:ddtrace -p no:ddtrace.pytest_bdd -p no:ddtrace.pytest_benchmark ./enterprise/tests/unit --cov=enterprise --cov-branch
|
|
env:
|
|
COVERAGE_FILE: ".coverage.enterprise.${{ matrix.python_version }}"
|
|
- name: Store coverage file
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: coverage-enterprise
|
|
path: ".coverage.enterprise.${{ matrix.python_version }}"
|
|
include-hidden-files: true
|
|
|
|
coverage-comment:
|
|
name: Coverage Comment
|
|
if: github.event_name == 'pull_request'
|
|
runs-on: ubuntu-latest
|
|
needs: [test-on-linux, test-enterprise]
|
|
|
|
permissions:
|
|
pull-requests: write
|
|
contents: write
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: actions/download-artifact@v5
|
|
id: download
|
|
with:
|
|
pattern: coverage-*
|
|
merge-multiple: true
|
|
|
|
- name: Coverage comment
|
|
id: coverage_comment
|
|
uses: py-cov-action/python-coverage-comment-action@v3
|
|
with:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
MERGE_COVERAGE_FILES: true
|