-
Notifications
You must be signed in to change notification settings - Fork 224
239 lines (200 loc) · 6.42 KB
/
ci.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
merge_group:
name: Continuous integration
env:
RUSTFLAGS: "--cfg CI_REDIS --cfg CI_POSTGRES -Dwarnings"
RUSTDOCFLAGS: "--cfg docsrs -Dwarnings"
RUST_BACKTRACE: short
CARGO_INCREMENTAL: 0
CARGO_NET_RETRY: 10
RUSTUP_MAX_RETRIES: 10
# When updating this, also update:
# - crates/teloxide-core/src/codegen.rs
# - rust-toolchain.toml
# - below in the test matrix
rust_nightly: nightly-2024-03-20
# When updating this, also update:
# - **/README.md
# - **/src/lib.rs
# - down below in a matrix
# - `Cargo.toml`
# - **/CHANGELOG.md
rust_msrv: 1.70.0
CI: 1
jobs:
# Depends on all action that are required for a "successful" CI run.
ci-pass:
name: CI succeeded
runs-on: ubuntu-latest
if: always()
needs:
- fmt
- test
- check-examples
- clippy
- doc
steps:
- name: Check whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}
fmt:
name: fmt
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust ${{ env.rust_nightly }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_nightly }}
components: rustfmt
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Check formatting
run: |
cargo fmt --all -- --check
test:
name: Test
runs-on: ubuntu-latest
services:
# Setup Postgres for testing PostgresStorage
postgres:
image: postgres
env:
POSTGRES_USER: teloxide
POSTGRES_PASSWORD: rewrite_it_in_rust
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
strategy:
matrix:
rust:
- stable
- beta
- nightly
- msrv
include:
- rust: stable
toolchain: stable
features: "--features full"
- rust: beta
toolchain: beta
features: "--features full"
- rust: nightly
toolchain: nightly-2024-03-20
features: "--features full nightly"
- rust: msrv
toolchain: 1.70.0
features: "--features full"
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust ${{ matrix.toolchain }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ matrix.toolchain }}
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
# Generally MSRV dump is not considered a breaking change in by the Rust community.
# Thus a minor or a patch version dump of a dependency of ours, can bump MSRV.
# (remember that `cargo` uses newest semver compatible versions by default)
#
# It's silly to bump MSRV every time minor dependency update does (note that this update can
# happen even after our crate is published; so users may need to downgrade crates in
# `Cargo.lock` independently of how we test our crates), so we downgrade their versions in
# MSRV CI specifically instead. This allows as to
# 1. Not update MSRV unless we really need to
# 2. Test newest (or at least newer) versions of crates in CI
#
# Example command: `cargo update -p atomic-write-file@0.1.3 --precise 0.1.2`
- name: Downgrade deps for MSRV
if: ${{ matrix.rust == 'msrv' }}
run: |
cargo update -p sqlx --precise 0.7.3
cargo update -p atomic-write-file --precise 0.1.2
exit 0
# NB. Don't test (build) examples so we can use non-msrv features in them (--tests/--doc)
- name: Compile
run: |
cargo +${{ matrix.toolchain }} test --tests --no-run --verbose ${{ matrix.features }}
- name: Setup redis
run: |
sudo apt install redis-server
redis-server --port 7777 > /dev/null &
redis-server --port 7778 > /dev/null &
redis-server --port 7779 > /dev/null &
- name: Install psql
run: |
sudo apt install postgresql-client -y
- name: Create PostgreSQL databases
run: |
psql -h localhost -U teloxide -c "CREATE DATABASE test_postgres_json;"
psql -h localhost -U teloxide -c "CREATE DATABASE test_postgres_bincode;"
psql -h localhost -U teloxide -c "CREATE DATABASE test_postgres_cbor;"
env:
PGPASSWORD: rewrite_it_in_rust
- name: Test unit & integration tests
run: |
cargo +${{ matrix.toolchain }} test --tests --verbose ${{ matrix.features }}
- name: Test documentation tests
if: ${{ matrix.rust != 'msrv' }}
run: |
cargo +${{ matrix.toolchain }} test --doc --verbose ${{ matrix.features }}
check-examples:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust stable
uses: dtolnay/rust-toolchain@master
with:
toolchain: stable
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: Check examples
run: |
cargo +stable check --examples --features full
# TODO: prolly move it to a separate step?
- name: Check with no default features
run: |
cargo +stable check --no-default-features
clippy:
name: Run linter
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust ${{ env.rust_nightly }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_nightly }}
components: clippy
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: clippy
run: |
cargo clippy --all-targets --features "full nightly"
doc:
name: check docs
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Rust ${{ env.rust_nightly }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.rust_nightly }}
- name: Cache Dependencies
uses: Swatinem/rust-cache@v2
- name: rustdoc
run: |
cargo docs # from .cargo/config.toml