teloxide 0.11.0

An elegant Telegram bots framework for Rust
Documentation
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master, dev ]

name: Continuous integration

env:
  RUSTFLAGS: "--cfg CI_REDIS -Dwarnings"
  RUSTDOCFLAGS: -Dwarnings
  RUST_BACKTRACE: short

  CARGO_INCREMENTAL: 0
  CARGO_NET_RETRY: 10
  RUSTUP_MAX_RETRIES: 10

  rust_nightly: nightly-2022-09-01
  # When updating this, also update:
  # - README.md
  # - src/lib.rs
  # - down below in a matrix
  rust_msrv: 1.64.0

jobs:
  # Depends on all action that are required for a "successful" CI run.
  ci-pass:
    name: CI succeeded
    runs-on: ubuntu-latest

    needs:
      - fmt
      - test
      - check-examples
      - clippy
      - doc

    steps:
      - run: exit 0

  fmt:
    name: fmt
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Rust ${{ env.rust_nightly }}
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ env.rust_nightly }}
          override: true
          components: rustfmt

      - name: Cache Dependencies
        uses: Swatinem/rust-cache@v1

      - name: Check formatting
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --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-2022-09-01
            features: "--all-features"
          - rust: msrv
            toolchain: 1.64.0
            features: "--features full"

    steps:      
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Rust ${{ matrix.toolchain }}
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ matrix.toolchain }}
          override: true

      - name: Cache Dependencies
        uses: Swatinem/rust-cache@v1

      # NB. Don't test (build) examples so we can use non-msrv features in them (--tests/--doc)
      - name: Compile 
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --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 
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --tests --verbose ${{ matrix.features }}
          
      - name: Test documentation tests
        if: ${{ matrix.rust != 'msrv' }}
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --doc --verbose ${{ matrix.features }}

  check-examples:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Rust stable
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Cache Dependencies
        uses: Swatinem/rust-cache@v1

      - name: Check examples
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --examples --features full

  clippy:
    name: Run linter
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Rust ${{ env.rust_nightly }}
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ env.rust_nightly }}
          override: true
          components: clippy

      - name: Cache Dependencies
        uses: Swatinem/rust-cache@v1

      - name: clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --all-targets --all-features

  doc:
    name: check docs
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Install Rust ${{ env.rust_nightly }}
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: ${{ env.rust_nightly }}
          override: true

      - name: Cache Dependencies
        uses: Swatinem/rust-cache@v1

      - name: rustdoc
        uses: actions-rs/cargo@v1
        with:
          command: docs # from .cargo/config.toml