Refactor CI builds and conda management #250
Workflow file for this run
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: Test Suite | |
'on': | |
push: | |
branches: | |
- main | |
pull_request: {} | |
concurrency: | |
group: test-${{github.ref}} | |
cancel-in-progress: true | |
jobs: | |
conda: | |
name: Conda Python ${{matrix.python}} on ${{matrix.platform}} | |
runs-on: ${{matrix.platform}} | |
timeout-minutes: 30 | |
defaults: | |
run: | |
shell: bash -el {0} | |
strategy: | |
fail-fast: false | |
matrix: | |
python: | |
- '3.10' | |
- '3.11' | |
platform: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
- macos-13 | |
steps: | |
- name: π Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: π’ Generate Conda environment file | |
run: | | |
pipx run ./utils/conda-tool.py --env -o ci-environment.yml -e all pyproject.toml test-requirements.txt | |
- id: setup | |
name: π¦ Set up Conda environment | |
uses: mamba-org/setup-micromamba@v1 | |
with: | |
environment-file: ci-environment.yml | |
environment-name: lkpy | |
cache-environment: true | |
init-shell: bash | |
- name: π Inspect environment | |
run: | | |
which -a python | |
python -V | |
numba -s | |
- name: ππ»ββ‘οΈ Test LKPY | |
run: | | |
python -m pytest --cov=lenskit --verbose --log-file=test.log --durations=25 | |
- name: π Coverage results | |
run: coverage xml | |
- name: π€ Upload test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-conda-${{matrix.platform}}-py${{matrix.python}} | |
path: | | |
test*.log | |
coverage.xml | |
vanilla: | |
name: Vanilla Python ${{matrix.python}} on ${{matrix.platform}} | |
runs-on: ${{matrix.platform}} | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
python: | |
- '3.10' | |
- '3.11' | |
platform: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
steps: | |
- name: π Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: π Set up Python | |
id: install-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{matrix.python}} | |
- name: πΆοΈ Set up uv | |
run: | | |
pip install -U 'uv>=0.1.15' | |
- name: π¦ Set up Python dependencies | |
id: install-deps | |
run: | | |
uv pip install --python $PYTHON -r test-requirements.txt -e . | |
shell: bash | |
env: | |
PYTHON: ${{steps.install-python.outputs.python-path}} | |
UV_EXTRA_INDEX_URL: https://download.pytorch.org/whl/cpu | |
UV_INDEX_STRATEGY: unsafe-first-match | |
- name: π Inspect environment | |
run: | | |
which -a python | |
python -V | |
numba -s | |
- name: ππ»ββ‘οΈ Test LKPY | |
run: | | |
python -m pytest --cov=lenskit --verbose --log-file=test.log --durations=25 | |
- name: π Coverage results | |
run: coverage xml | |
- name: π€ Upload test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-vanilla-${{matrix.platform}}-py${{matrix.python}} | |
path: | | |
test*.log | |
coverage.xml | |
nojit: | |
name: Non-JIT test coverage | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- name: π Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: π Set up Python | |
id: install-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: πΆοΈ Set up uv | |
run: | | |
pip install -U 'uv>=0.1.15' | |
- name: π¦ Set up Python dependencies | |
id: install-deps | |
run: | | |
uv pip install --python $PYTHON -r test-requirements.txt -e . | |
shell: bash | |
env: | |
PYTHON: ${{steps.install-python.outputs.python-path}} | |
UV_EXTRA_INDEX_URL: https://download.pytorch.org/whl/cpu | |
UV_INDEX_STRATEGY: unsafe-first-match | |
- name: π Inspect environment | |
run: | | |
which -a python | |
python -V | |
numba -s | |
- name: ππ»ββ‘οΈ Test LKPY | |
run: | | |
python -m pytest --cov=lenskit --verbose --log-file=test.log --durations=25 -m "not slow" | |
env: | |
NUMBA_DISABLE_JIT: 1 | |
PYTORCH_JIT: 0 | |
- name: π Coverage results | |
run: coverage xml | |
- name: π€ Upload test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-nojit | |
path: | | |
test*.log | |
coverage.xml | |
mindep: | |
name: Minimal dependency tests | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- name: π Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: π Set up Python | |
id: install-python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.10' | |
- name: πΆοΈ Set up uv | |
run: | | |
pip install -U 'uv>=0.1.15' | |
- name: π¦ Set up Python dependencies | |
id: install-deps | |
run: | | |
uv pip install --python $PYTHON -r test-requirements.txt -e . --resolution=lowest-direct | |
shell: bash | |
env: | |
PYTHON: ${{steps.install-python.outputs.python-path}} | |
UV_EXTRA_INDEX_URL: https://download.pytorch.org/whl/cpu | |
UV_INDEX_STRATEGY: unsafe-first-match | |
- name: π Inspect environment | |
run: | | |
which -a python | |
python -V | |
numba -s | |
- name: ππ»ββ‘οΈ Test LKPY | |
run: | | |
python -m pytest --cov=lenskit --verbose --log-file=test.log --durations=25 | |
- name: π Coverage results | |
run: coverage xml | |
- name: π€ Upload test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-mindep | |
path: | | |
test*.log | |
coverage.xml | |
examples: | |
name: Demos, Examples, and Docs | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash -el {0} | |
steps: | |
- name: π Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: π’ Generate Conda environment file | |
run: | | |
pipx run ./utils/conda-tool.py --env -o ci-environment.yml -e all pyproject.toml dev-requirements.txt | |
- id: setup | |
name: π¦ Set up Conda environment | |
uses: mamba-org/setup-micromamba@v1 | |
with: | |
environment-file: ci-environment.yml | |
environment-name: lkpy | |
cache-environment: true | |
init-shell: bash | |
- name: Cache ML data | |
uses: actions/cache@v2 | |
with: | |
path: | | |
data | |
!data/*.zip | |
key: test-mldata-000 | |
- name: Download ML data | |
run: | | |
python -m lenskit.datasets.fetch ml-100k | |
python -m lenskit.datasets.fetch ml-1m | |
python -m lenskit.datasets.fetch ml-10m | |
python -m lenskit.datasets.fetch ml-20m | |
- name: Install for testing | |
run: | | |
pip install --no-deps -e . | |
- name: Run Eval Tests | |
run: | | |
python -m pytest --cov=lenskit -m eval --log-file test-eval.log | |
python -m pytest --cov=lenskit --cov-append -m realdata --log-file test-realdata.log | |
- name: Validate doc notebooks | |
run: | | |
cp docs/*.ipynb data | |
python -m pytest --nbval-lax --cov=lenskit --cov-append data --log-file test-docs.log | |
- name: π Coverage results | |
run: coverage xml | |
- name: π€ Upload test results | |
uses: actions/upload-artifact@v3 | |
with: | |
name: test-examples | |
path: | | |
test*.log | |
coverage.xml | |
results: | |
name: Test suite results | |
runs-on: ubuntu-latest | |
needs: | |
- conda | |
- vanilla | |
- nojit | |
- mindep | |
- examples | |
steps: | |
- name: π Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: π₯ Download test artifacts | |
uses: actions/download-artifact@v3 | |
with: | |
path: test-logs | |
- name: π List log files | |
run: ls -lR test-logs | |
- name: β Upload coverage | |
uses: codecov/codecov-action@v3 | |
with: | |
directory: test-logs/ |