xref: /tonic/.github/workflows/CI.yml (revision 31dbbcae)
1name: CI
2
3on:
4  push:
5    branches:
6    - master
7  pull_request: {}
8
9env:
10  PROTOC_VERSION: 3.23.4
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-check:
25    name: cargo-deny check
26    runs-on: ubuntu-latest
27    steps:
28    - uses: actions/checkout@v4
29    - uses: EmbarkStudios/cargo-deny-action@v1
30
31  codegen:
32    runs-on: ubuntu-latest
33    steps:
34    - uses: actions/checkout@v4
35    - uses: hecrj/setup-rust-action@v2
36    - name: Install protoc
37      uses: taiki-e/install-action@v2
38      with:
39        tool: protoc@${{ env.PROTOC_VERSION }}
40    - uses: Swatinem/rust-cache@v2
41    - run: cargo run --package codegen
42    - run: git diff --exit-code
43
44  udeps:
45    name: Check unused dependencies
46    runs-on: ${{ matrix.os }}
47    strategy:
48      matrix:
49        os: [ubuntu-latest, macOS-latest, windows-latest]
50        include:
51        - os: windows-latest
52          option: --exclude-features uds
53    steps:
54    - uses: actions/checkout@v4
55    - uses: dtolnay/rust-toolchain@master
56      with:
57        toolchain: nightly-2024-02-06
58    - uses: taiki-e/install-action@cargo-hack
59    - uses: taiki-e/install-action@cargo-udeps
60    - name: Install protoc
61      uses: taiki-e/install-action@v2
62      with:
63        tool: protoc@${{ env.PROTOC_VERSION }}
64    - uses: Swatinem/rust-cache@v2
65    - run: cargo hack udeps --workspace --each-feature ${{ matrix.option }}
66
67  check:
68    runs-on: ${{ matrix.os }}
69    strategy:
70      matrix:
71        os: [ubuntu-latest, macOS-latest, windows-latest]
72    steps:
73    - uses: actions/checkout@v4
74    - uses: hecrj/setup-rust-action@v2
75    - uses: taiki-e/install-action@cargo-hack
76    - name: Install protoc
77      uses: taiki-e/install-action@v2
78      with:
79        tool: protoc@${{ env.PROTOC_VERSION }}
80    - uses: Swatinem/rust-cache@v2
81    - name: Check features
82      run: cargo hack check --workspace --no-private --each-feature --no-dev-deps
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    - name: Install protoc
95      uses: taiki-e/install-action@v2
96      with:
97        tool: protoc@${{ env.PROTOC_VERSION }}
98    - uses: Swatinem/rust-cache@v2
99    - run: cargo check --workspace --all-targets --all-features
100    - run: cargo doc --no-deps --package tonic --package tonic-build --package tonic-health --package tonic-reflection --package tonic-types --package tonic-web
101      env:
102        RUSTDOCFLAGS: "-D warnings"
103
104  test:
105    runs-on: ${{ matrix.os }}
106    strategy:
107      matrix:
108        os: [ubuntu-latest, macOS-latest, windows-latest]
109    steps:
110    - uses: actions/checkout@v4
111    - uses: hecrj/setup-rust-action@v2
112    - name: Install protoc
113      uses: taiki-e/install-action@v2
114      with:
115        tool: protoc@${{ env.PROTOC_VERSION }}
116    - uses: Swatinem/rust-cache@v2
117    - run: cargo test --workspace --all-features
118      env:
119        QUICKCHECK_TESTS: 1000  # run a lot of quickcheck iterations
120
121  interop:
122    name: Interop Tests
123    runs-on: ${{ matrix.os }}
124    strategy:
125      matrix:
126        os: [ubuntu-latest, macOS-latest, windows-latest]
127    steps:
128    - uses: actions/checkout@v4
129    - uses: hecrj/setup-rust-action@v2
130    - name: Install protoc
131      uses: taiki-e/install-action@v2
132      with:
133        tool: protoc@${{ env.PROTOC_VERSION }}
134    - uses: Swatinem/rust-cache@v2
135    - name: Run interop tests
136      run: ./interop/test.sh
137      shell: bash
138    - name: Run interop tests with Rustls
139      run: ./interop/test.sh --use_tls tls_rustls
140      shell: bash
141