-
Notifications
You must be signed in to change notification settings - Fork 8
212 lines (180 loc) · 6.51 KB
/
rust.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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
name: Rust
on:
pull_request:
push:
branches:
- main
- dev/**
merge_group:
defaults:
run:
shell: bash
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: hashintel
TURBO_REMOTE_ONLY: true
jobs:
setup:
name: setup
runs-on: ubuntu-latest
outputs:
lint: ${{ steps.crates.outputs.lint }}
test: ${{ steps.crates.outputs.test }}
samples: ${{ steps.samples.outputs.samples }}
steps:
- name: Checkout source code
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
with:
fetch-depth: 2
- name: Setup CI
uses: ./.github/actions/setup-rust-ci
- name: Find changed crates
id: crates
run: |
export GITHUB_OUTPUT_FILE_PATH=$(mktemp)
python .github/scripts/rust/setup.py
cat $GITHUB_OUTPUT_FILE_PATH >> $GITHUB_OUTPUT
- name: Determine samples
id: samples
run: |
if [[ ${{ github.event_name }} = pull_request ]]; then
echo "samples=1" >> $GITHUB_OUTPUT
else
echo "samples=10" >> $GITHUB_OUTPUT
fi
lint:
name: lint
needs: setup
if: needs.setup.outputs.lint != '{}'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.setup.outputs.lint) }}
steps:
- name: Checkout source code
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
- name: Install Rust toolchain
uses: ./.github/actions/install-rust-toolchain
with:
toolchain: ${{ matrix.toolchain }}
working-directory: ${{ matrix.directory }}
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@e207df5d269b42b69c8bc5101da26f7d31feddb4 # v2.6.2
with:
workspaces: ${{ matrix.directory }}
save-if: ${{ !startsWith(github.ref, 'refs/heads/gh-readonly-queue') }}
cache-all-crates: true
- name: Install tools
uses: taiki-e/install-action@cc5a5c56a296ea597e6ea38f551f25dee8be1225 # v2.17.7
with:
- name: Check formatting
working-directory: ${{ matrix.directory }}
run: cargo fmt --all --check
- name: Check clippy
working-directory: ${{ matrix.directory }}
if: always()
run: |
cargo clippy --workspace --all-features --all-targets --no-deps --message-format=json \
| clippy-sarif \
| jq '.runs[].results |= unique' \
| tee clippy.sarif \
| sarif-fmt
jq -e '.runs[].results == []' clippy.sarif> /dev/null
- name: Process SARIF file
working-directory: ${{ matrix.directory }}
if: always()
run: |
tmp=$(mktemp)
jq --arg pwd "${{ matrix.directory }}" '.runs[].results[].locations[].physicalLocation.artifactLocation.uri |= $pwd + "/" + .' clippy.sarif > "$tmp"
mv "$tmp" clippy.sarif
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@00e563ead9f72a8461b24876bee2d0c2e8bd2ee8 # v2.21.5
if: always()
with:
sarif_file: ${{ matrix.directory }}/clippy.sarif
category: ${{ matrix.name }}
- name: Check public documentation
working-directory: ${{ matrix.directory }}
if: always()
env:
RUSTDOCFLAGS: "--check -Z unstable-options -D warnings"
run: cargo doc --workspace --all-features --no-deps
- name: Check private documentation
working-directory: ${{ matrix.directory }}
if: always()
env:
RUSTDOCFLAGS: "--check -Z unstable-options -D warnings"
run: cargo doc --workspace --all-features --no-deps --document-private-items
- name: Ensure empty git diff
run: git --no-pager diff --exit-code --color
test:
name: test
needs: setup
if: always() && needs.setup.outputs.test != '{}'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.setup.outputs.test) }}
env:
OUTPUT_DIRECTORY: test-results
RUST_BACKTRACE: 1
PROFILE: ${{ matrix.profile }}
steps:
- name: Checkout source code
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0
- name: Install Rust toolchain
uses: ./.github/actions/install-rust-toolchain
with:
toolchain: ${{ matrix.toolchain }}
working-directory: ${{ matrix.directory }}
- name: Cache Rust dependencies
uses: Swatinem/rust-cache@e207df5d269b42b69c8bc5101da26f7d31feddb4 # v2.6.2
with:
workspaces: ${{ matrix.directory }}
key: ${{ matrix.profile }}
save-if: ${{ !startsWith(github.ref, 'refs/heads/gh-readonly-queue') }}
cache-all-crates: true
- name: Install tools
uses: taiki-e/install-action@cc5a5c56a296ea597e6ea38f551f25dee8be1225 # v2.17.7
with:
tool: [email protected]
- name: Install Python
if: matrix.directory == 'apps/sim-engine'
uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
with:
python-version: "3.10"
- name: Prepare tests
if: matrix.directory == 'apps/sim-engine'
working-directory: ${{ matrix.directory }}
run: |
cargo build --profile ${{ matrix.profile }} -p memory
bash lib/execution/src/runner/python/setup.sh python3.10
- name: Run tests
working-directory: ${{ matrix.directory }}
run: cargo nextest run --cargo-profile ${{ matrix.profile }} --workspace --all-features
- name: Run miri
if: ${{ startsWith(matrix.toolchain, 'nightly') }}
working-directory: ${{ matrix.directory }}
run: cargo miri test --workspace --all-features --all-targets --no-fail-fast
- name: Ensure empty git diff
run: git --no-pager diff --exit-code --color
merging-enabled:
name: Merging enabled
needs: [setup, lint, test]
if: always()
runs-on: ubuntu-latest
steps:
- name: check setup
run: |
[[ ${{ needs.setup.result }} = success ]]
- name: check lint
run: |
[[ ${{ needs.lint.result }} =~ success|skipped ]]
- name: check test
run: |
[[ ${{ needs.test.result }} =~ success|skipped ]]