Skip to content

Commit 8836716

Browse files
committed
CI: add Miri
1 parent a0eb195 commit 8836716

File tree

2 files changed

+57
-13
lines changed

2 files changed

+57
-13
lines changed

.github/workflows/CI-linux.yml

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -166,12 +166,18 @@ jobs:
166166
. "$HOME/.cargo/env"
167167
eatmydata rustup toolchain install ${{ inputs.rust-toolchain-name }} --allow-downgrade --profile minimal
168168
eatmydata rustup default ${{ inputs.rust-toolchain-name }}
169+
eatmydata rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}
169170
if [ "${{ inputs.flavor }}" = "RustFmt" ]; then
170171
eatmydata rustup component add rustfmt
171172
elif [ "${{ inputs.flavor }}" = "doc" ]; then
172173
/bin/true
173-
elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ]; then
174+
elif [ "${{ inputs.flavor }}" = "dev" ] || [ "${{ inputs.flavor }}" = "release" ] || [ "${{ inputs.flavor }}" = "Miri" ]; then
175+
if [ "${{ inputs.flavor }}" = "Miri" ]; then
176+
eatmydata rustup component add miri
177+
eatmydata rustup component add rust-src
178+
else
174179
eatmydata rustup component add clippy
180+
fi
175181
eatmydata apt install \
176182
clang-${{ inputs.distro-LLVM }} \
177183
lld-${{ inputs.distro-LLVM }} \
@@ -191,13 +197,12 @@ jobs:
191197
else
192198
exit 1
193199
fi
194-
- name: Install necessary packages for cross-compilation
200+
- name: Install necessary system packages for cross-compilation
195201
timeout-minutes: 1
196202
if: (inputs.flavor == 'dev' || inputs.flavor == 'release') && inputs.builder-host != inputs.builder-target
197203
run: |
198204
set -xe
199205
. "$HOME/.cargo/env"
200-
201206
eatmydata apt install \
202207
gcc-${{ env.GCC_ARCH }}-linux-${{ env.ABI }} \
203208
libc6-dev-${{ env.LIBC6_ARCH }}-cross \
@@ -207,7 +212,6 @@ jobs:
207212
ln -s /usr/local/bin/clang /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang
208213
ln -s /usr/local/bin/clang++ /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang++
209214
ln -s /usr/local/bin/ld /usr/local/bin/${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-ld
210-
rustup target add ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}
211215
LINKER="${{ inputs.builder-target }}-unknown-linux-${{ env.ABI }}-clang"
212216
if [ "${{ inputs.builder-target }}" = "powerpc64" ]; then
213217
# LLD/clang does not support powerpc64 ELFv1 ABI
@@ -219,13 +223,20 @@ jobs:
219223
runner = "qemu-${{ env.LIBC6_ARCH }} -L /usr/${{ env.GCC_ARCH }}-linux-${{ env.ABI }}"
220224
EOT
221225
- 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)
226+
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)
223227
timeout-minutes: 2
224228
run: |
225229
set -xe
226230
. "$HOME/.cargo/env"
227231
eatmydata rustup component add llvm-tools-preview
228232
eatmydata cargo install cargo-llvm-cov
233+
- name: Install cargo-nextest
234+
if: inputs.flavor == 'Miri'
235+
timeout-minutes: 3
236+
run: |
237+
set -xe
238+
. "$HOME/.cargo/env"
239+
eatmydata cargo install cargo-nextest
229240
- name: Fetch/Checkout RawSpeed.RS git repo
230241
timeout-minutes: 1
231242
uses: actions/checkout@v4
@@ -267,39 +278,47 @@ jobs:
267278
overwrite: true
268279
- name: Run cargo check
269280
timeout-minutes: 1
270-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
281+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
271282
run: |
272283
set -xe
273284
. "$HOME/.cargo/env"
274285
cd "$SRC_DIR"
275286
cargo check --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
276287
- name: Run Clippy
277288
timeout-minutes: 1
278-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
289+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
279290
run: |
280291
set -xe
281292
. "$HOME/.cargo/env"
282293
cd "$SRC_DIR"
283294
cargo clippy --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }} --all-targets --all-features
284295
- name: Build
285296
timeout-minutes: 1
286-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
297+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
287298
run: |
288299
set -xe
289300
. "$HOME/.cargo/env"
290301
cd "$SRC_DIR"
291302
cargo build --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
292303
- name: Run tests
293304
timeout-minutes: 1
294-
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc'
305+
if: inputs.flavor != 'RustFmt' && inputs.flavor != 'doc' && inputs.flavor != 'Miri'
295306
run: |
296307
set -xe
297308
. "$HOME/.cargo/env"
298309
cd "$SRC_DIR"
299310
cargo test --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
311+
- name: Run tests under Miri (nightly toolchain only)
312+
timeout-minutes: 60
313+
if: inputs.rust-toolchain-name == 'nightly' && inputs.flavor == 'Miri'
314+
run: |
315+
set -xe
316+
. "$HOME/.cargo/env"
317+
cd "$SRC_DIR"
318+
cargo miri nextest run --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }}
300319
- name: Run tests to collect code coverage
301320
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)
321+
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)
303322
env:
304323
RUSTFLAGS: "-C instrument-coverage"
305324
run: |
@@ -310,15 +329,15 @@ jobs:
310329
cargo llvm-cov --no-report --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
311330
- name: Aggregate code coverage
312331
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)
332+
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)
314333
run: |
315334
set -xe
316335
. "$HOME/.cargo/env"
317336
cd "$SRC_DIR"
318337
cargo llvm-cov report --codecov --output-path $SRC_DIR/codecov.json --target ${{ env.RUST_TARGET }}-unknown-linux-${{ env.ABI }} --profile ${{ inputs.flavor }}
319338
- name: Upload coverage reports to Codecov
320339
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)
340+
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)
322341
uses: codecov/codecov-action@v5
323342
env:
324343
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)