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