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