Repository navigation
159 lines (157 loc) · 6.81 KB
/
Copy pathregression_test.yml
File metadata and controls
159 lines (157 loc) · 6.81 KB
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
name: regression_test
# Runs the ThreadX, SMP and FreeRTOS-compatibility regression suites.
#
# dev is included as well as master, for the same reason ports_arch_check.yml
# names it: dev is the integration branch, so a check that runs only against
# master gates nothing that anybody opens. Until now these suites ran on no
# pull request that anybody actually raised, and the last dev run of any kind
# was a manual workflow_dispatch.
#
# That run, on 2026-08-18, failed two tests: threadx_timer_simple_test in the
# ThreadX suite and threadx_thread_priority_change in the SMP one. Both are
# fixed -- the first by running the suites one test at a time (#643), the
# second by #647 -- and both suites now pass all 1030 tests across all ten
# build configurations. The suites were never the problem; the trigger was.
on:
workflow_dispatch:
push:
branches: [ master, dev ]
pull_request:
branches: [ master, dev ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
tx:
permissions:
contents: read
issues: read
checks: write
pull-requests: write
pages: write
id-token: write
uses: ./.github/workflows/regression_template.yml
with:
build_script: ./scripts/build_tx.sh
test_script: ./scripts/test_tx.sh
cmake_path: ./test/tx/cmake
result_affix: ThreadX
skip_deploy: true
# 99 is the tightest floor available below this suite's figure. The
# merged report reads 4503/4503 lines -- 100.00% -- on the dev push run
# of #666, and two local runs of the same green tree came in at 100.00%
# and 99.98%: tx_thread_system_resume.c:529 is reached by timing rather
# than by construction and flaps between runs, and #666 could not reach
# it deliberately. So a floor of 100 is a check that fails on a race --
# probed against the pinned action, 4502/4503 fails a floor of 100 and
# clears one of 99 -- and the thresholds are integers, so there is
# nothing between the two. Ratchet this to 100 if 529 is ever covered
# by construction.
coverage_thresholds: '99 100'
smp:
permissions:
contents: read
issues: read
checks: write
pull-requests: write
pages: write
id-token: write
uses: ./.github/workflows/regression_template.yml
with:
build_script: ./scripts/build_smp.sh
test_script: ./scripts/test_smp.sh
cmake_path: ./test/smp/cmake
result_affix: SMP
skip_deploy: true
# Raised from 98 with the four tests that closed 53 of the 64 lines this
# comment used to list: the merged report goes from 5114/5178 -- 98.76% --
# to 5167/5178, 99.79%. A floor of 99 needs 5127, so there are 40 lines of
# headroom against a numerator measured flickering by two between runs.
#
# Still not 100, and not because the last eleven lines were skipped. Eight
# are tx_byte_pool_search.c's ownership delay loop, which needs another
# core to take the pool inside the window the search opens when it drops
# protection every twenty blocks; this port serialises all four cores on
# one pthread mutex and the thread that releases it wins the re-acquire
# every time -- measured over 180,003 windows, zero handovers. The other
# three are in tx_thread_smp_utilities.c: one is a range guard placed
# after the shift it is meant to guard, so reaching it needs undefined
# behaviour, and two are a priority-inheritance branch that needs the
# mutex owner genuinely executing on another core. See #677, which
# made these measurements and raised the floor.
coverage_thresholds: '99 100'
freertos:
permissions:
contents: read
issues: read
checks: write
pull-requests: write
pages: write
id-token: write
uses: ./.github/workflows/regression_template.yml
with:
build_script: ./scripts/build_freertos.sh
test_script: ./scripts/test_freertos.sh
cmake_path: ./test/freertos/cmake
result_affix: FreeRTOS
skip_deploy: true
# No coverage build configuration yet; the suite covers the creation
# paths of the layer rather than all of it.
skip_coverage: true
riscv:
permissions:
contents: read
issues: read
checks: write
pull-requests: write
pages: write
id-token: write
uses: ./.github/workflows/regression_template.yml
with:
install_script: ./scripts/install_riscv.sh
build_script: ./scripts/build_tx_riscv.sh
test_script: ./scripts/test_tx_riscv.sh
cmake_path: ./test/tx/cmake/riscv
result_affix: RISC-V
skip_deploy: true
# No coverage from this suite, and not for want of a build configuration.
# These tests are bare-metal images run under QEMU with -bios none, and
# test/tx/cmake/riscv/bsp/syscalls.c gives them _write to the UART, _exit
# through the sifive_test device, and stubs for _close, _fstat, _isatty,
# _lseek, _read and _sbrk -- but no _open. gcov emits a .gcda by opening
# a path, so instrumenting these builds would produce nothing to read.
#
# test/tx/cmake/riscv/CMakeLists.txt is its own top-level project and does
# not declare the TX_COVERAGE option that test/tx/cmake and test/smp/cmake
# do, so the OFF the template exports is inert here rather than the thing
# holding coverage off.
#
# Collecting it therefore needs a transport off the target -- gcov's dump
# routines over the UART the BSP already drives, or semihosting -- and not
# a default_build_coverage entry beside the other five configurations.
skip_coverage: true
deploy:
# Publishing the coverage report stays on master. Adding dev to this
# workflow's triggers was meant to run the suites on the branch the pull
# requests target, not to change what gets published -- and the first
# push to dev after that change failed here with 'Branch "dev" is not
# allowed to deploy to github-pages due to environment protection rules',
# while all three suites passed. The github-pages environment restricts
# deployments to master, so the job was rejected before it ran.
#
# Guarding here rather than relaxing the environment rule, because the
# rule is doing its job: it is a deliberate answer to the question of
# which branch the published report describes. Moving that answer to dev
# is a separate decision, and it needs the environment setting changed
# as well as this line removed.
if: github.ref == 'refs/heads/master'
permissions:
contents: read
issues: read
checks: write
pull-requests: write
pages: write
id-token: write
needs: [tx, smp]
uses: ./.github/workflows/regression_template.yml
with:
skip_test: true
deploy_list: "ThreadX SMP"