Merge branch 'develop' into elizabeth/update-python-and-dependencies #16
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
# 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/[email protected] | |
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}} |