-
Notifications
You must be signed in to change notification settings - Fork 31
137 lines (116 loc) · 4.11 KB
/
pyscal.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
134
135
136
137
name: pyscal
on:
push:
branches:
- main
pull_request:
branches:
- main
release:
types:
- published
schedule:
# Run CI every night and check that tests are working with latest dependencies
- cron: "0 0 * * *"
env:
# Default python version to be use to create docs
DEFAULT_PYTHON_VERSION: "3.11"
jobs:
pyscal:
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: "ubuntu-latest"
python-version: "3.8"
- os: "ubuntu-latest"
python-version: "3.9"
- os: "ubuntu-latest"
python-version: "3.10"
- os: "ubuntu-latest"
python-version: "3.10"
- os: "macos-latest"
python-version: "3.11"
- os: "windows-latest"
python-version: "3.11"
steps:
- name: Checkout commit locally
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
- name: Install pyscal with dependencies
if: ${{ always() }}
run: |
pip install --upgrade pip
pip install .[tests,docs]
- name: List all installed packages
if: ${{ always() }}
run: pip freeze
- name: Lint with black
if: ${{ always() }}
run: |
black --check --force-exclude="pyscal/version.py" pyscal tests docs
- name: Lint with flake8
if: ${{ always() }}
run: |
flake8 pyscal tests
- name: Lint with isort
if: ${{ always() }}
run: |
isort --check-only --profile black pyscal tests
- name: Check typing with mypy
if: ${{ always() }}
run: |
mypy pyscal
- name: Run tests
if: ${{ always() }}
run: |
python -c "import pyscal"
pytest -n auto --strict-markers --hypothesis-profile ci tests/
- name: Syntax check documentation
if: ${{ always() }}
run: |
rstcheck -r docs
- name: Install font (xkcd) for documentation
if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == env.DEFAULT_PYTHON_VERSION }}
run: |
sudo apt-get install -y fonts-humor-sans
- name: Build documentation
if: ${{ matrix.os == 'ubuntu-latest' && matrix.python-version == env.DEFAULT_PYTHON_VERSION }}
run: |
export SETUPTOOLS_SCM_PRETEND_VERSION=${GITHUB_REF//refs\/tags\//}
python docs/make_plots.py
sphinx-build -b html docs ./build/sphinx/html
- name: Build python package and publish to pypi
if: ${{ github.event_name == 'release' && matrix.os == 'ubuntu-latest' && matrix.python-version == env.DEFAULT_PYTHON_VERSION }}
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.pyscal_pypi_token }}
run: |
export SETUPTOOLS_SCM_PRETEND_VERSION=${GITHUB_REF//refs\/tags\//}
pip install -U build twine # and maybe setuptools? not sure
python -m build
twine upload dist/*
- name: Update GitHub pages
if: ${{ github.event_name == 'release' && matrix.os == 'ubuntu-latest' && matrix.python-version == env.DEFAULT_PYTHON_VERSION }}
run: |
cp -R ./build/sphinx/html ../html
git config --local user.email "pyscal-github-action"
git config --local user.name "pyscal-github-action"
git fetch origin gh-pages
git stash # Due to make_plots.py above maybe having modified png files
git checkout --track origin/gh-pages
git clean -f -f -d -x # Double -f is intentional
git rm -r *
cp -R ../html/* .
git add .
if git diff-index --quiet HEAD; then
echo "No changes in documentation. Skip documentation deploy."
else
git commit -m "Update Github Pages"
git push "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git" gh-pages
fi