-
Notifications
You must be signed in to change notification settings - Fork 95
141 lines (127 loc) · 4.7 KB
/
extension-tests.cuda.yml
File metadata and controls
141 lines (127 loc) · 4.7 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
name: Extension Tests (CUDA)
on:
workflow_call:
push:
branches: ["main"]
pull_request:
branches: ["**"]
paths:
# - "crates/circuits/**"
# - "crates/vm/**"
# - "crates/toolchain/**"
- "extensions/**"
# - "Cargo.toml"
- ".github/workflows/extension-tests.cuda.yml"
workflow_dispatch:
inputs:
machine_type:
description: "Runner machine type (e.g. test-gpu-nvidia/cpu=8+32)"
required: false
default: test-gpu-nvidia/family=g6+g6e
concurrency:
group: ${{ github.workflow_ref }}-extension-tests-cuda-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
OPENVM_FAST_TEST: "1"
OPENVM_SKIP_DEBUG: "1"
jobs:
extension-tests-cuda:
strategy:
matrix:
extensions: # group extensions on the same runner based on test time
- "rv32im"
- "keccak256 sha256 bigint algebra ecc pairing"
runs-on:
- runs-on=${{ github.run_id }}-extension-tests-cuda-${{ github.run_attempt }}-${{ strategy.job-index }}/runner=${{ github.event_name == 'workflow_dispatch' && github.event.inputs.machine_type || 'test-gpu-nvidia/family=g6.*+g6e' }}
steps:
- uses: runs-on/action@v2
- uses: actions/checkout@v5
- name: Load SSH key
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: |
${{ secrets.GH_ACTIONS_DEPLOY_PRIVATE_KEY }}
- uses: dorny/paths-filter@v3
id: filter
with:
filters: |
common:
- "crates/circuits/**"
- "crates/vm/**"
- "crates/toolchain/**"
- ".github/workflows/extension-tests.cuda.yml"
rv32im:
- "extensions/rv32im/**"
keccak256:
- "extensions/keccak256/**"
sha256:
- "extensions/sha256/**"
bigint:
- "extensions/bigint/**"
algebra:
- "extensions/algebra/**"
ecc:
- "extensions/ecc/**"
pairing:
- "extensions/pairing/**"
- name: Skip if no changes
env:
FILTER_OUTPUTS: ${{ toJSON(steps.filter.outputs) }}
run: |
# Check if common files changed
COMMON_CHANGED=$(echo $FILTER_OUTPUTS | jq -r .common)
# Check if any extension in the current matrix group changed
ANY_EXT_CHANGED=false
for ext in ${{ matrix.extensions }}; do
ext_changed=$(echo $FILTER_OUTPUTS | jq -r .$ext)
if [[ "$ext_changed" == "true" ]]; then
ANY_EXT_CHANGED=true
break
fi
done
# Skip if neither common nor any extension in this matrix group changed
if [[ "$COMMON_CHANGED" != "true" && "$ANY_EXT_CHANGED" != "true" ]]; then
echo "No relevant changes for extensions [${{ matrix.extensions }}], skipping tests."
exit 0
fi
- uses: dtolnay/rust-toolchain@stable
env:
RUSTUP_PERMIT_COPY_RENAME: "1"
- uses: ./.github/actions/rust-cache-cuda
with:
cache-on-failure: true
- uses: taiki-e/install-action@nextest
- name: Check CUDA status and set environment variables
run: |
nvcc --version
echo "NEXTEST_ENV=CUDA_OPT_LEVEL=3" >> $GITHUB_ENV
echo "FEATURE_ARGS=--features=cuda" >> $GITHUB_ENV
echo "VPMM_PAGES=1" >> $GITHUB_ENV
- name: Run extension tests
env:
FILTER_OUTPUTS: ${{ toJSON(steps.filter.outputs) }}
run: |
COMMON_CHANGED=$(echo $FILTER_OUTPUTS | jq -r .common)
for ext in ${{ matrix.extensions }}; do
ext_changed=$(echo $FILTER_OUTPUTS | jq -r .$ext)
if [[ "$COMMON_CHANGED" == "true" || "$ext_changed" == "true" ]]; then
echo "::group::Running tests for $ext"
# Run circuit tests
if [ -d "extensions/$ext/circuit" ]; then
pushd extensions/$ext/circuit
${{ env.NEXTEST_ENV }} cargo nextest run cuda ${{ env.FEATURE_ARGS }} --features=touchemall --profile=heavy --no-tests=pass
popd
fi
# Run integration tests
if [ -d "extensions/$ext/tests" ]; then
pushd extensions/$ext/tests
rustup component add rust-src --toolchain nightly-2025-08-02
${{ env.NEXTEST_ENV }} cargo nextest run ${{ env.FEATURE_ARGS }} --profile=heavy --no-tests=pass
popd
fi
echo "::endgroup::"
else
echo "Skipping tests for $ext as no relevant files changed."
fi
done