-
Notifications
You must be signed in to change notification settings - Fork 11
214 lines (191 loc) · 8.24 KB
/
Copy pathci.yml
File metadata and controls
214 lines (191 loc) · 8.24 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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
name: CI
on:
push:
branches:
- main
pull_request:
schedule:
- cron: '17 3 * * 0'
concurrency:
group: ${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
jobs:
typos:
name: Typos
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: crate-ci/typos@master
ruff:
name: Ruff
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: "Main Script"
run: |
pip install ruff
ruff check
basedpyright:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: "Main Script"
run: |
EXTRA_INSTALL="pytest types-colorama types-Pygments scipy-stubs"
curl -L -O https://tiker.net/ci-support-v0
. ./ci-support-v0
build_py_project_in_conda_env
cipip install basedpyright
basedpyright "$(get_proj_name)" test
pytest3_pocl:
name: Pytest Conda Py3 POCL
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: "Main Script"
run: |
EXTRA_INSTALL="scipy"
curl -L -O https://tiker.net/ci-support-v0
. ./ci-support-v0
build_py_project_in_conda_env
test_py_project
pytest3_intel_cl:
name: Pytest Conda Py3 Intel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: "Main Script"
run: |
curl -L -O https://raw.githubusercontent.com/illinois-scicomp/machine-shop-maintenance/main/install-intel-icd.sh
sed -i \
-e '0,/^VERSION=/s|^VERSION=.*|VERSION=oclcpuexp-2025.20.6.0.04_224945_rel|' \
-e '0,/^RELEASE=/s|^RELEASE=.*|RELEASE="2025-WW27"|' \
-e '0,/^TBB_VERSION=/s|^TBB_VERSION=.*|TBB_VERSION=2022.1.0|' \
install-intel-icd.sh
sudo bash ./install-intel-icd.sh
CONDA_ENVIRONMENT=.test-conda-env-py3.yml
echo "- ocl-icd-system" >> "$CONDA_ENVIRONMENT"
sed -i "/pocl/ d" "$CONDA_ENVIRONMENT"
export PYOPENCL_TEST=intel
source /opt/enable-intel-cl.sh
EXTRA_INSTALL="scipy"
curl -L -O https://tiker.net/ci-support-v0
. ./ci-support-v0
build_py_project_in_conda_env
# Diagnose the Intel CPU OpenCL heap corruption: run serially
# in-process (no xdist workers, via CISUPPORT_PARALLEL_PYTEST=no)
# so a glibc abort happens at the culprit test with a full
# faulthandler traceback, instead of detonating later in another
# worker's GC. ARRAYCONTEXT_INTEL_DIAG makes the conftest force a
# gc pass at each test teardown so the abort lands on the test
# that caused it. A fresh cache dir keeps a crash from leaving a
# poisoned sqlite cache that cascades into spurious failures.
export CISUPPORT_PARALLEL_PYTEST=no
export ARRAYCONTEXT_INTEL_DIAG=1
export PYTHONFAULTHANDLER=1
export XDG_CACHE_HOME="$(mktemp -d)"
export PYTEST_FLAGS="-sv -p no:cacheprovider"
export NO_COLOR=1
test_py_project
crash_reproducer_intel_cl:
name: Crash Reproducer Conda Py3 Intel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: "Main Script"
run: |
curl -L -O https://raw.githubusercontent.com/illinois-scicomp/machine-shop-maintenance/main/install-intel-icd.sh
sed -i \
-e '0,/^VERSION=/s|^VERSION=.*|VERSION=oclcpuexp-2025.20.6.0.04_224945_rel|' \
-e '0,/^RELEASE=/s|^RELEASE=.*|RELEASE="2025-WW27"|' \
-e '0,/^TBB_VERSION=/s|^TBB_VERSION=.*|TBB_VERSION=2022.1.0|' \
install-intel-icd.sh
sudo bash ./install-intel-icd.sh
CONDA_ENVIRONMENT=.test-conda-env-py3.yml
echo "- ocl-icd-system" >> "$CONDA_ENVIRONMENT"
sed -i "/pocl/ d" "$CONDA_ENVIRONMENT"
export PYOPENCL_TEST=intel
source /opt/enable-intel-cl.sh
EXTRA_INSTALL="scipy"
curl -L -O https://tiker.net/ci-support-v0
. ./ci-support-v0
build_py_project_in_conda_env
# Capture the heap-corrupting write directly with valgrind. The
# Intel CPU OpenCL runtime corrupts the host heap during kernel
# execution; faulthandler only shows where the corruption later
# detonates (often in unrelated code), not the bad write itself.
# valgrind traps the invalid write at the instant it happens, even
# inside the closed-source libintelocl.so.
#
# - PYTHONMALLOC=malloc routes CPython allocations through libc so
# valgrind isn't drowned in pymalloc false positives.
# - --smc-check=all-non-file: the runtime JITs kernels into
# non-file-backed memory; without it valgrind may run stale
# translations of the generated code.
sudo apt-get update && sudo apt-get install -y valgrind
export PYTHONMALLOC=malloc
export NO_COLOR=1
# Test whether disabling the Intel CPU runtime's SIMD vectorizer
# avoids the out-of-bounds tail-lane store at its source. The
# over-provisioned, bounds-guard-masked work-items only have
# their stores leak through the vectorized code path; running
# scalar should honor the guard. If valgrind reports no "Invalid
# write" here (with no padding), this is a clean global fix.
# (CL_CONFIG_CPU_VECTORIZER_MODE=1 had no effect, so use the
# primary CL_CONFIG_USE_VECTORIZER switch instead.)
export CL_CONFIG_USE_VECTORIZER=False
valgrind \
--smc-check=all-non-file \
--leak-check=no --errors-for-leak-kinds=none \
--error-exitcode=1 \
python intel_crash_reproducer.py
examples3:
name: Examples Conda Py3
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: "Main Script"
run: |
export MPLBACKEND=Agg
USE_CONDA_BUILD=1
curl -L -O https://gitlab.tiker.net/inducer/ci-support/raw/main/build-py-project-and-run-examples.sh
. ./build-py-project-and-run-examples.sh
docs:
name: Documentation
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
-
uses: actions/setup-python@v6
with:
python-version: '3.x'
- name: "Main Script"
run: |
curl -L -O https://tiker.net/ci-support-v0
. ci-support-v0
build_py_project_in_conda_env
conda install graphviz
build_docs
downstream_tests:
strategy:
matrix:
downstream_project: [meshmode, grudge, mirgecom, mirgecom_examples]
fail-fast: false
name: Tests for downstream project ${{ matrix.downstream_project }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: "Main Script"
env:
DOWNSTREAM_PROJECT: ${{ matrix.downstream_project }}
run: |
curl -L -O https://tiker.net/ci-support-v0
. ./ci-support-v0
test_downstream "$DOWNSTREAM_PROJECT"
if [[ "$DOWNSTREAM_PROJECT" = "meshmode" ]]; then
python ../examples/simple-dg.py --lazy
fi
# vim: sw=4