Repository navigation
222 lines (198 loc) · 5.55 KB
/
Copy pathci.yml
File metadata and controls
222 lines (198 loc) · 5.55 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
215
216
217
218
219
220
221
222
name: CI
on:
push:
branches:
- main
pull_request:
env:
CARGO_TERM_COLOR: always
CARGO_REGISTRIES_MY_REGISTRY_INDEX: https://github.com/rust-lang/crates.io-index
CARGO_TARGET_DIR: ${{ github.workspace }}/../target
jobs:
# 1
check:
name: Rust project check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run cargo test
run: make test
- name: Run cargo test through the async path
run: make test-async
# 2
fmt:
name: Rust fmt
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- uses: Swatinem/rust-cache@v2
- name: Run cargo fmt
run: make fmt
# 2.1
clippy:
name: Rust clippy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
# `--all-features` builds the pyo3 bindings, which need a supported Python.
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: Swatinem/rust-cache@v2
- name: Run cargo clippy
run: make clippy
# 3
e2e:
name: Rust e2e sqllogictest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run sqllogictest suite
run: make test-slt
- name: Run sqllogictest suite through the async path
run: make test-slt-async
# 3.1
sqlite-slt:
name: SQLite sqllogictest corpus
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run SQLite sqllogictest corpus
run: make test-slt-sqlite
# 4
coverage:
name: Rust coverage
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: llvm-tools-preview
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@grcov
- name: Generate Codecov report
run: make codecov
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
files: lcov.info
flags: rust
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}
# 5
wasm-tests:
name: Wasm cargo tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@wasm-pack
- name: Run wasm-bindgen tests (wasm32 target)
run: make test-wasm
# 6
wasm-examples:
name: Wasm examples (nodejs)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@wasm-pack
- name: Build wasm package
run: make wasm-build
- name: Run wasm example scripts
run: make wasm-examples
# 7
native-examples:
name: Native examples
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run native examples
run: make native-examples
# 8
python-tests:
name: Python bindings tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- uses: Swatinem/rust-cache@v2
- name: Run python binding tests
run: PYO3_PYTHON="$(which python)" make test-python
# 9
fuzz:
name: Fuzz smoke test (sql_exec)
runs-on: ubuntu-latest
env:
# The fuzz crate is a standalone workspace; keep its build out of the shared target dir.
CARGO_TARGET_DIR: ${{ github.workspace }}/fuzz/target
steps:
- uses: actions/checkout@v4
# Pinned; keep in sync with FUZZ_TOOLCHAIN in the Makefile.
- uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2026-10-04
- uses: Swatinem/rust-cache@v2
with:
workspaces: fuzz
- uses: taiki-e/install-action@v2
with:
tool: cargo-fuzz
- name: Run sql_exec fuzzer
run: make fuzz FUZZ_TARGET=sql_exec FUZZ_TIME=150
- name: Run sql_gen fuzzer
run: make fuzz FUZZ_TARGET=sql_gen FUZZ_TIME=150
- name: Upload crash artifacts
if: failure()
uses: actions/upload-artifact@v4
with:
name: fuzz-artifacts
path: fuzz/artifacts
# 10
miri:
name: Miri (unsafe code UB check)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2026-10-04
components: miri, rust-src
- uses: Swatinem/rust-cache@v2
with:
key: miri
- name: Set up Miri sysroot
run: cargo +nightly-2026-10-04 miri setup
- name: Run Miri tests
run: make miri