-
Notifications
You must be signed in to change notification settings - Fork 106
132 lines (112 loc) · 4.38 KB
/
ci-on-pr-rustfmt-test-clippy-build.yml
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
name: ci
on:
pull_request:
paths-ignore:
- "**.md"
- "doc/**"
workflow_dispatch:
defaults:
run:
shell: bash
env:
RUST_BACKTRACE: 1
CARGO_TERM_COLOR: always
jobs:
rustfmt:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/[email protected]
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler libssl-dev
- name: Install Rust nightly
run: rustup toolchain install nightly
- name: Show active toolchain
run: rustup show active-toolchain
- name: Add nightly rustfmt
run: rustup component add rustfmt --toolchain nightly-x86_64-unknown-linux-gnu
- name: Cache rust toolchain and dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/
target/
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-rust-
- name: Rustfmt
run: cargo +nightly fmt --all -- --check
clippy:
runs-on: ubuntu-latest
needs: rustfmt
steps:
- name: Checkout repository
uses: actions/[email protected]
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y protobuf-compiler libssl-dev
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.cargo/
target/
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-rust-
- name: Cargo Clippy
run: rustup component add rust-src && cargo clippy --all --no-deps --all-targets --features=runtime-benchmarks -- -D warnings
check-runtime-benchmarks:
runs-on: ubuntu-latest
needs: rustfmt
strategy:
matrix:
feature_flag: [true, false] # Two runs: with and without the 'runtime-benchmarks' feature
steps:
- name: Checkout repository
uses: actions/[email protected]
- name: Install dependencies
run: sudo apt-get update && sudo apt-get install -y jq protobuf-compiler libssl-dev
- name: Cache rust toolchain and dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/
target/
key: ${{ runner.os }}-rust-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-rust-
- name: Determine packages to test
id: set_packages
run: |
echo "Checking for 'runtime-benchmarks' feature in Cargo.toml files..."
packages_with_feature=()
packages_without_feature=()
for cargo_file in $(find . -name "Cargo.toml"); do
if grep -q "\[features\]" "$cargo_file"; then
if grep -q "runtime-benchmarks" "$cargo_file"; then
package_name=$(basename $(dirname "$cargo_file"))
packages_with_feature+=("$package_name")
else
package_name=$(basename $(dirname "$cargo_file"))
packages_without_feature+=("$package_name")
fi
else
package_name=$(basename $(dirname "$cargo_file"))
packages_without_feature+=("$package_name")
fi
done
# Output lists as JSON arrays
echo "::set-output name=packages_with_feature::$(printf '["%s"]' "${packages_with_feature[@]}" | jq -R . | jq -s .)"
echo "::set-output name=packages_without_feature::$(printf '["%s"]' "${packages_without_feature[@]}" | jq -R . | jq -s .)"
- name: Run tests
run: |
if [[ ${{ matrix.feature_flag }} == "true" ]]; then
# Test with runtime-benchmarks feature
for package in ${{ fromJson(steps.set_packages.outputs.packages_with_feature) }}; do
echo "Running tests for package: $package with 'runtime-benchmarks' feature"
cargo test --release --package "$package" --features "runtime-benchmarks" --no-fail-fast
done
else
# Test without runtime-benchmarks feature
for package in ${{ fromJson(steps.set_packages.outputs.packages_without_feature) }}; do
echo "Running tests for package: $package without 'runtime-benchmarks' feature"
cargo test --release --package "$package" --no-fail-fast
done
fi