-
Notifications
You must be signed in to change notification settings - Fork 73
133 lines (121 loc) · 4.46 KB
/
tests_and_docs.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
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