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