Skip to content

Commit 43019bd

Browse files
committed
CI: add Miri
1 parent a0eb195 commit 43019bd

File tree

2 files changed

+53
-12
lines changed

2 files changed

+53
-12
lines changed

.github/workflows/CI-linux.yml

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,13 @@ jobs:
170170
eatmydata rustup component add rustfmt
171171
elif [ "${{ inputs.flavor }}" = "doc" ]; then
172172
/bin/true
173-
elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ]; then
173+
elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ] || [ "${{ inputs.flavor }}" = "Miri" ]; then
174+
if [ "${{ inputs.flavor }}" = "Miri" ]; then
175+
eatmydata rustup component add miri
176+
eatmydata rustup component add rust-src
177+
else
174178
eatmydata rustup component add clippy
179+
fi
175180
eatmydata apt install \
176181
clang-${{ inputs.distro-LLVM }} \
177182
lld-${{ inputs.distro-LLVM }} \
@@ -193,11 +198,10 @@ jobs:
193198
fi
194199
- name: Install necessary packages for cross-compilation
195200
timeout-minutes: 1
196-
if: (inputs.flavor == 'dev' || inputs.flavor == 'release') && inputs.builder-host != inputs.builder-target
201+
if: (inputs.flavor == 'dev' || inputs.flavor == 'release' || inputs.flavor == 'Miri') && inputs.builder-host != inputs.builder-target
197202
run: |
198203
set -xe
199204
. "$HOME/.cargo/env"
200-
201205
eatmydata apt install \
202206
gcc-${{ env.GCC_ARCH }}-linux-${{ env.ABI }} \
203207
libc6-dev-${{ env.LIBC6_ARCH }}-cross \
@@ -216,10 +220,14 @@ jobs:
216220
tee -a "$HOME/.cargo/config.toml" > /dev/null <<EOT
217221
[target.${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}]
218222
linker = "${LINKER}"
223+
EOT
224+
if [ "${{ inputs.flavor }}" != "Miri" ]; then
225+
tee -a "$HOME/.cargo/config.toml" > /dev/null <<EOT
219226
runner = "qemu-${{ env.LIBC6_ARCH }} -L /usr/${{ env.GCC_ARCH }}-linux-${{ env.ABI }}"
220227
EOT
228+
fi
221229
- name: Install necessary packages for code coverage
222-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
230+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
223231
timeout-minutes: 2
224232
run: |
225233
set -xe
@@ -267,39 +275,47 @@ jobs:
267275
overwrite: true
268276
- name: Run cargo check
269277
timeout-minutes: 1
270-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
278+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
271279
run: |
272280
set -xe
273281
. "$HOME/.cargo/env"
274282
cd "$SRC_DIR"
275283
cargo check --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
276284
- name: Run Clippy
277285
timeout-minutes: 1
278-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
286+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
279287
run: |
280288
set -xe
281289
. "$HOME/.cargo/env"
282290
cd "$SRC_DIR"
283291
cargo clippy --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
284292
- name: Build
285293
timeout-minutes: 1
286-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
294+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
287295
run: |
288296
set -xe
289297
. "$HOME/.cargo/env"
290298
cd "$SRC_DIR"
291299
cargo build --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
292300
- name: Run tests
293301
timeout-minutes: 1
294-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
302+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
295303
run: |
296304
set -xe
297305
. "$HOME/.cargo/env"
298306
cd "$SRC_DIR"
299307
cargo test --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
308+
- name: Run tests under Miri (nightly toolchain only)
309+
timeout-minutes: 60
310+
if: inputs.rust-toolchain-name == 'nightly' && inputs.flavor == 'Miri'
311+
run: |
312+
set -xe
313+
. "$HOME/.cargo/env"
314+
cd "$SRC_DIR"
315+
cargo miri test --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile dev
300316
- name: Run tests to collect code coverage
301317
timeout-minutes: 1
302-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
318+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
303319
env:
304320
RUSTFLAGS: "-C instrument-coverage"
305321
run: |
@@ -310,15 +326,15 @@ jobs:
310326
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
311327
- name: Aggregate code coverage
312328
timeout-minutes: 1
313-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
329+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
314330
run: |
315331
set -xe
316332
. "$HOME/.cargo/env"
317333
cd "$SRC_DIR"
318334
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
319335
- name: Upload coverage reports to Codecov
320336
timeout-minutes: 1
321-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
337+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri' && (inputs.builder-host == inputs.builder-target || (env.ENDIANNESS == 'big' && inputs.builder-target != 's390x')) && (github.event_name == 'pull_request' || env.CODECOV_TOKEN_EXISTS == true)
322338
uses: codecov/codecov-action@v5
323339
env:
324340
OS: ${{ inputs.os }}

.github/workflows/CI.yml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,31 @@ jobs:
6565
flavor: ${{ matrix.flavor }}
6666
secrets:
6767
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
68+
linux-miri:
69+
needs: [ linux-fast, windows-msys2-fast, macOS-fast ]
70+
strategy:
71+
fail-fast: false
72+
matrix:
73+
os: [ linux ]
74+
stack:
75+
- { runs-on: "ubuntu-latest", host: "x86_64", target: "x86_64" }
76+
- { runs-on: "ubuntu-latest", host: "x86_64", target: "s390x" }
77+
distro:
78+
- { image: "debian:trixie-slim", LLVM: 19 }
79+
rust-toolchain-name: [ nightly ]
80+
flavor: [ Miri ]
81+
uses: ./.github/workflows/CI-linux.yml
82+
with:
83+
os: ${{ matrix.os }}
84+
runs-on: ${{ matrix.stack.runs-on }}
85+
builder-host: ${{ matrix.stack.host }}
86+
builder-target: ${{ matrix.stack.target }}
87+
distro-image: ${{ matrix.distro.image }}
88+
distro-LLVM: ${{ matrix.distro.LLVM }}
89+
rust-toolchain-name: ${{ matrix.rust-toolchain-name }}
90+
flavor: ${{ matrix.flavor }}
91+
secrets:
92+
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
6893
windows-msys2-fast:
6994
strategy:
7095
fail-fast: false
@@ -112,7 +137,7 @@ jobs:
112137
secrets:
113138
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
114139
build-docs:
115-
needs: [ linux-fast, linux-cross, windows-msys2-fast, macOS-fast ]
140+
needs: [ linux-fast, linux-cross, linux-miri, windows-msys2-fast, macOS-fast ]
116141
uses: ./.github/workflows/CI-linux.yml
117142
with:
118143
os: linux

0 commit comments

Comments
 (0)