name: CMock Unit Tests
on: [push, pull_request]

jobs:
  run:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout Parent Repository
      uses: actions/checkout@v4.1.1
      with:
        ref: main
        repository: FreeRTOS/FreeRTOS
        submodules: 'recursive'
        fetch-depth: 1

    # Checkout user pull request changes
    - name: Checkout Pull Request
      uses: actions/checkout@v4.1.1
      with:
        path: ./FreeRTOS/Source

    - name: Setup Python
      uses: actions/setup-python@master
      with:
        python-version: 3.8

    - name: Install packages
      run: |
          sudo apt-get install lcov cflow ruby doxygen build-essential unifdef
    - name: Run Unit Tests with ENABLE_SANITIZER=1
      run: |
          make -C FreeRTOS/Test/CMock clean
          make -C FreeRTOS/Test/CMock ENABLE_SANITIZER=1 run_col_formatted
    - name: Run Unit Tests for coverage
      run: |
          make -C FreeRTOS/Test/CMock clean
          make -C FreeRTOS/Test/CMock lcovhtml
          lcov --config-file FreeRTOS/Test/CMock/lcovrc --summary FreeRTOS/Test/CMock/build/cmock_test.info > FreeRTOS/Test/CMock/build/cmock_test_summary.txt
    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3.1.0
      with:
        files: ${{ github.workspace }}/FreeRTOS/Test/CMock/build/cmock_test.info
        root_dir: ${{ github.workspace }}/FreeRTOS/Source
        flags: unittests
        fail_ci_if_error: false
        verbose: false
    - name: Archive code coverage data
      uses: actions/upload-artifact@v4
      with:
        name: coverage-data
        path: FreeRTOS/Test/CMock/build/cmock_test*
    - name: Archive code coverage html report
      uses: actions/upload-artifact@v4
      with:
        name: coverage-report
        path: FreeRTOS/Test/CMock/build/coverage
