Tests #3014
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Tests | |
on: | |
# Manually triggerable in github | |
workflow_dispatch: | |
# When a push occurs on either of these branches | |
push: | |
branches: | |
- master | |
- development | |
# When a push occurs on a PR that targets these branches | |
pull_request: | |
branches: | |
- master | |
- development | |
schedule: | |
# Every day at 7AM UTC | |
- cron: '0 07 * * *' | |
env: | |
# Arguments used for pytest | |
pytest-args: >- | |
--forked | |
--durations=20 | |
--timeout=600 | |
--timeout-method=thread | |
-s | |
# Arguments used for code-cov which is later used to annotate PR's on github | |
code-cov-args: >- | |
--cov=autosklearn | |
--cov-report=xml | |
jobs: | |
ubuntu: | |
name: ${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.kind }} | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [windows-latest, macos-latest, ubuntu-latest] | |
python-version: ['3.7', '3.8', '3.9'] # 3.10 once updated | |
kind: ['conda', 'source', 'dist'] | |
exclude: | |
# Exclude all configurations *-*-dist, include one later | |
- kind: 'dist' | |
# Exclude windows as bash commands wont work in windows runner | |
- os: windows-latest | |
# Exclude macos as there are permission errors using conda as we do | |
- os: macos-latest | |
include: | |
# Add the tag code-cov to ubuntu-3.7-source | |
- os: ubuntu-latest | |
python-version: 3.7 | |
kind: 'source' | |
code-cov: true | |
# Include one config with dist, ubuntu-3.7-dist | |
- os: ubuntu-latest | |
python-version: 3.7 | |
kind: 'dist' | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3.1.0 | |
with: | |
submodules: recursive | |
- name: Setup Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Conda install | |
if: matrix.kind == 'conda' | |
run: | | |
# Miniconda is available in $CONDA env var | |
$CONDA/bin/conda create -n testenv --yes pip wheel gxx_linux-64 gcc_linux-64 swig python=${{ matrix.python-version }} | |
$CONDA/envs/testenv/bin/python3 -m pip install --upgrade pip | |
$CONDA/envs/testenv/bin/pip3 install -e .[test] | |
- name: Source install | |
if: matrix.kind == 'source' | |
run: | | |
python -m pip install --upgrade pip | |
pip install -e .[test] | |
- name: Dist install | |
if: matrix.kind == 'dist' | |
run: | | |
python -m pip install --upgrade pip | |
python setup.py sdist | |
last_dist=$(ls -t dist/auto-sklearn-*.tar.gz | head -n 1) | |
pip install $last_dist[test] | |
- name: Store git status | |
id: status-before | |
run: | | |
echo "::set-output name=BEFORE::$(git status --porcelain -b)" | |
- name: Tests | |
timeout-minutes: 120 | |
run: | | |
export OPENBLAS_NUM_THREADS=1 | |
export OMP_NUM_THREADS=1 | |
export MKL_NUM_THREADS=1 | |
if [[ ${{ matrix.kind }} == 'conda' ]]; then | |
PYTHON=$CONDA/envs/testenv/bin/python3 | |
# As one of the tests runs a subprocess command and calls `python3`, we must | |
# explicitly add it to the path | |
export PATH="$CONDA/envs/testenv/bin:$PATH" | |
else | |
PYTHON=$(which python3) | |
fi | |
if [ ${{ matrix.code-cov }} ]; then | |
$PYTHON -m pytest ${{ env.pytest-args }} ${{ env.code-cov-args }} test | |
else | |
$PYTHON -m pytest ${{ env.pytest-args }} test | |
fi | |
- name: Check for files left behind by test | |
if: ${{ always() }} | |
run: | | |
# Deleting `.pytest_chache` as it's used during testing and not deleted | |
rm -rf ".pytest_cache" | |
before="${{ steps.status-before.outputs.BEFORE }}" | |
after="$(git status --porcelain -b)" | |
if [[ "$before" != "$after" ]]; then | |
echo "git status from before: $before" | |
echo "git status from after: $after" | |
echo "Not all generated files have been deleted!" | |
exit 1 | |
fi | |
- name: Upload coverage | |
if: matrix.code-cov && always() | |
uses: codecov/codecov-action@v3 | |
with: | |
fail_ci_if_error: true | |
verbose: true |