xref: /tonic/.github/workflows/CI.yml (revision dcaa6791)
1name: CI
2
3on:
4  push:
5    branches: [ "master" ]
6  pull_request: {}
7  merge_group:
8    branches: [ "master" ]
9
10env:
11  RUSTFLAGS: "-D warnings"
12
13jobs:
14
15  rustfmt:
16    runs-on: ubuntu-latest
17    steps:
18    - uses: actions/checkout@v4
19    - uses: hecrj/setup-rust-action@v2
20      with:
21        components: rustfmt
22    - run: cargo fmt --all --check
23
24  deny:
25    runs-on: ubuntu-latest
26    steps:
27    - uses: actions/checkout@v4
28    - uses: hecrj/setup-rust-action@v2
29    - uses: taiki-e/install-action@cargo-deny
30    - run: cargo deny check
31
32  clippy:
33    runs-on: ubuntu-latest
34    steps:
35    - uses: actions/checkout@v4
36    - uses: hecrj/setup-rust-action@v2
37      with:
38        components: clippy
39    - uses: taiki-e/install-action@protoc
40    - uses: Swatinem/rust-cache@v2
41    - run: cargo clippy --workspace --all-features --all-targets
42
43  codegen:
44    runs-on: ubuntu-latest
45    steps:
46    - uses: actions/checkout@v4
47    - uses: hecrj/setup-rust-action@v2
48    - uses: Swatinem/rust-cache@v2
49    - run: cargo run --package codegen
50    - run: git diff --exit-code
51
52  udeps:
53    runs-on: ubuntu-latest
54    steps:
55    - uses: actions/checkout@v4
56    - uses: dtolnay/rust-toolchain@master
57      with:
58        toolchain: nightly-2024-12-01
59    - uses: taiki-e/install-action@cargo-hack
60    - uses: taiki-e/install-action@cargo-udeps
61    - uses: taiki-e/install-action@protoc
62    - uses: Swatinem/rust-cache@v2
63    - run: cargo hack udeps --workspace --exclude-features=_tls-any,tls,tls-aws-lc,tls-ring --each-feature
64    - run: cargo udeps --package tonic --features tls-ring,transport
65    - run: cargo udeps --package tonic --features tls-ring,server
66    - run: cargo udeps --package tonic --features tls-ring,channel
67    - run: cargo udeps --package tonic --features tls-aws-lc,transport
68    - run: cargo udeps --package tonic --features tls-aws-lc,server
69    - run: cargo udeps --package tonic --features tls-aws-lc,channel
70
71  check:
72    runs-on: ${{ matrix.os }}
73    strategy:
74      matrix:
75        os: [ubuntu-latest, macOS-latest, windows-latest]
76    steps:
77    - uses: actions/checkout@v4
78    - uses: hecrj/setup-rust-action@v2
79    - uses: taiki-e/install-action@cargo-hack
80    - uses: taiki-e/install-action@protoc
81    - uses: Swatinem/rust-cache@v2
82    - name: Check features
83      run: cargo hack check --workspace --no-private --each-feature --no-dev-deps
84    - name: Check tonic feature powerset
85      run: cargo hack check --package tonic --feature-powerset --depth 2
86    - name: Check all targets
87      run: cargo check --workspace --all-targets --all-features
88
89  msrv:
90    runs-on: ubuntu-latest
91    steps:
92    - uses: actions/checkout@v4
93    - uses: hecrj/setup-rust-action@v2
94    - name: Resolve MSRV aware dependencies
95      run: cargo update
96      env:
97        CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
98    - name: Get MSRV from manifest file
99      id: msrv
100      run: echo "version=$(yq '.workspace.package.rust-version' Cargo.toml)" >> $GITHUB_OUTPUT
101    - uses: hecrj/setup-rust-action@v2
102      with:
103        rust-version: ${{ steps.msrv.outputs.version }}
104    - uses: taiki-e/install-action@cargo-no-dev-deps
105    - uses: Swatinem/rust-cache@v2
106    - run: cargo no-dev-deps --no-private check --all-features
107    - run: cargo no-dev-deps --no-private doc --no-deps --all-features
108      env:
109        RUSTDOCFLAGS: "-D warnings"
110
111  test:
112    runs-on: ${{ matrix.os }}
113    strategy:
114      matrix:
115        os: [ubuntu-latest, macOS-latest, windows-latest]
116    steps:
117    - uses: actions/checkout@v4
118    - uses: hecrj/setup-rust-action@v2
119    - uses: taiki-e/install-action@protoc
120    - uses: taiki-e/install-action@cargo-hack
121    - uses: taiki-e/install-action@cargo-nextest
122    - uses: Swatinem/rust-cache@v2
123    - run: cargo nextest run --workspace --all-features
124      env:
125        QUICKCHECK_TESTS: 1000  # run a lot of quickcheck iterations
126
127  doc-test:
128    runs-on: ubuntu-latest
129    steps:
130    - uses: actions/checkout@v4
131    - uses: hecrj/setup-rust-action@v2
132    - uses: taiki-e/install-action@cargo-hack
133    - uses: Swatinem/rust-cache@v2
134    - run: cargo hack --no-private test --doc --all-features
135
136  interop:
137    name: Interop Tests
138    runs-on: ${{ matrix.os }}
139    strategy:
140      matrix:
141        os: [ubuntu-latest, macOS-latest, windows-latest]
142    steps:
143    - uses: actions/checkout@v4
144    - uses: hecrj/setup-rust-action@v2
145    - uses: taiki-e/install-action@protoc
146    - uses: Swatinem/rust-cache@v2
147    - name: Run interop tests
148      run: ./interop/test.sh
149      shell: bash
150    - name: Run interop tests with Rustls
151      run: ./interop/test.sh --use_tls tls_rustls
152      shell: bash
153
154  semver:
155    runs-on: ubuntu-latest
156    steps:
157    - uses: actions/checkout@v4
158    - uses: obi1kenobi/cargo-semver-checks-action@v2
159      with:
160        feature-group: all-features
161
162  external-types:
163    runs-on: ubuntu-latest
164    steps:
165    - uses: actions/checkout@v4
166    - uses: dtolnay/rust-toolchain@master
167      with:
168        toolchain: nightly-2024-06-30
169    - name: Install cargo-check-external-types
170      uses: taiki-e/cache-cargo-install-action@v2
171      with:
172        tool: [email protected]
173    - uses: taiki-e/install-action@cargo-hack
174    - uses: Swatinem/rust-cache@v2
175    - run: cargo hack --no-private check-external-types
176