generated from tophat/new-project-kit
-
Notifications
You must be signed in to change notification settings - Fork 36
132 lines (123 loc) · 3.78 KB
/
ci.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
name: CI
on:
push:
branches:
- main
- next
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
VENV: .venv
permissions:
contents: read
checks: write
jobs:
analysis:
name: Code Analysis
runs-on: ubuntu-latest
if: (!contains(github.event.head_commit.message, '[skip ci]'))
steps:
- uses: actions/[email protected]
- name: Setup Environment
uses: ./.github/actions/setup-env
- name: Install project dependencies
run: . script/bootstrap
- name: Lint
run: |
poetry run invoke lint
tests:
name: Tests
runs-on: ${{ matrix.os }}
if: (!contains(github.event.head_commit.message, '[skip ci]'))
strategy:
matrix:
os: [ubuntu-latest, windows-latest]
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12', '3.13-dev']
fail-fast: ${{ !contains(github.event.pull_request.labels.*.name, 'ci/run-all-tests') }}
steps:
- uses: actions/[email protected]
- name: Setup Environment
uses: ./.github/actions/setup-env
with:
python-version: ${{ matrix.python-version }}
- name: Install project dependencies
run: . script/bootstrap
shell: bash
- name: Run Tests (with coverage)
id: tests-with-coverage
if: matrix.python-version == '3.13-dev' && matrix.os == 'ubuntu-latest'
shell: bash
run: poetry run invoke test --coverage
- name: Run Tests
if: steps.tests-with-coverage.outcome == 'skipped'
shell: bash
run: poetry run invoke test
- name: Upload Coverage
if: steps.tests-with-coverage.conclusion == 'success'
uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
# # TODO: How to do this with poetry?
# version_checks:
# name: Dependency Version Constraint Checks
# runs-on: ubuntu-latest
# if: "!contains(github.event.head_commit.message, '[skip ci]')"
# env:
# SKIP_DEPS: 1
# steps:
# - uses: actions/[email protected]
# - name: Setup Environment
# uses: ./.github/actions/setup-env
# with:
# python-version: 3.7 # it's min, so we'll use an older version of python
# - name: Install project dependencies
# run: |
# . script/bootstrap
# poetry install --with=test
# - name: Test
# env:
# CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
# run: |
# . $VENV/bin/activate
# poetry run invoke test --coverage
benchmark:
name: Benchmark
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' && !contains(github.event.head_commit.message, '[skip ci]')
needs: [tests]
permissions:
contents: write
pull-requests: write
steps:
- uses: actions/[email protected]
- name: Setup Environment
uses: ./.github/actions/setup-env
- name: Install project dependencies
run: . script/bootstrap
- name: Benchmark
run: poetry run invoke benchmark
- name: Publish Benchmark Results
uses: benchmark-action/github-action-benchmark@v1
with:
tool: 'pytest'
output-file-path: benchmarks.json
github-token: ${{ github.token }}
auto-push: false
alert-threshold: '200%'
comment-on-alert: true
fail-on-alert: false
comment-always: true
required_checks:
name: Required Checks
needs:
- analysis
- tests
- benchmark
runs-on: ubuntu-latest
if: always()
steps:
- name: Fail on error
if: contains(needs.*.result, 'failure') || cancelled()
run: exit 1