diff --git a/.github/workflows/py-unit-tests-mac.yml b/.github/workflows/py-unit-tests-mac.yml new file mode 100644 index 0000000000..d750eb1721 --- /dev/null +++ b/.github/workflows/py-unit-tests-mac.yml @@ -0,0 +1,96 @@ +# Workflow that runs python unit tests on mac +name: Run Python Unit Tests Mac + +# This job is flaky so only run it nightly +on: + schedule: + - cron: '0 0 * * *' + +jobs: + # Run python unit tests on macOS + test-on-macos: + name: Python Unit Tests on macOS + runs-on: macos-14 + 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 }} diff --git a/.github/workflows/py-unit-tests.yml b/.github/workflows/py-unit-tests.yml index 30d901b0b2..6e624904a8 100644 --- a/.github/workflows/py-unit-tests.yml +++ b/.github/workflows/py-unit-tests.yml @@ -16,94 +16,6 @@ concurrency: cancel-in-progress: true jobs: - # Run python unit tests on macOS - test-on-macos: - name: Python Unit Tests on macOS - runs-on: macos-14 - 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