| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- # Workflow that runs python unit tests
- name: Run Python Unit 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:
- jobs:
- # Run python unit tests on macOS
- test-on-macos:
- name: Python Unit Tests on macOS
- runs-on: macos-12
- env:
- INSTALL_DOCKER: '1' # Set to '0' to skip Docker installation
- strategy:
- matrix:
- python-version: ['3.12']
- steps:
- - uses: actions/checkout@v4
- - name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
- with:
- python-version: ${{ matrix.python-version }}
- - name: Cache Poetry dependencies
- uses: actions/cache@v4
- with:
- path: |
- ~/.cache/pypoetry
- ~/.virtualenvs
- key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }}
- restore-keys: |
- ${{ runner.os }}-poetry-
- - name: Install poetry via pipx
- run: pipx install poetry
- - name: Install Python dependencies using Poetry
- run: poetry install --without evaluation,llama-index
- - name: Install & Start Docker
- if: env.INSTALL_DOCKER == '1'
- run: |
- INSTANCE_NAME="colima-${GITHUB_RUN_ID}"
- # Uninstall colima to upgrade to the latest version
- if brew list colima &>/dev/null; then
- brew uninstall colima
- # unlinking colima dependency: go
- brew uninstall go@1.21
- fi
- rm -rf ~/.colima ~/.lima
- brew install --HEAD colima
- brew install docker
- start_colima() {
- # Find a free port in the range 10000-20000
- RANDOM_PORT=$((RANDOM % 10001 + 10000))
- # Original line:
- if ! colima start --network-address --arch x86_64 --cpu=1 --memory=1 --verbose --ssh-port $RANDOM_PORT; then
- echo "Failed to start Colima."
- return 1
- fi
- return 0
- }
- # Attempt to start Colima for 5 total attempts:
- ATTEMPT_LIMIT=5
- for ((i=1; i<=ATTEMPT_LIMIT; i++)); do
- if start_colima; then
- echo "Colima started successfully."
- break
- else
- colima stop -f
- sleep 10
- colima delete -f
- if [ $i -eq $ATTEMPT_LIMIT ]; then
- exit 1
- fi
- sleep 10
- fi
- done
- # For testcontainers to find the Colima socket
- # https://github.com/abiosoft/colima/blob/main/docs/FAQ.md#cannot-connect-to-the-docker-daemon-at-unixvarrundockersock-is-the-docker-daemon-running
- sudo ln -sf $HOME/.colima/default/docker.sock /var/run/docker.sock
- - name: Build Environment
- run: make build
- - name: Set up Docker Buildx
- id: buildx
- uses: docker/setup-buildx-action@v3
- - name: Run Tests
- run: poetry run pytest --forked --cov=openhands --cov-report=xml ./tests/unit --ignore=tests/unit/test_memory.py
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v4
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- # Run python unit tests on Linux
- test-on-linux:
- name: Python Unit Tests on Linux
- runs-on: ubuntu-latest
- env:
- INSTALL_DOCKER: '0' # Set to '0' to skip Docker installation
- strategy:
- matrix:
- python-version: ['3.12']
- steps:
- - uses: actions/checkout@v4
- - name: Set up Docker Buildx
- id: buildx
- uses: docker/setup-buildx-action@v3
- - name: Install poetry via pipx
- run: pipx install poetry
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: ${{ matrix.python-version }}
- cache: 'poetry'
- - name: Install Python dependencies using Poetry
- run: poetry install --without evaluation,llama-index
- - name: Build Environment
- run: make build
- - name: Run Tests
- run: poetry run pytest --forked --cov=openhands --cov-report=xml -svv ./tests/unit --ignore=tests/unit/test_memory.py
- - name: Upload coverage to Codecov
- uses: codecov/codecov-action@v4
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
|