Skip to content

Commit 11e1cf7

Browse files
committed
[eclipse-iceoryx#60] integrate miri in ci with an allow list
1 parent 6d25b61 commit 11e1cf7

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

.github/workflows/miri-check.yml

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: Miri
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main, release* ]
8+
9+
jobs:
10+
miri:
11+
name: "Miri"
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
- name: Install Miri
16+
run: |
17+
rustup toolchain install nightly --component miri
18+
rustup override set nightly
19+
cargo miri setup
20+
- name: Test with Miri
21+
run: ./internal/scripts/ci_run_miri.sh

.miri_allowlist

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# .miri_allowlist use hash character to lead a comment
2+
# each line will be treated as a valid relative path to enter and run 'cargo miri test',
3+
# if it contains some changed files(added, copied and modified, deletion is excluded) in the PR.
4+
#
5+
# note that each line should end up with a newline character,
6+
# otherwise the ci shell will skip the last line
7+
iceoryx2-bb/testing
8+
# this line is put here to ensure each file path contains a newline char, don't remove it

internal/scripts/ci_run_miri.sh

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Copyright (c) 2024 Contributors to the Eclipse Foundation
2+
#
3+
# See the NOTICE file(s) distributed with this work for additional
4+
# information regarding copyright ownership.
5+
#
6+
# This program and the accompanying materials are made available under the
7+
# terms of the Apache Software License 2.0 which is available at
8+
# https://www.apache.org/licenses/LICENSE-2.0, or the MIT license
9+
# which is available at https://opensource.org/licenses/MIT.
10+
#
11+
# SPDX-License-Identifier: Apache-2.0 OR MIT
12+
13+
filename=".miri_allowlist"
14+
while IFS= read -r line; do
15+
if [[ "$line" == \#* ]]; then
16+
continue
17+
fi
18+
19+
20+
# set contains all changed files comparing to the $TARGET_BRANCH_COMMIT
21+
changes=$(git --no-pager diff --diff-filter=ACM --name-only $TARGET_BRANCH_COMMIT)
22+
if [[ -z $changes ]]; then
23+
# when it's not a pull request,
24+
# the $TARGET_BRANCH_COMMIT will be empty so changes is empty as well,
25+
# skip running 'cargo miri test' as it doesn't make sense.
26+
exit 0
27+
fi
28+
29+
if echo "$changes" | grep -q "$line"; then
30+
cd "$line" || { echo "Failed to change directory to $line"; exit 1; }
31+
echo "Run cargo miri test under: $(pwd)"
32+
cargo miri test
33+
cd -
34+
else
35+
echo "skip $line because the PR doesn't touch its files"
36+
fi
37+
done < "$filename"

0 commit comments

Comments
 (0)