libp2p 0.41.0

Peer-to-peer networking library
Documentation
name: Continuous integration

on:
  pull_request:
  push:
    branches:
      - master

jobs:
  test-desktop:
    name: Build and test
    runs-on: ubuntu-latest
    strategy:
      matrix:
        args: [
          "--no-default-features",
          "--all-features",
          "--benches --all-features",
        ]
    steps:

    - name: Cancel Previous Runs
      uses: styfle/cancel-workflow-action@0.9.1
      with:
        access_token: ${{ github.token }}

    - uses: actions/checkout@v2.4.0

    - uses: Swatinem/rust-cache@v1.3.0
      with:
        key: ${{ matrix.args }}

    - run: cargo test --workspace ${{ matrix.args }}

  test-wasm:
    name: Build on WASM
    runs-on: ubuntu-latest
    strategy:
      matrix:
        toolchain: [
          wasm32-unknown-emscripten,
          wasm32-wasi
        ]
        include:
          - toolchain: wasm32-unknown-unknown
            args: "--features wasm-bindgen"
    container:
      image: rust
      env:
        CC: clang-11
    steps:

    - name: Cancel Previous Runs
      uses: styfle/cancel-workflow-action@0.9.1
      with:
        access_token: ${{ github.token }}

    - uses: actions/checkout@v2.4.0

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

    - name: Install a recent version of clang
      run: |
        apt-get update
        apt-get install -y clang-11

    - name: Install CMake
      run: apt-get install -y cmake

    - uses: Swatinem/rust-cache@v1.3.0
      with:
        key: ${{ matrix.toolchain }}

    - name: Build on ${{ matrix.toolchain }}
      # TODO: also run `cargo test`
      # TODO: ideally we would build `--workspace`, but not all crates compile for WASM
      run: cargo build --target=${{ matrix.toolchain }} ${{ matrix.args }}

  check-rustdoc-links:
    name: Check rustdoc intra-doc links
    runs-on: ubuntu-latest
    container:
      image: rust
    steps:

    - name: Cancel Previous Runs
      uses: styfle/cancel-workflow-action@0.9.1
      with:
        access_token: ${{ github.token }}

    - uses: actions/checkout@v2.4.0

    - uses: Swatinem/rust-cache@v1.3.0

    - name: Check rustdoc links
      run: RUSTDOCFLAGS="--deny broken_intra_doc_links" cargo doc --verbose --workspace --no-deps --document-private-items

  check-clippy:
    runs-on: ubuntu-latest
    steps:

    - name: Cancel Previous Runs
      uses: styfle/cancel-workflow-action@0.9.1
      with:
        access_token: ${{ github.token }}

    - uses: actions/checkout@v2.4.0

    - uses: actions-rs/toolchain@v1.0.7
      with:
        profile: minimal
        toolchain: stable
        override: true
        components: clippy

    - uses: Swatinem/rust-cache@v1.3.0

    - name: Run cargo clippy
      uses: actions-rs/cargo@v1.0.3
      with:
        command: custom-clippy # cargo alias to allow reuse of config locally

  integration-test:
    name: Integration tests
    runs-on: ubuntu-latest
    container:
      image: rust
    steps:

    - name: Cancel Previous Runs
      uses: styfle/cancel-workflow-action@0.9.1
      with:
        access_token: ${{ github.token }}

    - uses: actions/checkout@v2.4.0

    - uses: Swatinem/rust-cache@v1.3.0

    - name: Run ipfs-kad example
      run: RUST_LOG=libp2p_swarm=debug,libp2p_kad=trace,libp2p_tcp=debug cargo run --example ipfs-kad

  rustfmt:
    runs-on: ubuntu-latest
    steps:

    - name: Cancel Previous Runs
      uses: styfle/cancel-workflow-action@0.9.0
      with:
        access_token: ${{ github.token }}

    - uses: actions/checkout@v2.4.0

    - uses: actions-rs/toolchain@v1.0.7
      with:
        profile: minimal
        toolchain: stable
        override: true
        components: rustfmt

    - name: Check formatting
      run: cargo fmt -- --check