# 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'] paths: - 'flaml/**' - 'test/**' - 'notebook/**' - '.github/workflows/python-package.yml' - 'setup.py' pull_request: branches: ['main'] paths: - 'flaml/**' - 'test/**' - 'notebook/**' - '.github/workflows/python-package.yml' - 'setup.py' merge_group: types: [checks_requested] schedule: # Every other day at 02:00 UTC - cron: '0 2 */2 * *' permissions: contents: write concurrency: group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref }} cancel-in-progress: ${{ github.ref != 'refs/heads/main' }} jobs: build: runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] python-version: ["3.10", "3.11", "3.12", "3.13"] steps: - uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: On mac, install libomp to facilitate lgbm and xgboost install if: matrix.os == 'macos-latest' run: | brew update brew install libomp export CC=/usr/bin/clang export CXX=/usr/bin/clang++ export CPPFLAGS="$CPPFLAGS -Xpreprocessor -fopenmp" export CFLAGS="$CFLAGS -I/usr/local/opt/libomp/include" export CXXFLAGS="$CXXFLAGS -I/usr/local/opt/libomp/include" export LDFLAGS="$LDFLAGS -Wl,-rpath,/usr/local/opt/libomp/lib -L/usr/local/opt/libomp/lib -lomp" - name: Install packages and dependencies run: | python -m pip install --upgrade pip wheel setuptools pip install -e . python -c "import flaml" pip install -e .[test] - name: On Ubuntu python 3.11, install pyspark 3.5.1 if: matrix.python-version == '3.11' && matrix.os == 'ubuntu-latest' run: | pip install pyspark==3.5.1 pip list | grep "pyspark" - name: On Ubuntu python 3.12, install pyspark 4.0.1 if: matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' run: | pip install pyspark==4.0.1 pip list | grep "pyspark" - name: On Ubuntu python 3.13, install pyspark 4.1.0 if: matrix.python-version == '3.13' && matrix.os == 'ubuntu-latest' run: | pip install pyspark==4.1.0 pip list | grep "pyspark" # # TODO: support ray # - name: If linux and python<3.11, install ray 2 # if: matrix.os == 'ubuntu-latest' && matrix.python-version < '3.11' # run: | # pip install "ray[tune]<2.5.0" - name: Install prophet when on linux if: matrix.os == 'ubuntu-latest' run: | pip install -e .[forecast] # TODO: support vw for python 3.10+ - name: If linux and python<3.10, install vw if: matrix.os == 'ubuntu-latest' && matrix.python-version < '3.10' run: | pip install -e .[vw] - name: Pip freeze run: | pip freeze - name: Check dependencies run: | python test/check_dependency.py - name: Clear pip cache run: | pip cache purge - name: Test with pytest timeout-minutes: 120 if: matrix.python-version != '3.11' run: | pytest test/ --ignore=test/autogen --reruns 2 --reruns-delay 10 - name: Coverage timeout-minutes: 120 if: matrix.python-version == '3.11' run: | pip install coverage coverage run -a -m pytest test --ignore=test/autogen --reruns 2 --reruns-delay 10 coverage xml - name: Upload coverage to Codecov if: matrix.python-version == '3.11' uses: codecov/codecov-action@v3 with: file: ./coverage.xml flags: unittests - name: Save dependencies shell: bash run: | git config --global user.name 'github-actions[bot]' git config --global user.email 'github-actions[bot]@users.noreply.github.com' git config advice.addIgnoredFile false BRANCH=unit-tests-installed-dependencies git fetch origin git checkout -B "$BRANCH" "origin/$BRANCH" pip freeze > installed_all_dependencies_${{ matrix.python-version }}_${{ matrix.os }}.txt python test/check_dependency.py > installed_first_tier_dependencies_${{ matrix.python-version }}_${{ matrix.os }}.txt git add installed_*dependencies*.txt mv coverage.xml ./coverage_${{ matrix.python-version }}_${{ matrix.os }}.xml || true git add -f ./coverage_${{ matrix.python-version }}_${{ matrix.os }}.xml || true git commit -m "Update installed dependencies for Python ${{ matrix.python-version }} on ${{ matrix.os }}" || exit 0 git push origin "$BRANCH" --force