name: Code Coverage with codecov

on:
  schedule:
    - cron: '25 06,18 * * 1-5'

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

jobs:
  codecov:
    if: github.repository == 'zephyrproject-rtos/zephyr'
    runs-on: zephyr-runner-linux-x64-4xlarge
    container:
      image: ghcr.io/zephyrproject-rtos/ci:v0.26.7
      options: '--entrypoint /bin/bash'
      volumes:
        - /repo-cache/zephyrproject:/github/cache/zephyrproject
    strategy:
      fail-fast: false
      matrix:
        platform: ["mps2_an385", "native_sim", "qemu_x86", "unit_testing"]
    steps:
      - name: Apply container owner mismatch workaround
        run: |
          # FIXME: The owner UID of the GITHUB_WORKSPACE directory may not
          #        match the container user UID because of the way GitHub
          #        Actions runner is implemented. Remove this workaround when
          #        GitHub comes up with a fundamental fix for this problem.
          git config --global --add safe.directory ${GITHUB_WORKSPACE}

      - name: Update PATH for west
        run: |
          echo "$HOME/.local/bin" >> $GITHUB_PATH

      - name: Clone cached Zephyr repository
        continue-on-error: true
        run: |
          git clone --shared /github/cache/zephyrproject/zephyr .
          git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}

      - name: checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: west setup
        run: |
          west init -l . || true
          west update 1> west.update.log || west update 1> west.update-2.log

      - name: Environment Setup
        run: |
          cmake --version
          gcc --version
          ls -la

          echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV

      - name: Prepare ccache keys
        id: ccache_cache_prop
        shell: cmake -P {0}
        run: |
          string(REPLACE "/" "_" repo ${{github.repository}})
          string(REPLACE "-" "_" repo2 ${repo})
          file(APPEND $ENV{GITHUB_OUTPUT} "repo=${repo2}\n")

      - name: use cache
        id: cache-ccache
        uses: zephyrproject-rtos/action-s3-cache@v1.2.0
        with:
          key: ${{ steps.ccache_cache_prop.outputs.repo }}-${{github.event_name}}-${{matrix.platform}}-codecov-ccache
          path: /github/home/.cache/ccache
          aws-s3-bucket: ccache.zephyrproject.org
          aws-access-key-id: ${{ vars.AWS_CCACHE_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_CCACHE_SECRET_ACCESS_KEY }}
          aws-region: us-east-2

      - name: ccache stats initial
        run: |
          mkdir -p /github/home/.cache
          test -d github/home/.cache/ccache && mv github/home/.cache/ccache /github/home/.cache/ccache
          ccache -M 10G -s

      - name: Run Tests with Twister (Push)
        continue-on-error: true
        run: |
          export ZEPHYR_BASE=${PWD}
          export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
          mkdir -p coverage/reports
          pip3 install gcovr==6.0
          ./scripts/twister -i --force-color -N -v --filter runnable -p ${{ matrix.platform }} --coverage -T tests --coverage-tool gcovr -xCONFIG_TEST_EXTRA_STACK_SIZE=4096 -e nano

      - name: ccache stats post
        run: |
          ccache -s
          ccache -p

      - name: Rename coverage files
        if: always()
        run: |
          cp twister-out/coverage.json coverage/reports/${{ matrix.platform }}.json

      - name: Upload Coverage Results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: Coverage Data (Subset ${{ matrix.platform }})
          path: coverage/reports/${{ matrix.platform }}.json

  codecov-results:
    name: "Publish Coverage Results"
    needs: codecov
    runs-on: ubuntu-22.04
    # the codecov job might be skipped, we don't need to run this job then
    if: success() || failure()

    steps:
      - name: checkout
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - name: Download Artifacts
        uses: actions/download-artifact@v4
        with:
          path: coverage/reports

      - name: Move coverage files
        run: |
          mv ./coverage/reports/*/*.json ./coverage/reports
          ls -la ./coverage/reports

      - name: Generate list of coverage files
        id: get-coverage-files
        shell: cmake -P {0}
        run: |
          file(GLOB INPUT_FILES_LIST  "coverage/reports/*.json")
          set(MERGELIST "")
          set(FILELIST "")
          foreach(ITEM ${INPUT_FILES_LIST})
            get_filename_component(f ${ITEM} NAME)
            if(FILELIST STREQUAL "")
              set(FILELIST "${f}")
            else()
              set(FILELIST "${FILELIST},${f}")
            endif()
          endforeach()
          foreach(ITEM ${INPUT_FILES_LIST})
            get_filename_component(f ${ITEM} NAME)
            if(MERGELIST STREQUAL "")
              set(MERGELIST "--add-tracefile ${f}")
            else()
              set(MERGELIST "${MERGELIST} -a ${f}")
            endif()
          endforeach()
          file(APPEND $ENV{GITHUB_OUTPUT} "mergefiles=${MERGELIST}\n")
          file(APPEND $ENV{GITHUB_OUTPUT} "covfiles=${FILELIST}\n")

      - name: Merge coverage files
        run: |
          cd ./coverage/reports
          pip3 install gcovr==6.0
          gcovr ${{ steps.get-coverage-files.outputs.mergefiles }}  --merge-mode-functions=separate --json merged.json
          gcovr ${{ steps.get-coverage-files.outputs.mergefiles }} --merge-mode-functions=separate --cobertura merged.xml

      - name: Upload Merged Coverage Results
        if: always()
        uses: actions/upload-artifact@v4
        with:
          name: Merged Coverage Data
          path: |
            coverage/reports/merged.json
            coverage/reports/merged.xml

      - name: Upload coverage to Codecov
        if: always()
        uses: codecov/codecov-action@v3
        with:
          directory: ./coverage/reports
          env_vars: OS,PYTHON
          fail_ci_if_error: false
          verbose: true
          files: merged.xml
