# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Build on: push: branches: ["main"] pull_request: branches: ["main"] merge_group: types: [checks_requested] concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} permissions: {} jobs: paths-filter: runs-on: ubuntu-latest outputs: hasChanges: ${{ steps.filter.outputs.autogen == 'true' || steps.filter.outputs.test == 'true' || steps.filter.outputs.workflows == 'true' || steps.filter.outputs.setup == 'true' }} steps: - uses: actions/checkout@v4 - uses: dorny/paths-filter@v2 id: filter with: filters: | autogen: - "autogen/**" test: - "test/**" workflows: - ".github/workflows/**" setup: - "setup.py" - name: autogen has changes run: echo "autogen has changes" if: steps.filter.outputs.autogen == 'true' - name: test has changes run: echo "test has changes" if: steps.filter.outputs.test == 'true' - name: workflows has changes run: echo "workflows has changes" if: steps.filter.outputs.workflows == 'true' - name: setup has changes run: echo "setup has changes" if: steps.filter.outputs.setup == 'true' build: needs: paths-filter if: needs.paths-filter.outputs.hasChanges == 'true' runs-on: ${{ matrix.os }} env: AUTOGEN_USE_DOCKER: ${{ matrix.os != 'ubuntu-latest' && 'False' }} strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] exclude: - os: macos-latest python-version: "3.8" - os: macos-latest python-version: "3.9" steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install packages and dependencies run: | python -m pip install --upgrade pip wheel pip install -e .[cosmosdb] python -c "import autogen" pip install pytest-cov>=5 mock - name: Install optional dependencies for code executors # code executors and udfs auto skip without deps, so only run for python 3.11 if: matrix.python-version == '3.11' run: | pip install -e ".[jupyter-executor,test]" python -m ipykernel install --user --name python3 - name: Set AUTOGEN_USE_DOCKER based on OS shell: bash run: | if [[ ${{ matrix.os }} != ubuntu-latest ]]; then echo "AUTOGEN_USE_DOCKER=False" >> $GITHUB_ENV fi - name: Test with pytest skipping openai tests if: matrix.python-version != '3.10' && matrix.os == 'ubuntu-latest' # Remove the line below once https://github.com/docker/docker-py/issues/3256 is merged run: | pip install "requests<2.32.0" pytest test --ignore=test/agentchat/contrib --skip-openai --durations=10 --durations-min=1.0 - name: Test with pytest skipping openai and docker tests if: matrix.python-version != '3.10' && matrix.os != 'ubuntu-latest' run: | pytest test --ignore=test/agentchat/contrib --skip-openai --skip-docker --durations=10 --durations-min=1.0 - name: Coverage with Redis if: matrix.python-version == '3.10' run: | pip install -e .[test,redis,websockets] pytest test --ignore=test/agentchat/contrib --skip-openai --durations=10 --durations-min=1.0 - name: Test with Cosmos DB run: | pip install -e .[test,cosmosdb] pytest test/cache/test_cosmos_db_cache.py --skip-openai --durations=10 --durations-min=1.0 - name: Upload coverage to Codecov if: matrix.python-version == '3.10' uses: codecov/codecov-action@v3 with: file: ./coverage.xml flags: unittests build-check: if: always() runs-on: ubuntu-latest needs: [build] steps: - name: Get Date shell: bash run: | echo "date=$(date +'%m/%d/%Y %H:%M:%S')" >> "$GITHUB_ENV" - name: Run Type is ${{ github.event_name }} if: ${{ github.event_name != 'schedule' && github.event_name != 'workflow_dispatch'}} shell: bash run: | echo "run_type=${{ github.event_name }}" >> "$GITHUB_ENV" - name: Fail workflow if build failed id: check_build_failed if: contains(join(needs.*.result, ','), 'failure') uses: actions/github-script@v6 with: script: core.setFailed('Build Failed!') - name: Fail workflow if build cancelled id: check_build_cancelled if: contains(join(needs.*.result, ','), 'cancelled') uses: actions/github-script@v6 with: script: core.setFailed('Build Cancelled!')