From cdb94b228e5d9d583f4a5858dc57e7ed472f85e6 Mon Sep 17 00:00:00 2001 From: gargsaumya Date: Tue, 16 Dec 2025 09:47:13 +0530 Subject: [PATCH 1/3] testing code coverage failure --- main.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 2f8cf28c..f7404ffb 100644 --- a/main.py +++ b/main.py @@ -4,7 +4,8 @@ # Clean one-liner: set level and output mode together setup_logging(output="both") - +print("Logging is set up.") +print("This is a test PR for mssql-python.") conn_str = os.getenv("DB_CONNECTION_STRING") conn = connect(conn_str) cursor = conn.cursor() @@ -15,4 +16,4 @@ print(f"Database ID: {row[0]}, Name: {row[1]}") cursor.close() -conn.close() \ No newline at end of file +conn.close() From b2a1ac60480609367234def90702f5db48ff7d6e Mon Sep 17 00:00:00 2001 From: gargsaumya Date: Tue, 16 Dec 2025 12:00:21 +0530 Subject: [PATCH 2/3] testing --- .github/workflows/post-coverage-comment.yml | 136 ++++++++++++++++++++ .github/workflows/pr-code-coverage.yml | 26 ++++ 2 files changed, 162 insertions(+) create mode 100644 .github/workflows/post-coverage-comment.yml diff --git a/.github/workflows/post-coverage-comment.yml b/.github/workflows/post-coverage-comment.yml new file mode 100644 index 00000000..2f2f6c89 --- /dev/null +++ b/.github/workflows/post-coverage-comment.yml @@ -0,0 +1,136 @@ +name: Post Coverage Comment + +on: + workflow_run: + workflows: ["PR Code Coverage"] + types: + - completed + +jobs: + post-comment: + runs-on: ubuntu-latest + if: > + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + permissions: + pull-requests: write + contents: read + + steps: + - name: Download coverage data + uses: actions/download-artifact@v4 + with: + name: coverage-comment-data + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + + - name: Read coverage data + id: coverage + run: | + if [[ ! -f pr-info.json ]]; then + echo "❌ pr-info.json not found" + exit 1 + fi + + cat pr-info.json + + # Extract values from JSON + PR_NUMBER=$(jq -r '.pr_number' pr-info.json) + COVERAGE_PCT=$(jq -r '.coverage_percentage' pr-info.json) + COVERED_LINES=$(jq -r '.covered_lines' pr-info.json) + TOTAL_LINES=$(jq -r '.total_lines' pr-info.json) + PATCH_PCT=$(jq -r '.patch_coverage_pct' pr-info.json) + LOW_COV_FILES=$(jq -r '.low_coverage_files' pr-info.json) + PATCH_SUMMARY=$(jq -r '.patch_coverage_summary' pr-info.json) + ADO_URL=$(jq -r '.ado_url' pr-info.json) + + # Export to env for next step + echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV + echo "COVERAGE_PERCENTAGE=$COVERAGE_PCT" >> $GITHUB_ENV + echo "COVERED_LINES=$COVERED_LINES" >> $GITHUB_ENV + echo "TOTAL_LINES=$TOTAL_LINES" >> $GITHUB_ENV + echo "PATCH_COVERAGE_PCT=$PATCH_PCT" >> $GITHUB_ENV + echo "ADO_URL=$ADO_URL" >> $GITHUB_ENV + + # Handle multiline values + echo "LOW_COVERAGE_FILES<> $GITHUB_ENV + echo "$LOW_COV_FILES" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + + echo "PATCH_COVERAGE_SUMMARY<> $GITHUB_ENV + echo "$PATCH_SUMMARY" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + + - name: Comment coverage summary on PR + uses: marocchino/sticky-pull-request-comment@v2 + with: + number: ${{ env.PR_NUMBER }} + header: Code Coverage Report + message: | + # 📊 Code Coverage Report + + + + + + + +
+ + ### 🔥 Diff Coverage + ### **${{ env.PATCH_COVERAGE_PCT }}** +
+
+ + ### 🎯 Overall Coverage + ### **${{ env.COVERAGE_PERCENTAGE }}** +
+
+ + **📈 Total Lines Covered:** `${{ env.COVERED_LINES }}` out of `${{ env.TOTAL_LINES }}` + **📁 Project:** `mssql-python` + +
+ + --- + + ${{ env.PATCH_COVERAGE_SUMMARY }} + + --- + ### 📋 Files Needing Attention + +
+ 📉 Files with overall lowest coverage (click to expand) +
+ + ```diff + ${{ env.LOW_COVERAGE_FILES }} + ``` + +
+ + --- + ### 🔗 Quick Links + + + + + + + + + + +
+ ⚙️ Build Summary + + 📋 Coverage Details +
+ + [View Azure DevOps Build](${{ env.ADO_URL }}) + + + + [Browse Full Coverage Report](${{ env.ADO_URL }}&view=codecoverage-tab) + +
diff --git a/.github/workflows/pr-code-coverage.yml b/.github/workflows/pr-code-coverage.yml index d00666b9..03a8ec69 100644 --- a/.github/workflows/pr-code-coverage.yml +++ b/.github/workflows/pr-code-coverage.yml @@ -417,7 +417,33 @@ jobs: echo "PATCH_COVERAGE_SUMMARY=Patch coverage report could not be generated." >> $GITHUB_ENV fi + - name: Save coverage data for comment + run: | + mkdir -p coverage-comment-data + cat > coverage-comment-data/pr-info.json << EOF + { + "pr_number": "${{ github.event.pull_request.number }}", + "coverage_percentage": "${{ env.COVERAGE_PERCENTAGE }}", + "covered_lines": "${{ env.COVERED_LINES }}", + "total_lines": "${{ env.TOTAL_LINES }}", + "patch_coverage_pct": "${{ env.PATCH_COVERAGE_PCT }}", + "low_coverage_files": $(jq -Rs . <<< "${{ env.LOW_COVERAGE_FILES }}"), + "patch_coverage_summary": $(jq -Rs . <<< "${{ env.PATCH_COVERAGE_SUMMARY }}"), + "ado_url": "${{ env.ADO_URL }}" + } + EOF + cat coverage-comment-data/pr-info.json + + - name: Upload coverage comment data + uses: actions/upload-artifact@v4 + with: + name: coverage-comment-data + path: coverage-comment-data/ + retention-days: 1 + - name: Comment coverage summary on PR + # Skip for forked PRs due to token permission restrictions + if: github.event.pull_request.head.repo.full_name == github.repository uses: marocchino/sticky-pull-request-comment@v2 with: header: Code Coverage Report From 7e50a980a1af9f0b0e4784651e6ef80bb412a137 Mon Sep 17 00:00:00 2001 From: gargsaumya Date: Wed, 17 Dec 2025 16:18:27 +0530 Subject: [PATCH 3/3] testing --- .github/workflows/post-coverage-comment.yml | 61 +++++++++++---------- .github/workflows/pr-code-coverage.yml | 38 +++++++++---- 2 files changed, 60 insertions(+), 39 deletions(-) diff --git a/.github/workflows/post-coverage-comment.yml b/.github/workflows/post-coverage-comment.yml index 2f2f6c89..70d927a2 100644 --- a/.github/workflows/post-coverage-comment.yml +++ b/.github/workflows/post-coverage-comment.yml @@ -18,11 +18,12 @@ jobs: steps: - name: Download coverage data - uses: actions/download-artifact@v4 - with: - name: coverage-comment-data - github-token: ${{ secrets.GITHUB_TOKEN }} - run-id: ${{ github.event.workflow_run.id }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + gh run download ${{ github.event.workflow_run.id }} \ + --repo ${{ github.repository }} \ + --name coverage-comment-data - name: Read coverage data id: coverage @@ -34,32 +35,36 @@ jobs: cat pr-info.json - # Extract values from JSON - PR_NUMBER=$(jq -r '.pr_number' pr-info.json) - COVERAGE_PCT=$(jq -r '.coverage_percentage' pr-info.json) - COVERED_LINES=$(jq -r '.covered_lines' pr-info.json) - TOTAL_LINES=$(jq -r '.total_lines' pr-info.json) - PATCH_PCT=$(jq -r '.patch_coverage_pct' pr-info.json) - LOW_COV_FILES=$(jq -r '.low_coverage_files' pr-info.json) - PATCH_SUMMARY=$(jq -r '.patch_coverage_summary' pr-info.json) - ADO_URL=$(jq -r '.ado_url' pr-info.json) + # Extract values from JSON with proper quoting + PR_NUMBER="$(jq -r '.pr_number' pr-info.json)" + COVERAGE_PCT="$(jq -r '.coverage_percentage' pr-info.json)" + COVERED_LINES="$(jq -r '.covered_lines' pr-info.json)" + TOTAL_LINES="$(jq -r '.total_lines' pr-info.json)" + PATCH_PCT="$(jq -r '.patch_coverage_pct' pr-info.json)" + LOW_COV_FILES="$(jq -r '.low_coverage_files' pr-info.json)" + PATCH_SUMMARY="$(jq -r '.patch_coverage_summary' pr-info.json)" + ADO_URL="$(jq -r '.ado_url' pr-info.json)" - # Export to env for next step - echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV - echo "COVERAGE_PERCENTAGE=$COVERAGE_PCT" >> $GITHUB_ENV - echo "COVERED_LINES=$COVERED_LINES" >> $GITHUB_ENV - echo "TOTAL_LINES=$TOTAL_LINES" >> $GITHUB_ENV - echo "PATCH_COVERAGE_PCT=$PATCH_PCT" >> $GITHUB_ENV - echo "ADO_URL=$ADO_URL" >> $GITHUB_ENV + # Export to env for next step (single-line values) + echo "PR_NUMBER=${PR_NUMBER}" >> $GITHUB_ENV + echo "COVERAGE_PERCENTAGE=${COVERAGE_PCT}" >> $GITHUB_ENV + echo "COVERED_LINES=${COVERED_LINES}" >> $GITHUB_ENV + echo "TOTAL_LINES=${TOTAL_LINES}" >> $GITHUB_ENV + echo "PATCH_COVERAGE_PCT=${PATCH_PCT}" >> $GITHUB_ENV + echo "ADO_URL=${ADO_URL}" >> $GITHUB_ENV - # Handle multiline values - echo "LOW_COVERAGE_FILES<> $GITHUB_ENV - echo "$LOW_COV_FILES" >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV + # Handle multiline values with proper quoting + { + echo "LOW_COVERAGE_FILES<> $GITHUB_ENV - echo "PATCH_COVERAGE_SUMMARY<> $GITHUB_ENV - echo "$PATCH_SUMMARY" >> $GITHUB_ENV - echo "EOF" >> $GITHUB_ENV + { + echo "PATCH_COVERAGE_SUMMARY<> $GITHUB_ENV - name: Comment coverage summary on PR uses: marocchino/sticky-pull-request-comment@v2 diff --git a/.github/workflows/pr-code-coverage.yml b/.github/workflows/pr-code-coverage.yml index 03a8ec69..54e36b6d 100644 --- a/.github/workflows/pr-code-coverage.yml +++ b/.github/workflows/pr-code-coverage.yml @@ -420,18 +420,34 @@ jobs: - name: Save coverage data for comment run: | mkdir -p coverage-comment-data - cat > coverage-comment-data/pr-info.json << EOF - { - "pr_number": "${{ github.event.pull_request.number }}", - "coverage_percentage": "${{ env.COVERAGE_PERCENTAGE }}", - "covered_lines": "${{ env.COVERED_LINES }}", - "total_lines": "${{ env.TOTAL_LINES }}", - "patch_coverage_pct": "${{ env.PATCH_COVERAGE_PCT }}", - "low_coverage_files": $(jq -Rs . <<< "${{ env.LOW_COVERAGE_FILES }}"), - "patch_coverage_summary": $(jq -Rs . <<< "${{ env.PATCH_COVERAGE_SUMMARY }}"), - "ado_url": "${{ env.ADO_URL }}" + jq -n \ + --arg pr_number "${{ github.event.pull_request.number }}" \ + --arg coverage_percentage "${{ env.COVERAGE_PERCENTAGE }}" \ + --arg covered_lines "${{ env.COVERED_LINES }}" \ + --arg total_lines "${{ env.TOTAL_LINES }}" \ + --arg patch_coverage_pct "${{ env.PATCH_COVERAGE_PCT }}" \ + --arg low_coverage_files "${{ env.LOW_COVERAGE_FILES }}" \ + --arg patch_coverage_summary "${{ env.PATCH_COVERAGE_SUMMARY }}" \ + --arg ado_url "${{ env.ADO_URL }}" \ + '{ + pr_number: $pr_number, + coverage_percentage: $coverage_percentage, + covered_lines: $covered_lines, + total_lines: $total_lines, + patch_coverage_pct: $patch_coverage_pct, + low_coverage_files: $low_coverage_files, + patch_coverage_summary: $patch_coverage_summary, + ado_url: $ado_url + }' > coverage-comment-data/pr-info.json + + # Validate JSON before uploading + echo "Validating generated JSON..." + jq . coverage-comment-data/pr-info.json > /dev/null || { + echo "❌ Invalid JSON generated" + cat coverage-comment-data/pr-info.json + exit 1 } - EOF + echo "✅ JSON validation successful" cat coverage-comment-data/pr-info.json - name: Upload coverage comment data