-
Notifications
You must be signed in to change notification settings - Fork 21
135 lines (135 loc) · 4.49 KB
/
test-code.yml
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
---
name: Test code
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_call:
inputs:
repo-name:
description: The name of the repository to use to gate Codecov uploads.
required: true
type: string
node-version: # The node version needs to stay in sync with .readthedocs.yml
description: The version of Node.js to install; if set, mermaid-cli will be
installed via npm and graphviz will be installed via apt.
required: false
type: number
# Cancel running jobs for the same workflow and branch.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
# IMPORTANT: Any new jobs need to be added to the check-tests-passed job to ensure they correctly gate code changes
jobs:
# Basic testing & linting
test-general:
runs-on: ${{ matrix.platform }}
strategy:
fail-fast: false
matrix:
platform: [ubuntu-latest, windows-latest, macos-latest]
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12']
steps:
- uses: actions/checkout@v4
- if: ${{ inputs.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- if: ${{ inputs.node-version }}
name: Install non-python documentation dependencies
run: |
npm install -g @mermaid-js/mermaid-cli
sudo apt install --no-install-recommends --assume-yes graphviz
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
check-latest: true
- name: Install dependencies
run: python -m pip install tox tox-gh-actions
- name: Run tox
run: tox -v
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: artifact_${{ matrix.platform }}_${{ matrix.python-version }}_tests_and_linting
path: |
.results_*/**
.coverage*
# Quick testing with coverage (no linting)
test-fast:
runs-on: ${{ matrix.os_name }}-latest
env:
REPO_NAME: tektronix/${{ inputs.repo-name || 'tm_devices' }}
pytest_report_title: Test Results (${{ matrix.os_name }})
strategy:
fail-fast: false
matrix:
os_name: [ubuntu, windows, macos]
steps:
- uses: actions/checkout@v4
- if: ${{ inputs.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
- if: ${{ inputs.node-version }}
name: Install non-python documentation dependencies
run: |
npm install -g @mermaid-js/mermaid-cli
sudo apt install --no-install-recommends --assume-yes graphviz
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: x # any version
check-latest: true
- name: Install tox
run: python -m pip install tox
- name: Test
run: tox -ve tests
- uses: actions/upload-artifact@v4
if: ${{ !cancelled() }}
with:
name: artifact_${{ matrix.os_name }}_tests
path: |
.results_*/**
.coverage*
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4.3.0
if: ${{ github.repository == env.REPO_NAME && !cancelled() }}
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./.coverage_tests.xml
name: codecov-${{ matrix.os_name }}
fail_ci_if_error: true
verbose: true
create-job-summary:
name: Test Results
if: ${{ !cancelled() }}
needs: test-fast
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: artifacts
- name: Generate Summary
uses: phoenix-actions/test-reporting@v15
with:
name: Test Results
only-summary: false
output-to: step-summary
path: artifacts/**/.results_tests/results.xml
reporter: java-junit
fail-on-error: false
max-annotations: 0
# Check that all jobs passed
check-tests-passed:
if: ${{ !cancelled() }}
needs: [test-general, test-fast, create-job-summary]
runs-on: ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}