name: CI
on:
  pull_request:
  push:
    branches:
    - main
jobs:
  test:
    strategy:
      matrix:
        rust: [stable, beta]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: ${{ matrix.rust }}
        components: rustfmt
        profile: minimal
    - uses: arduino/setup-protoc@v1
    - name: Test
      run: ./scripts/test.sh
  lint:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        components: rustfmt
        profile: minimal
    - uses: arduino/setup-protoc@v1
    - uses: actions-rs/cargo@v1
      with:
        command: fmt
        args: --all -- --check
    - name: Lint
      run: ./scripts/lint.sh
  non-default-examples:
    strategy:
      matrix:
        example: [examples/external-otlp-grpcio-async-std]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: stable
        components: rustfmt
        profile: minimal
    - uses: arduino/setup-protoc@v1
    - name: Build
      run: |
        cd ${{ matrix.example }}
        cargo build --verbose
  msrv:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true
    - uses: actions-rs/toolchain@v1
      with:
        profile: minimal
        toolchain: 1.49.0
        override: true
    - name: Run tests
      run: cargo --version &&
        cargo test --verbose --manifest-path=opentelemetry/Cargo.toml --features trace,metrics,serialize,rt-tokio,serde,testing &&
        cargo test --manifest-path=opentelemetry-jaeger/Cargo.toml --features rt-tokio &&
        cargo test --manifest-path=opentelemetry-zipkin/Cargo.toml
  cargo-deny:
    runs-on: ubuntu-latest
    continue-on-error: true # Prevent sudden announcement of a new advisory from failing ci
    steps:
      - uses: actions/checkout@v2
      - uses: EmbarkStudios/cargo-deny-action@v1
        with:
          command: check advisories
  coverage:
    continue-on-error: true
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
      with:
        submodules: true
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: nightly
        components: rustfmt
        override: true
    - uses: arduino/setup-protoc@v1
    - name: doc
      run: cargo doc --no-deps --all-features
      env:
        RUSTDOCFLAGS: -Dwarnings
    - uses: actions-rs/cargo@v1
      with:
        command: test
        args: -p opentelemetry -p opentelemetry-jaeger -p opentelemetry-zipkin -p opentelemetry-datadog -p opentelemetry-aws --all-features --no-fail-fast
      env:
        CARGO_INCREMENTAL: '0'
        RUSTFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
        RUSTDOCFLAGS: '-Zprofile -Ccodegen-units=1 -Cinline-threshold=0 -Clink-dead-code -Coverflow-checks=off -Cpanic=abort -Zpanic_abort_tests'
    - uses: actions-rs/grcov@v0.1
      id: coverage
    - uses: codecov/codecov-action@v1
      with:
        file: ${{ steps.coverage.outputs.report }}
