name: Coverage

on: [push, pull_request]

jobs:
  coverage:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          target: x86_64-unknown-linux-gnu
          toolchain: nightly
          override: true
      - name: Install grcov
        run: curl -L https://github.com/mozilla/grcov/releases/download/v0.6.1/grcov-linux-x86_64.tar.bz2 | tar jxf -
      - name: Install rust-covfix
        run: |
          curl -L https://github.com/Kogia-sima/rust-covfix/releases/download/v0.2.2/rust-covfix-linux-x86_64.tar.xz |tar Jxf -
          mv rust-covfix-linux-x86_64/rust-covfix ./
      - name: Test all crates
        env:
          CARGO_INCREMENTAL: 0
          RUSTFLAGS: -Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -C panic=abort
          RUSTDOCFLAGS: -C panic=abort
        run: |
          cargo test --no-default-features --features std
          cargo test --all-features
      - name: collect coverages
        run: |
          zip -0 ccov.zip `find . -name "itoap*.gc*" -print`
          ./grcov ccov.zip --llvm --branch -t lcov -o lcov.info --ignore "/*"
      - name: fix coverages
        run: ./rust-covfix -o lcov.info lcov.info
      - name: upload coverage
        uses: codecov/codecov-action@v1
        with:
          file: ./lcov.info
