name: Rust

on:
  push:
    branches: [main]
  pull_request:

env:
  CARGO_TERM_COLOR: always

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Build
        run: cargo build
      - name: Run tests
        run: cargo test
      - name: Run clippy
        uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-features

  format:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Format Rust code
        run: cargo fmt --all -- --check

  coverage:
    runs-on: ubuntu-latest
    env:
      RUSTC_BOOTSTRAP: 1
    steps:
      - uses: actions/checkout@v2
      - name: Install dependencies
        run: sudo apt-get install libdbus-1-dev
      - name: Install grcov
        run: curl -L https://github.com/mozilla/grcov/releases/latest/download/grcov-linux-x86_64.tar.bz2 | tar jxf -
      - name: Install llvm-tools
        run: rustup component add llvm-tools-preview
      - name: Build for coverage
        run: cargo build --all-features
        env:
          RUSTFLAGS: "-Zinstrument-coverage"
      - name: Run tests with coverage
        run: cargo test --all-features
        env:
          RUSTFLAGS: "-Zinstrument-coverage"
          LLVM_PROFILE_FILE: "test-coverage-%p-%m.profraw"
      - name: Convert coverage
        run: ./grcov . -s . --binary-path target/debug/ -t lcov --branch --ignore-not-existing -o target/debug/lcov.info
      - name: Upload coverage to codecov.io
        uses: codecov/codecov-action@v1
        with:
          directory: ./target/debug
          fail_ci_if_error: true

Add CI config for formatting, tests and coverage.
Add CI config for formatting, tests and coverage.
