Skip to content

Add CI Testing for Example Notebooks and Python Scripts #9

Add CI Testing for Example Notebooks and Python Scripts

Add CI Testing for Example Notebooks and Python Scripts #9

Workflow file for this run

name: Test Jupyter Notebooks
on:
push:
paths:
- 'examples/**.ipynb'
- 'examples/**.py'
- .github/workflows/examples.yaml
pull_request:
branches:
- main
- test-examples-ci
jobs:
test-notebooks:
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
dir:
- examples/computer_vision/fashion_product_images
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Set up environment for the { matrix.dir }
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Check for examples
shell: bash
run: |
echo "Checking for Jupyter Notebooks and Python scripts..."
if ls ${{ matrix.dir }}/*.ipynb 1> /dev/null 2>&1; then
echo "IPYNB_EXAMPLES_FOUND=true" >> $GITHUB_ENV
else
echo "IPYNB_EXAMPLES_FOUND=false" >> $GITHUB_ENV
fi
if ls ${{ matrix.dir }}/scripts/*.py 1> /dev/null 2>&1; then
echo "PY_EXAMPLES_FOUND=true" >> $GITHUB_ENV
else
echo "PY_EXAMPLES_FOUND=false" >> $GITHUB_ENV
fi
- name: Cache Python dependencies
if: env.IPYNB_EXAMPLES_FOUND == 'true' || env.PY_EXAMPLES_FOUND == 'true'
uses: actions/cache@v3
with:
path: |
~/.cache/pip
${{ matrix.dir }}/.venv
key: ${{ runner.os }}-pip-${{ hashFiles('${{ matrix.dir }}/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Set up virtual environment
if: env.IPYNB_EXAMPLES_FOUND == 'true' || env.PY_EXAMPLES_FOUND == 'true'
run: |
python -m venv ${{ matrix.dir }}/.venv
source ${{ matrix.dir }}/.venv/bin/activate
python -m pip install --upgrade pip
pip install notebook papermill
pip install git+https://github.com/iterative/datachain.git
if [ -f "${{ matrix.dir }}/requirements.txt" ]; then
pip install -r ${{ matrix.dir }}/requirements.txt
fi
shell: bash
# Test Jupyter Notebooks
- name: Test notebooks
if: env.IPYNB_EXAMPLES_FOUND == 'true'
run: |
source ${{ matrix.dir }}/.venv/bin/activate
chmod +x ./tests/examples/test_notebooks.sh
./tests/examples/test_notebooks.sh -d ${{ matrix.dir }}
shell: bash
# - name: Commit & push changes in Jupyter Notebooks
# if: env.IPYNB_EXAMPLES_FOUND == 'true'
# run: |
# git config --global user.name "${{ github.actor }}"
# git config --global user.email "${{ github.actor }}@users.noreply.github.com"
# git commit -am "Update Jupyter Notebooks"
# git push
# Test .py scripts designed for Studio (in scripts/ dir)
- name: Test .py scripts
if: env.PY_EXAMPLES_FOUND == 'true'
run: |
set -e
source ${{ matrix.dir }}/.venv/bin/activate
cd ${{ matrix.dir }}
find scripts -type f -name '*.py' -print | sort | while read script; do
echo "Testing use case in $script"
datachain query $script
done
shell: bash
# Save artifacts
- name: Set sanitized directory name
if: always()
run: |
sanitized_dir=$(echo "${{ matrix.dir }}" | tr '/' '-')
echo "SANITIZED_DIR=$sanitized_dir" >> $GITHUB_ENV
- name: Upload failed notebook outputs as artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: test-notebooks-${{ env.SANITIZED_DIR }}
path: |
output-*.ipynb
log-test-notebooks-*.log