asyncs 0.4.0

async runtime agnostic facilities
Documentation
name: CI
on:
  push:
  pull_request:

env:
  RUSTFLAGS: -Dwarnings
  RUST_BACKTRACE: 1

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: Swatinem/rust-cache@v2
    - name: Install latest nightly
      uses: actions-rs/toolchain@v1
      with:
          toolchain: nightly
          override: true
          components: rustfmt
    - name: Check formatting
      run: cargo fmt --all -- --check

  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: Swatinem/rust-cache@v2
    - name: Install rust stable
      uses: actions-rs/toolchain@v1
      with:
          toolchain: stable
          override: true
    - name: Install cargo-all-features
      run: cargo install cargo-all-features
    - name: Build code
      run: cargo build-all-features

  test:
    needs: [build]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: Swatinem/rust-cache@v2
    - name: Install rust stable
      uses: actions-rs/toolchain@v1
      with:
          toolchain: stable
          override: true
    - name: Test code
      run: cargo test --all-features -- --nocapture

  coverage:
    if: github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref_type == 'branch' && github.ref_name == 'master')
    needs: [test]
    runs-on: ubuntu-latest
    env:
      RUST_LOG: debug
      RUSTFLAGS: -Cinstrument-coverage
    steps:
    - uses: actions/checkout@v4
    - uses: Swatinem/rust-cache@v1
    - name: Install rust stable
      uses: actions-rs/toolchain@v1
      with:
          toolchain: stable
          override: true
          components: llvm-tools
    - run: cargo install grcov
    - run: cargo build --verbose
    - name: Run tests
      run: LLVM_PROFILE_FILE="asyncs-%p-%m.profraw" cargo test --all-features --verbose -- --nocapture
    - name: Generate coverage report
      run: grcov $(find . -name "asyncs-*.profraw" -print) --binary-path ./target/debug/ -s . -t lcov --branch --ignore-not-existing --ignore "/*" -o lcov.info
    - name: Upload to codecov.io
      uses: codecov/codecov-action@v4
      with:
        verbose: true

  lint:
    needs: [build]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: Swatinem/rust-cache@v2
    - name: Install rust stable
      uses: actions-rs/toolchain@v1
      with:
          toolchain: stable
          override: true
          components: clippy
    - name: Lint code
      run: cargo clippy --workspace --all-targets --all-features --no-deps -- -D clippy::all

  release:
    if: github.event_name == 'push' && github.ref_type == 'tag'
    needs: [build, test, lint]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: Swatinem/rust-cache@v2
    - name: install cargo-workspaces to publish workspace
      run: cargo install cargo-workspaces
    - name: publish crate
      env:
        CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
      run: cargo workspaces publish --allow-dirty --from-git