name: Ubuntu 22.04 (llvm cov)

on:
  pull_request_target:
    branches:
      - master
      - cpp20

jobs:
  build:
    runs-on: ubuntu-22.04

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install Dependencies
        run: |
          sudo apt-get install openssl
          sudo apt-get install libssl-dev
          sudo apt-get install llvm

      # - name: Install newer Clang
      #   run: |
      #     wget https://apt.llvm.org/llvm.sh
      #     chmod +x ./llvm.sh
      #     sudo ./llvm.sh 17

      - name: Run Coverage
        run: |
          mkdir build && cd build
          CC=clang CXX=clang++ cmake .. -DCOVERAGE_TEST=ON -DCINATRA_ENABLE_SSL=OFF
          make -j test_rest_rpc
          export LLVM_PROFILE_FILE="test_rest_rpc-%m.profraw"
          cd tests
          ./test_rest_rpc
          llvm-profdata merge -sparse test_rest_rpc-*.profraw -o test_rest_rpc.profdata
          llvm-cov show ./test_rest_rpc -instr-profile=test_rest_rpc.profdata -format=html -output-dir=../.coverage_llvm_cov -ignore-filename-regex="string_view.hpp|nonstd_any.hpp|examples|thirdparty|tests" -show-instantiations=false
          echo "Done!"

      - name: Upload Coverage Results
        uses: actions/upload-artifact@v4
        with:
          name: llvm-cov
          path: ${{ github.workspace }}/build/.coverage_llvm_cov
          include-hidden-files: true

      - name: Create Code Coverage Report
        working-directory: ${{github.workspace}}/build/tests
        run: |
          echo "Code Coverage Report" > tmp.log
          echo "for detail, [goto summary](https://github.com/${{ github.repository_owner }}/${{ github.event.repository.name }}/actions/runs/${{github.run_id}}) download Artifacts `llvm-cov`" >> tmp.log
          echo "\`\`\`" >> tmp.log
          llvm-cov report ./test_rest_rpc -instr-profile=test_rest_rpc.profdata -ignore-filename-regex="string_view.hpp|nonstd_any.hpp|examples|thirdparty|tests" -show-region-summary=false >> tmp.log
          echo "\`\`\`" >> tmp.log

      - name: Create Comment
        uses: peter-evans/create-or-update-comment@v2
        with:
          issue-number: ${{ github.event.pull_request.number }}
          body-file: '${{github.workspace}}/build/tests/tmp.log'
