From cab030cd9fe67ef75772f0c2485672f755bc91d9 Mon Sep 17 00:00:00 2001 From: Robert Brown <91291114+rjbrown2@users.noreply.github.com> Date: Thu, 19 Dec 2024 17:17:15 -0500 Subject: [PATCH] [#258] Refactor for gMcov --- .github/workflows/mc_dc_coverage.yml | 98 +++++++++------------------- 1 file changed, 31 insertions(+), 67 deletions(-) diff --git a/.github/workflows/mc_dc_coverage.yml b/.github/workflows/mc_dc_coverage.yml index cd1fa057..8d13fa2f 100644 --- a/.github/workflows/mc_dc_coverage.yml +++ b/.github/workflows/mc_dc_coverage.yml @@ -1,12 +1,11 @@ -name: CryptoLib Coverage +name: CryptoLib Coverage with MC/DC on: push: branches: - 258-cyclomatic-complexity-and-mcdc-in-ci paths-ignore: - - 'doc/coverage/line-coverage-badge.svg' - - 'doc/coverage/branch-coverage-badge.svg' + - 'doc/coverage/*.svg' pull_request: branches: - 258-cyclomatic-complexity-and-mcdc-in-ci @@ -15,97 +14,62 @@ jobs: coverage: runs-on: ubuntu-latest container: - image: ivvitc/cryptolib:20240814 + image: ivvitc/cryptolib:20240814 # Replace with your container if applicable steps: + # Step 1: Check out the repository - uses: actions/checkout@v4 with: fetch-depth: 0 # Fetch full history for branch operations + # Step 2: Configure Git safe directory - name: Configure Safe Directory run: git config --global --add safe.directory $GITHUB_WORKSPACE + # Step 3: Install dependencies - name: Install Dependencies env: DEBIAN_FRONTEND: noninteractive - TZ: Etc/UTC run: | apt-get update - apt-get install -y lcov libcurl4-openssl-dev libmariadb-dev libmariadb-dev-compat python3 gcovr bc + apt-get install -y gcc g++ lcov gcov python3-pip bc pip install pycryptodome - curl -LS https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.50.tar.bz2 -o /tmp/libgpg-error-1.50.tar.bz2 - tar -xjf /tmp/libgpg-error-1.50.tar.bz2 -C /tmp/ - cd /tmp/libgpg-error-1.50 && ./configure && make install - curl -LS https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.11.0.tar.bz2 -o /tmp/libgcrypt-1.11.0.tar.bz2 - tar -xjf /tmp/libgcrypt-1.11.0.tar.bz2 -C /tmp/ - cd /tmp/libgcrypt-1.11.0 && ./configure && make install - ldconfig - - - name: Fix Detached HEAD State - run: git checkout -B ${GITHUB_REF##*/} + # Install gMCov dependencies + git clone https://github.com/Monika-rani12/gMCov.git /tmp/gmcov + chmod +x /tmp/gmcov/main-gProfiler.sh - - name: Build with Coverage Flags + # Step 4: Build and run tests with instrumentation + - name: Build and Run Tests with Instrumentation run: | export CFLAGS="-fprofile-arcs -ftest-coverage -g" bash ${GITHUB_WORKSPACE}/support/scripts/build_internal.sh - - - name: Generate Coverage Report and Badges - run: | - mkdir -p doc/coverage - gcovr --branches --xml-pretty --exclude-unreachable-branches -o doc/coverage/coverage_report.xml - gcovr --branches --html --html-details -o doc/coverage/coverage_report.html - - # Extract overall coverage metrics from the root <coverage> tag - LINE_COVERAGE=$(grep -oP '(?<=<coverage line-rate=")[0-9.]+(?=")' doc/coverage/coverage_report.xml | head -n 1) - BRANCH_COVERAGE=$(grep -oP '(?<=branch-rate=")[0-9.]+(?=")' doc/coverage/coverage_report.xml | head -n 1) - - # Convert to percentages - LINE_COVERAGE_PERCENT=$(printf "%.0f" $(echo "$LINE_COVERAGE * 100" | bc)) - BRANCH_COVERAGE_PERCENT=$(printf "%.0f" $(echo "$BRANCH_COVERAGE * 100" | bc)) - - # Debug extracted values - echo "Line Coverage: $LINE_COVERAGE_PERCENT%" - echo "Branch Coverage: $BRANCH_COVERAGE_PERCENT%" - - # Determine colors based on coverage percentages - if [ "$LINE_COVERAGE_PERCENT" -ge 80 ]; then - LINE_COLOR="brightgreen" - elif [ "$LINE_COVERAGE_PERCENT" -ge 50 ]; then - LINE_COLOR="yellow" - else - LINE_COLOR="red" - fi - if [ "$BRANCH_COVERAGE_PERCENT" -ge 80 ]; then - BRANCH_COLOR="brightgreen" - elif [ "$BRANCH_COVERAGE_PERCENT" -ge 50 ]; then - BRANCH_COLOR="yellow" - else - BRANCH_COLOR="red" - fi - - # Generate badges with dynamic colors - curl -o doc/coverage/line-coverage-badge.svg "https://img.shields.io/badge/line%20coverage-${LINE_COVERAGE_PERCENT}%25-${LINE_COLOR}" - curl -o doc/coverage/branch-coverage-badge.svg "https://img.shields.io/badge/branch%20coverage-${BRANCH_COVERAGE_PERCENT}%25-${BRANCH_COLOR}" + # Step 5: Analyze MC/DC coverage with gMCov + - name: Generate MC/DC Coverage Report + run: | + cd /tmp/gmcov + ./main-gProfiler.sh + mv output_mcdc_report ${GITHUB_WORKSPACE}/doc/coverage/ - - name: Upload to Code Cov + # Step 6: Upload coverage reports to Codecov + - name: Upload to Codecov uses: codecov/codecov-action@v5 - env: - CODECOV_TOKEN: 71699f25-12a3-44a4-8a83-be777b9e577a - - - name: Commit Coverage Badges + with: + files: doc/coverage/output_mcdc_report + flags: mcdc + + # Step 7: Commit and push coverage report (optional) + - name: Commit Coverage Report run: | git config user.name "github-actions" git config user.email "actions@github.com" - git add doc/coverage/line-coverage-badge.svg - git add doc/coverage/branch-coverage-badge.svg - git commit -m "Update coverage badges" || echo "No changes to commit" + git add doc/coverage/output_mcdc_report + git commit -m "Update MC/DC coverage report" || echo "No changes to commit" git push origin HEAD + # Step 8: Upload MC/DC coverage report as an artifact (optional) - name: Upload Coverage Report uses: actions/upload-artifact@v3 with: - name: coverage-report - path: doc/coverage - - + name: mcdc-coverage-report + path: doc/coverage/output_mcdc_report