Skip to content

Tests and Docs

Tests and Docs #185

name: Tests and Docs
on:
workflow_dispatch:
schedule:
- cron: "0 0 * * 0"
push:
branches:
- main
- master
jobs:
# Job (1): Run testing in parallel against multiples OSs and Python versions
test:
name: Test
runs-on: ${{ matrix.os }}
# Determines whether the entire workflow should pass/fail based on parallel jobs
continue-on-error: ${{ matrix.experimental }}
defaults:
# This ensures each step gets properly configured bash shell for conda commands to work
run:
shell: bash -l {0}
strategy:
fail-fast: false
matrix:
# OSs to test
os: [ubuntu-latest, macos-latest]
# Python versions to test
python-version: ["3.10", "3.11"]
# By default everything should pass for the workflow to pass
experimental: [false]
include:
# Windows sometimes fails to install due to dependency changes, but eventually sort themselves out. So let these tests fail. Also issue on macos 3.11 with joblib so let that fail
- os: ubuntu-latest
python-version: "3.12"
experimental: true
- os: macos-latest
python-version: "3.12"
experimental: true
- os: windows-latest
python-version: "3.10"
experimental: true
- os: windows-latest
python-version: "3.11"
experimental: true
- os: windows-latest
python-version: "3.12"
experimental: true
steps:
# Step up miniconda
- name: Download and setup Miniconda
uses: conda-incubator/setup-miniconda@v3
with:
miniconda-version: "latest"
python-version: ${{ matrix.python-version }}
# Check out latest code on github
- name: Checkout Code
uses: actions/checkout@v2
# Install common sci-py packages via conda as well as testing packages and requirements
- name: Install Dependencies
run: |
conda activate test
conda env list
pip install . -r requirements-dev.txt
# Actually run the tests with coverage
- name: Run Tests
run: |
conda activate test
conda env list
ruff check --ignore=W292,E402,E501,E731,E741 feat
pytest --cov=feat -rs
# Send coverage to coveralls.io but waiting on parallelization to finish
# Not using the official github action in the marketplace to upload because it requires a .lcov file, which pytest doesn't generate. It's just easier to use the coveralls python library which does the same thing, but works with pytest.
- name: Upload Coverage
# The coveralls python package has some 422 server issues with uploads from github-actions so try both service providers, for more see:
# https://github.com/TheKevJames/coveralls-python/issues/252
run: coveralls --service=github || coveralls --service=github-actions
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
COVERALLS_FLAG_NAME: $${{ matrix}}
COVERALLS_PARALLEL: true
# Job (2): Send a finish notification to coveralls.io to integrate coverage across parallel tests
coveralls:
name: Coveralls.io Upload
needs: test
runs-on: ubuntu-latest
container: python:3-slim
continue-on-error: true
steps:
- name: Finished
run: |
pip3 install --upgrade coveralls
coveralls --service=github --finish || coveralls --service=github-actions --finish
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Job (3): Build and deploy docs
docs:
name: Build & deploy docs
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: "3.8"
- name: Upgrade pip
run: |
# install pip=>20.1 to use "pip cache dir"
python3 -m pip install --upgrade pip
- name: Install deps
run: |
python3 -m pip install . -r requirements.txt
python3 -m pip install -r ./requirements-dev.txt
- name: Build book
run: |
jupyter-book build docs
echo 'py-feat.org' > ./docs/_build/html/CNAME
- name: Deploy docs
uses: peaceiris/actions-gh-pages@068dc23d9710f1ba62e86896f84735d869951305
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./docs/_build/html