-
Notifications
You must be signed in to change notification settings - Fork 1
160 lines (132 loc) · 4.52 KB
/
main.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
---
name: test nornir_conditional_runner
on: [push,pull_request]
jobs:
linters:
name: linters
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
- name: Cache Poetry virtualenv
uses: actions/cache@v4
id: cached-poetry-dependencies
with:
path: .venv
key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
- name: Install Dependencies
if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
run: poetry install --no-interaction --no-root
- name: Run ruff
run: poetry run ruff check
- name: Run ruff format
run: poetry run ruff format --check
- name: Run mypy
run: poetry run mypy . --pretty --show-error-context
pytest:
name: Testing on Python ${{ matrix.python-version }} (${{ matrix.platform}})
defaults:
run:
shell: bash
strategy:
matrix:
python-version: [ '3.8', '3.9', '3.10', '3.11', '3.12']
platform: [ubuntu-latest, macOS-latest, windows-latest]
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
- name: Cache Poetry virtualenv
uses: actions/cache@v4
id: cached-poetry-dependencies
with:
path: .venv
key: venv-${{ matrix.python-version }}-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }}
if: ${{ matrix.platform != 'windows-latest' }} # windows hangs if using a cached venv
- name: Install Dependencies
run: poetry install --no-interaction
- name: Poetry show
run: poetry show
- name: Poetry env info
run: poetry env info
- name: Run tests with coverage
run: |
poetry run pytest --cov=nornir_conditional_runner --cov-report=xml --cov-report=term-missing
- name: Upload coverage report artifact
if: matrix.platform == 'macos-latest' && matrix.python-version == '3.11'
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage.xml
coverage:
runs-on: macos-latest
needs: [pytest]
steps:
- name: Checkout Code
uses: actions/checkout@v3
- name: Download coverage report artifact
uses: actions/download-artifact@v4
with:
name: coverage-report
- name: Extract Coverage
if: runner.os == 'macOS'
run: |
pip install lxml
COVERAGE=$(xmllint --xpath "string(//coverage/@line-rate)" coverage.xml)
echo "coverage=$COVERAGE" >> $GITHUB_ENV
- name: Generate Badge
if: runner.os == 'macOS'
run: |
pip install lxml
COVERAGE=$(xmllint --xpath "string(//coverage/@line-rate)" coverage.xml)
COVERAGE=$(awk "BEGIN {print $COVERAGE * 100}")
echo "Extracted Coverage: $COVERAGE%"
echo "{\"schemaVersion\": 1, \"label\": \"coverage\", \"message\": \"${COVERAGE}%\", \"color\": \"green\"}" > coverage-badge.json
mkdir -p public
mv coverage-badge.json public/
- name: Deploy Badge to GitHub Pages
if: runner.os == 'macOS'
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
release:
name: Releasing to PyPI
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags')
needs: [linters, pytest]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup python
uses: actions/setup-python@v5
with:
python-version: "3.10"
- name: Install Poetry
uses: snok/install-poetry@v1
- name: build release
run: poetry build
- name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
- uses: actions/upload-artifact@v4
with:
name: build
path: dist/*