-
Notifications
You must be signed in to change notification settings - Fork 1
173 lines (142 loc) · 4.98 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
161
162
163
164
165
166
167
168
169
170
171
172
173
---
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/') # Trigger on tag push
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: Determine Source Branch
id: get_branch
run: echo "branch=$(git show -s --pretty=%D HEAD | grep -o 'origin/main')" >> $GITHUB_ENV
- name: Verify Source Branch is Main
if: env.branch == 'origin/main'
run: echo "Tag was created on main branch."
- name: Install Poetry
if: env.branch == 'origin/main'
uses: snok/install-poetry@v1
- name: Build release
if: env.branch == 'origin/main'
run: poetry build
- name: Publish package to PyPI
if: env.branch == 'origin/main'
uses: pypa/gh-action-pypi-publish@release/v1
with:
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}
- uses: actions/upload-artifact@v4
if: env.branch == 'origin/main'
with:
name: build
path: dist/*