# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json

name: Codecov

permissions: {}

on:
  push:
    branches:
    - '*'
  pull_request:
    branches:
    - 'main'
    - 'release*'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  unit-tests:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
    - name: Setup caches
      uses: ./.github/actions/setup-caches
      timeout-minutes: 5
      continue-on-error: true
      with:
        build-cache-key: codecov
    - name: Setup build env
      uses: ./.github/actions/setup-build-env
      timeout-minutes: 10
      with:
        free-disk-space: false
    - name: Generate Code Coverage Report
      run: make code-cov-report
    - name: Upload coverage
      uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
      with:
        name: coverage.out
        path: coverage.out
        retention-days: 1
        if-no-files-found: error

  upload-to-codecov:
    needs:
    - unit-tests
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
    - name: Download coverage
      uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2
      with:
        name: coverage.out
    - name: Upload Report to Codecov
      uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
      with:
        files: ./coverage.out
        fail_ci_if_error: true
        verbose: true
      env:
        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}