grapevine 1.1.0

A modern, asynchronous peer-to-peer gossip protocol library and application
Documentation
name: CI

on:
    push:
        branches: [master, main]
    pull_request:
        branches: [master, main]

permissions:
    contents: read

concurrency:
    group: ci-${{ github.workflow }}-${{ github.ref }}
    cancel-in-progress: true

env:
    RUST_BACKTRACE: 1
    CARGO_TERM_COLOR: always
    CARGO_NET_GIT_FETCH_WITH_CLI: true

jobs:
    build:
        name: Build
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@stable
            - uses: Swatinem/rust-cache@v2
            - run: cargo build --release --all-features --all-targets --locked

    test:
        name: Test Suite
        runs-on: ${{ matrix.os }}
        strategy:
            matrix:
                os: [ubuntu-latest, macos-latest, windows-latest]
                rust: [stable, nightly]
            fail-fast: false
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@master
              with:
                  toolchain: ${{ matrix.rust }}
            - uses: Swatinem/rust-cache@v2
            - run: cargo test --all-features --all-targets --locked

    msrv:
        name: MSRV (1.88)
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@master
              with:
                  toolchain: "1.88"
            - uses: Swatinem/rust-cache@v2
            - run: cargo check --all-features --locked

    fmt:
        name: Rustfmt
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@nightly
              with:
                  components: rustfmt
            - run: cargo +nightly fmt --all -- --check

    clippy:
        name: Clippy
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@stable
              with:
                  components: clippy
            - uses: Swatinem/rust-cache@v2
            - run: cargo clippy --all-features --all-targets --locked -- -D warnings

    doc:
        name: Documentation
        runs-on: ubuntu-latest
        steps:
            - uses: actions/checkout@v4
            - uses: dtolnay/rust-toolchain@stable
            - uses: Swatinem/rust-cache@v2
            - run: cargo doc --all-features --no-deps --document-private-items --locked
              env:
                  RUSTDOCFLAGS: -D warnings

    ci-success:
        name: CI Success
        if: always()
        needs: [build, test, msrv, fmt, clippy, doc]
        runs-on: ubuntu-latest
        steps:
            - name: Fail if any dependency failed or was cancelled
              if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}
              run: exit 1
            - run: echo "All CI jobs passed."