ruint 1.10.1

Unsigned integer type with const-generic bit length
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:

env:
  CARGO_TERM_COLOR: always

jobs:
  accept:
    name: Accept
    runs-on: ubuntu-latest
    needs: [test, feature-checks, clippy, docs, fmt]
    steps:
      - name: Accept
        run: "true"

  test:
    name: Test ${{ matrix.rust }}
    runs-on: ubuntu-latest
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        rust: [stable, beta, nightly, 1.65] # MSRV
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - name: exclude nightly features
        if: ${{ matrix.rust }} != 'nightly'
        run: |
          sed -i 's/nightly = \[\]//g' Cargo.toml
          sed -i 's/generic_const_exprs = \["nightly"\]//g' Cargo.toml
      - uses: Swatinem/rust-cache@v2
      # Cargo doc test is not included in `--all-targets` so we call it separately.
      # See <https://github.com/rust-lang/cargo/issues/6669>
      # Cargo doc test also doesn't support `--no-run`, so we run it but
      # have it just print `--help`.
      - name: Build tests
        run: |
          cargo test --workspace --all-features --all-targets --no-run
          cargo test --workspace --all-features --doc -- --help
      - name: Run tests
        run: |
          cargo test --workspace --all-features --all-targets -- --nocapture
          cargo test --workspace --all-features --doc -- --nocapture

  feature-checks:
    name: Feature checks
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
      - uses: taiki-e/install-action@cargo-hack
      - uses: Swatinem/rust-cache@v2
      - name: cargo hack
        run: |
          cargo hack check \
          --feature-powerset --exclude-features nightly,generic_const_exprs \
          --depth 1

  codecov:
    # See <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/source-based-code-coverage.html>
    name: Coverage
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: llvm-tools-preview
      - uses: Swatinem/rust-cache@v2
      - uses: taiki-e/install-action@cargo-llvm-cov
      - name: Generate code coverage
        env:
          # Covered tests are slower, so reduce the test load. (We also shouldn't
          # depend too much on case generation for coverage).
          PROPTEST_CASES: 5
        run: |
          # Generate profiles, but do not merge them
          cargo llvm-cov --no-report --workspace --all-features --all-targets -- --nocapture
          cargo llvm-cov --no-report --workspace --all-features --doc -- --nocapture
      - name: Merge profiles
        run: cargo llvm-cov --no-run --lcov --output-path lcov.info
      - name: Submit to codecov.io
        uses: codecov/codecov-action@v3
        with:
          token: ${{ secrets.CODECOV_TOKEN }} # Optional for public repos
          files: lcov.info
          fail_ci_if_error: true
          verbose: true

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@clippy
      - run: cargo clippy --workspace --all-features
        env:
          RUSTFLAGS: -Dwarnings

  docs:
    name: Docs
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: rust-docs
      - run: cargo doc --workspace --all-features --no-deps --document-private-items
        env:
          RUSTDOCFLAGS: "--cfg doc_cfg -D warnings"

  fmt:
    name: Fmt
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt
      - run: cargo fmt --all --check

  cargo-deny:
    name: Cargo deny check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: EmbarkStudios/cargo-deny-action@v1
        with:
          command: check all