-
-
Notifications
You must be signed in to change notification settings - Fork 18
163 lines (158 loc) · 4.67 KB
/
tox-tests.yaml
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
---
name: 👷tests
on:
create:
push:
pull_request:
schedule:
- cron: 1 0 * * * # Run daily at 0:01 UTC
jobs:
tests:
if: >- # https://twitter.com/webKnjaZ/status/1308803017001652225
github.event_name != 'create' ||
github.ref_type == 'tag'
name: >-
${{ matrix.python-version }}
/
${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
python-version:
- 3.9
- 3.8
- 3.7
- 3.6
os:
- ubuntu-18.04
- ubuntu-20.04
- macos-latest
- macos-11.0
- windows-latest
env:
PY_COLORS: 1
TOX_PARALLEL_NO_SPINNER: 1
TOXENV: python
steps:
- uses: actions/checkout@v2
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: >-
Calculate Python interpreter version hash value
for use in the cache key
id: calc_cache_key_py
run: |
from hashlib import sha512
from sys import version
hash = sha512(version.encode()).hexdigest()
print(f'::set-output name=py_hash_key::{hash}')
shell: python
- name: Set up pip cache
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: >-
${{ runner.os }}-pip-${{
steps.calc_cache_key_py.outputs.py_hash_key }}-${{
hashFiles('setup.cfg') }}-${{
hashFiles('tox.ini') }}-${{
hashFiles('pyproject.toml') }}-${{
hashFiles('.pre-commit-config.yaml') }}
restore-keys: |
${{ runner.os }}-pip-${{ steps.calc_cache_key_py.outputs.py_hash_key }}-
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Install tox
run: |
python -m pip install --upgrade tox
- name: Log installed dists
run: |
python -m pip freeze --all
- name: Initialize tox envs
run: |
python -m tox --parallel auto --parallel-live --notest
- name: Test with tox
run: |
python -m tox --parallel auto --parallel-live
publish:
needs:
- tests
name: Build and publish Python 🐍 distributions 📦 to PyPI and TestPyPI
runs-on: ubuntu-latest
env:
PY_COLORS: 1
TOX_PARALLEL_NO_SPINNER: 1
TOXENV: build-dists
steps:
- name: Check out src from Git
uses: actions/checkout@v2
with:
# Get shallow Git history (default) for tag creation events
# but have a complete clone for any other workflows.
# Both options fetch tags but since we're going to remove
# one from HEAD in non-create-tag workflows, we need full
# history for them.
fetch-depth: >-
${{
(
github.event_name == 'create' &&
github.event.ref_type == 'tag'
) &&
1 || 0
}}
- name: Drop Git tags from HEAD for non-tag-create events
if: >-
github.event_name != 'create' ||
github.event.ref_type != 'tag'
run: >-
git tag --points-at HEAD
|
xargs git tag --delete
- name: Instruct setuptools-scm not to add a local version part
if: >-
github.event_name == 'push' &&
github.ref == format(
'refs/heads/{0}', github.event.repository.default_branch
)
run: |
echo 'local_scheme = "no-local-version"' >> pyproject.toml
git update-index --assume-unchanged pyproject.toml
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install tox
run: |
python -m pip install --upgrade tox
- name: Initialize tox envs
run: |
python -m tox --parallel auto --parallel-live --notest
- name: Build dists with tox
run: |
python -m tox --parallel auto --parallel-live
- name: Publish distribution 📦 to Test PyPI
if: >-
(
github.event_name == 'push' &&
github.ref == format(
'refs/heads/{0}', github.event.repository.default_branch
)
) ||
(
github.event_name == 'create' &&
github.event.ref_type == 'tag'
)
uses: pypa/gh-action-pypi-publish@master
with:
password: ${{ secrets.TEST_PYPI_PASSWORD }}
repository_url: https://test.pypi.org/legacy/
- name: Publish distribution 📦 to PyPI
if: >- # "create" workflows run separately from "push" & "pull_request"
github.event_name == 'create' &&
github.event.ref_type == 'tag'
uses: pypa/gh-action-pypi-publish@master
with:
password: ${{ secrets.PYPI_PASSWORD }}
...