Skip to content

Commit 6d2586e

Browse files
committed
🔧 DOP-5399 added the new github workflow for osiris coverage
1 parent ed230af commit 6d2586e

File tree

2 files changed

+116
-1
lines changed

2 files changed

+116
-1
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
name: Coverage Check for Osiris Generated AST files
2+
on:
3+
pull_request:
4+
paths:
5+
- '**/*.ast' # Only trigger if .ast files are changed
6+
branches:
7+
- main
8+
- DOP-5399
9+
workflow_dispatch:
10+
11+
jobs:
12+
check-coverage:
13+
runs-on: ubuntu-latest
14+
outputs:
15+
coverage_percent: ${{ steps.set_coverage.outputs.coverage_percent }}
16+
coverage_below_threshold: ${{ steps.set_coverage.outputs.coverage_below_threshold }}
17+
low_coverage_sites: ${{ steps.set_coverage.outputs.low_coverage_sites }}
18+
19+
steps:
20+
- name: Checkout Repos
21+
uses: actions/checkout@v4
22+
23+
- name: Install Wget
24+
run: sudo apt-get update && sudo apt-get install -y wget
25+
26+
- name: Clone Docs Java
27+
run: git clone --branch DOP-5399 https://github.com/mongodb/docs-java.git cloned-docs-java-repo
28+
29+
- name: Clone Osiris
30+
run: git clone https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/10gen/osiris.git cloned-osiris-repo
31+
32+
- name: Run Coverage Check
33+
id: run_coverage
34+
run: |
35+
cd cloned-osiris-repo
36+
npm ci
37+
COVERAGE_OUTPUT=$(npm run dev -- -c "$GITHUB_WORKSPACE/cloned-docs-java-repo" -v --sp 95 | tee /dev/tty)
38+
39+
40+
# Extract the last reported overall coverage percentage
41+
COVERAGE_PERCENT=$(echo "$COVERAGE_OUTPUT" | grep -oE 'Average Coverage: [0-9]+(\.[0-9]+)?%' | tail -1 | grep -oE '[0-9]+(\.[0-9]+)?')
42+
43+
REQUIRED_COVERAGE=90.0
44+
45+
# Extract site names where Average Coverage is below the required coverage%
46+
LOW_COVERAGE_SITES=$(echo "$COVERAGE_OUTPUT" | awk -v threshold=$REQUIRED_COVERAGE '
47+
/Average Coverage:/ {
48+
coverage = $3 + 0; # Convert to number
49+
if (coverage < threshold) {
50+
low_coverage_detected = 1; # Flag that we have low coverage
51+
} else {
52+
low_coverage_detected = 0; # Reset if coverage is above threshold
53+
}
54+
}
55+
/Finished processing site "/ {
56+
if (low_coverage_detected) {
57+
site = $4;
58+
gsub(/"/, "", site); # Extract site name
59+
sites[site] = 1; # Store site name
60+
}
61+
}
62+
END { for (s in sites) printf "%s,", s }
63+
' | sed 's/,$//')
64+
65+
echo "Detected Coverage: $COVERAGE_PERCENT%"
66+
echo "Sites with Low Coverage: $LOW_COVERAGE_SITES"
67+
68+
# Ensure we have a valid number
69+
if [ -z "$COVERAGE_PERCENT" ]; then
70+
echo "Coverage percentage could not be determined."
71+
exit 1
72+
fi
73+
74+
echo "Required Coverage: $REQUIRED_COVERAGE"
75+
76+
if awk "BEGIN {exit !($COVERAGE_PERCENT < $REQUIRED_COVERAGE)}"; then
77+
echo "Test coverage ($COVERAGE_PERCENT%) is below required threshold ($REQUIRED_COVERAGE%)."
78+
echo "coverage_below_threshold=true" >> $GITHUB_ENV
79+
echo "COVERAGE_PERCENT=$COVERAGE_PERCENT" >> $GITHUB_ENV
80+
echo "LOW_COVERAGE_SITES=$LOW_COVERAGE_SITES" >> $GITHUB_ENV
81+
else
82+
echo "Test coverage ($COVERAGE_PERCENT%) meets the required threshold."
83+
echo "coverage_below_threshold=false" >> $GITHUB_ENV
84+
fi
85+
86+
- name: Set Workflow Outputs
87+
id: set_coverage
88+
run: |
89+
echo "coverage_percent=${COVERAGE_PERCENT}" >> $GITHUB_OUTPUT
90+
echo "coverage_below_threshold=${coverage_below_threshold}" >> $GITHUB_OUTPUT
91+
echo "low_coverage_sites=${LOW_COVERAGE_SITES}" >> $GITHUB_OUTPUT
92+
93+
send-slack-notification:
94+
runs-on: ubuntu-latest
95+
needs: check-coverage
96+
if: needs.check-coverage.outputs.coverage_below_threshold == 'true'
97+
98+
steps:
99+
- name: Send Slack Notification
100+
env:
101+
COVERAGE_PERCENT: ${{ needs.check-coverage.outputs.coverage_percent }}
102+
LOW_COVERAGE_SITES: ${{ needs.check-coverage.outputs.low_coverage_sites }}
103+
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
104+
REPOSITORY: ${{ github.repository }}
105+
PR_TITLE: ${{ github.event.pull_request.title }}
106+
PR_NUMBER: ${{ github.event.pull_request.number }}
107+
PR_URL: ${{ github.event.pull_request.html_url }}
108+
PR_SHA: ${{ github.event.pull_request.head.sha }}
109+
run: |
110+
curl -v -X POST -H 'Content-type: application/json' \
111+
--data '{
112+
"text": "⚠️ *Test Coverage Alert* ⚠️\n\nThe test coverage is below the required threshold of 90%.\n\n*Detected Coverage:* '"$COVERAGE_PERCENT"%'\n\n*Repository:* <https://github.com/'"$REPOSITORY"'|'"$REPOSITORY"'>\n*PR Title:* '"$PR_TITLE"'\n*PR Number:* #'"$PR_NUMBER"'\n*PR URL:* <'"$PR_URL"'|View PR>\n*Commit SHA:* `'"$PR_SHA"'`\n\n*Sites with Low Coverage:* \n`'"$LOW_COVERAGE_SITES"'`\n\nPlease review the test coverage and take action if necessary."
113+
}' \
114+
$SLACK_WEBHOOK_URL

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,5 @@ giza.log
3636
*.code-workspace
3737

3838
# GitHub Actions
39-
.secrets
39+
.secrets
40+
event.json

0 commit comments

Comments
 (0)