on: push: branches: [ master ] pull_request: branches: [ master ] merge_group: name: Continuous integration env: RUSTFLAGS: "--cfg CI_REDIS -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.68.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 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.68.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: 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