-
Notifications
You must be signed in to change notification settings - Fork 106
134 lines (113 loc) · 4.46 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
133
134
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/checkout@v4.1.1
- 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/checkout@v4.1.1
- 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
outputs:
packages_with_feature: ${{ steps.set_output_with.outputs.packages_with_feature }}
packages_without_feature: ${{ steps.set_output_without.outputs.packages_without_feature }}
steps:
- name: Checkout repository
uses: actions/checkout@v4.1.1
- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq
- name: Check for runtime-benchmarks feature in packages
id: set_output_with
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
echo "Packages with runtime-benchmarks feature: ${packages_with_feature[*]}"
echo "Packages without runtime-benchmarks feature: ${packages_without_feature[*]}"
# Set outputs 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 .)"
test_with_runtime_benchmarks:
runs-on: ubuntu-latest
needs: check-runtime-benchmarks
if: needs.check-runtime-benchmarks.outputs.packages_with_feature != '[]'
strategy:
matrix:
package: ${{ fromJson(needs.check-runtime-benchmarks.outputs.packages_with_feature) }}
steps:
- name: Run tests with runtime-benchmarks
run: |
cargo test --release --package "${{ matrix.package }}" --features "runtime-benchmarks" --no-fail-fast
test_without_runtime_benchmarks:
runs-on: ubuntu-latest
needs: check-runtime-benchmarks
if: needs.check-runtime-benchmarks.outputs.packages_without_feature != '[]'
strategy:
matrix:
package: ${{ fromJson(needs.check-runtime-benchmarks.outputs.packages_without_feature) }}
steps:
- name: Run tests without runtime-benchmarks
run: |
cargo test --release --package "${{ matrix.package }}" --no-fail-fast