forked from anthropics/connect-rust
-
Notifications
You must be signed in to change notification settings - Fork 0
171 lines (159 loc) · 5.15 KB
/
ci.yml
File metadata and controls
171 lines (159 loc) · 5.15 KB
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
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: -Dwarnings
# Pinned protoc version for proto edition="2023" compatibility.
# Installed via arduino/setup-protoc, which caches across runs.
PROTOC_VERSION: "33.5"
jobs:
check:
name: Check
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: arduino/setup-protoc@v3
with:
version: ${{ env.PROTOC_VERSION }}
- run: cargo check --workspace --all-features --all-targets
msrv-check:
name: MSRV (1.88)
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
with:
toolchain: '1.88'
- uses: Swatinem/rust-cache@v2
- uses: arduino/setup-protoc@v3
with:
version: ${{ env.PROTOC_VERSION }}
- run: cargo check --workspace --all-features --all-targets
test:
name: Test
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: arduino/setup-protoc@v3
with:
version: ${{ env.PROTOC_VERSION }}
- run: cargo test --workspace --all-features
clippy:
name: Clippy
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- uses: Swatinem/rust-cache@v2
- uses: arduino/setup-protoc@v3
with:
version: ${{ env.PROTOC_VERSION }}
- run: cargo clippy --workspace --all-features --all-targets -- -D warnings
fmt:
name: Format
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt
- run: cargo +nightly fmt --all -- --check
doc:
name: Documentation
runs-on: ubuntu-latest
timeout-minutes: 10
env:
RUSTDOCFLAGS: -Dwarnings
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: arduino/setup-protoc@v3
with:
version: ${{ env.PROTOC_VERSION }}
- run: cargo doc --workspace --all-features --no-deps
# Integration test: start server, run client, verify RPCs work end-to-end
examples:
name: Examples
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
# No protoc needed: multiservice uses checked-in generated code
- run: ./examples/multiservice/test.sh
# Conformance tests: validate protocol compliance.
# Matrix runs server and client suites in parallel — the server suite
# (~20s) finishes in the shadow of the client suite (~90s), so the
# duplicated build is net-faster than running both serially.
conformance:
name: Conformance (${{ matrix.mode }})
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
include:
- mode: server
config: conformance/config/connect-only.yaml
bin: conformance-server
- mode: client
config: conformance/config/client-connect-only.yaml
bin: conformance-client
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Download conformance runner
run: ./conformance/scripts/download-conformance.sh
- name: Build conformance binary
run: cargo build --release -p connectrpc-conformance --bin ${{ matrix.bin }}
- name: Run conformance suite
run: |
./conformance/bin/connectconformance --mode ${{ matrix.mode }} \
--conf ${{ matrix.config }} \
-- ./target/release/${{ matrix.bin }}
# Verify wasm32 compilation and run browser integration tests
wasm:
name: Wasm
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@v2
- uses: arduino/setup-protoc@v3
with:
version: ${{ env.PROTOC_VERSION }}
- run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- run: cargo check -p connectrpc --no-default-features --target wasm32-unknown-unknown
- run: cargo check -p connectrpc --no-default-features --features gzip --target wasm32-unknown-unknown
- run: ./examples/wasm-client/test.sh
# Test with minimal feature set
minimal:
name: Minimal features
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- run: cargo check -p connectrpc --no-default-features
- run: cargo test -p connectrpc --no-default-features