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