Tests and Docs #185
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: 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 |