Skip to content

Merge branch 'elizabeth/update-python-and-dependencies' into liezl/lo… #20

Merge branch 'elizabeth/update-python-and-dependencies' into liezl/lo…

Merge branch 'elizabeth/update-python-and-dependencies' into liezl/lo… #20

Workflow file for this run

# Run tests using built wheels.
name: Build PyPI CI (no upload)
# Run when changes to pip wheel
on:
push:
paths:
- "setup.py"
- "requirements.txt"
- "dev_requirements.txt"
- "jupyter_requirements.txt"
- "pypi_requirements.txt"
- "environment_build.yml"
- ".github/workflows/build_pypi_ci.yml"
jobs:
build:
name: Build wheel (${{ matrix.os }})
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-22.04"]
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude
include:
# Use this condarc as default
- condarc: .conda/condarc.yaml
- wheel_name: sleap-wheel-linux
- pyver: "3.10"
steps:
# Setup
- name: Checkout
uses: actions/checkout@v4
- name: Setup Miniconda
uses: conda-incubator/setup-miniconda@v3.0.3
with:
miniforge-version: latest
condarc-file: ${{ matrix.condarc }}
python-version: ${{ matrix.pyver }}
environment-file: environment_build.yml
activate-environment: sleap_ci
conda-solver: "libmamba"
- name: Print build environment info
shell: bash -l {0}
run: |
which python
conda list
pip freeze
# Build pip wheel
- name: Build pip wheel
shell: bash -l {0}
run: |
python setup.py bdist_wheel
# Upload artifact "tests" can use it
- name: Upload wheel artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.wheel_name }}
path: dist/*.whl
retention-days: 1
tests:
name: Run tests using wheel (${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: build # Ensure the build job has completed before starting this job.
strategy:
fail-fast: false
matrix:
os: ["ubuntu-22.04", "windows-2022", "macos-14"]
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstrategymatrixinclude
include:
# Default values
- wheel_name: sleap-wheel-linux
- venv_cmd: source venv/bin/activate
- pip_cmd: |
wheel_path=$(find dist -name "*.whl")
echo $wheel_path
pip install '$wheel_path'[dev]
- test_args: pytest --durations=-1 tests/
- condarc: .conda/condarc.yaml
- pyver: "3.10"
# MacOS specific values
# Need ffmpeg since linux imageio-ffmpeg does not contain the binary executable of ffmpeg
# https://pypi.org/project/imageio-ffmpeg/0.5.1/#modal-close
# Use special condarc if macos
- os: "macos-14"
condarc: .conda_mac/condarc.yaml
pyver: "3.10"
test_args: |
brew install ffmpeg
which ffmpeg
pytest --durations=-1 tests/
# Ubuntu specific values
- os: ubuntu-22.04
# Otherwise core dumped in github actions
# https://github.com/conda-forge/opencv-feedstock/issues/401#issue-2196393732
# Need ffmpeg since linux imageio-ffmpeg does not contain the binary executable of ffmpeg
# https://pypi.org/project/imageio-ffmpeg/0.5.1/#modal-close
test_args: |
sudo apt install ffmpeg xvfb libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xfixes0
sudo apt-get install libglapi-mesa libegl-mesa0 libegl1 libopengl0 libgl1-mesa-glx
sudo Xvfb :1 -screen 0 1024x768x24 </dev/null &
export DISPLAY=":1"
which ffmpeg
pytest tests -k 'not exclude_from_linux_pip_test'
# Windows specific values
- os: windows-2022
venv_cmd: .\venv\Scripts\activate
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.pyver }}
# Download wheel
- name: Download wheel artifact
uses: actions/download-artifact@v4
id: download
with:
name: ${{ matrix.wheel_name }}
path: dist
- name: Create virtual environment
run: python -m venv venv
- name: Activate virtual environment
run: ${{ matrix.venv_cmd }}
- name: Install the built wheel (not Mac)
if: runner.os != 'macOS'
shell: bash -l {0}
run: |
wheel_path=$(find dist -name "*.whl")
echo wheel_path
pip install "$wheel_path"[dev]
- name: Install the built wheel (Mac)
if: runner.os == 'macOS'
shell: bash -e {0}
run: |
wheel_path=$(find dist -name "*.whl")
echo wheel_path
pip install "$wheel_path"[dev]
- name: Print test environment info
shell: bash -l {0}
run: |
which python
pip freeze
# Install and test the wheel
- name: Test the built wheel
run: |
${{ matrix.test_args}}