-
Notifications
You must be signed in to change notification settings - Fork 1
132 lines (110 loc) · 3.78 KB
/
test-code.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
# This workflow will for a variety of Python versions
# - install the code base
# - lint the code base
# - test the code base
# - upload the test coverage to codecov
#
# It will also
# - build the package
# - check the package
#
# https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
name: Test code
on:
# Trigger the workflow on push
push:
# Every branch
branches:
- "**"
# But do not run this workflow on creating a new tag starting with 'v', e.g. 'v1.0.3' (see pypi-publish.yml)
tags-ignore:
- 'v*'
# Trigger the workflow on pull request
pull_request:
branches:
- "**"
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Allow only one concurrent workflow, skipping runs queued between the run in-progress and latest queued.
# And cancel in-progress runs.
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
# Job 1: Check code consistency
code-consistency:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
- name: Check validity of pyproject.toml
run: |
pip install 'validate-pyproject[all]'
validate-pyproject pyproject.toml
# Install Python linter and code formatter and run in the project root
- name: Install and run Ruff
run: |
pip install ruff
ruff check .
- name: Suggestion to fix linter issues
if: ${{ failure() }}
run: |
echo "In project root run 'ruff check . --fix' and commit changes to fix issues."
exit 1
# Job 2: Test code and upload coverage to Codecov
test-code:
needs: code-consistency # previous job 'code-consistency' need to be finished first
# current job matrix. if modified, remember to UPDATE the strategy in the next job
strategy:
fail-fast: false
matrix:
os: [ubuntu-24.04, windows-2022, macos-13, macos-14]
python-version: ['3.10', '3.11', '3.12']
runs-on: ${{ matrix.os }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Upgrade package installer for Python
run: python -m pip install --upgrade pip
- name: Enable extra repository
shell: bash
run: |
pip config --user set global.extra-index-url https://easyscience.github.io/pypi/
pip config --user set global.trusted-host easyscience.github.io
- name: Install Python dependencies
run: pip install '.[dev]'
- name: Run Python tests and create coverage report
run: >
pytest tests/
--cov=./
--cov-report=xml:coverage/coverage.xml
--junitxml=./coverage/junit.xml
--color=yes
-n auto
#- name: Upload test results to Codecov
# if: ${{ !cancelled() }}
# uses: codecov/test-results-action@v1
# with:
# files: ./coverage/junit.xml
# fail_ci_if_error: true # optional (default = false)
# name: Pytest results
# token: ${{ secrets.CODECOV_TOKEN }}
#- name: Upload coverage report to Codecov
# uses: codecov/codecov-action@v4
# with:
# files: ./coverage/coverage.xml
# env_vars: OS,PYTHON
# fail_ci_if_error: true # optional (default = false)
# name: Pytest coverage
# token: ${{ secrets.CODECOV_TOKEN }}
# env:
# OS: ${{ matrix.os }}
# PYTHON: ${{ matrix.python-version }}