Skip to content

Fix statement close behavior for direct results in SEA #1951

Fix statement close behavior for direct results in SEA

Fix statement close behavior for direct results in SEA #1951

Workflow file for this run

name: Code Coverage
permissions:
id-token: write
contents: read
on:
pull_request:
jobs:
coverage:
runs-on:
group: databricks-protected-runner-group
labels: linux-ubuntu-latest
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0 # Needed for coverage comparison
ref: ${{ github.event.pull_request.head.ref || github.ref_name }}
repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }}
- name: Set up JDK
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
java-version: '21'
distribution: 'adopt'
- name: Check if fork
id: fork-check
shell: bash
run: |
if [ "${{ github.event.pull_request.head.repo.full_name }}" != "" ] && \
[ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]; then
echo "is_fork=true" >> $GITHUB_OUTPUT
echo "This is a forked PR — will use cached dependencies"
else
echo "is_fork=false" >> $GITHUB_OUTPUT
echo "This is a same-repo PR — will use JFrog OIDC"
fi
- name: Setup Maven
uses: ./.github/actions/setup-maven
with:
is-fork: ${{ steps.fork-check.outputs.is_fork }}
- name: Run tests with coverage
run: mvn -pl jdbc-core clean test -Dgroups='!Jvm17PlusAndArrowToNioReflectionDisabled' jacoco:report -Ddependency-check.skip=true
- name: Check for coverage override
id: override
env:
PR_BODY: ${{ github.event.pull_request.body }}
run: |
OVERRIDE_COMMENT=$(echo "$PR_BODY" | grep -E "SKIP_COVERAGE_CHECK\s*=" || echo "")
if [ -n "$OVERRIDE_COMMENT" ]; then
echo "override=true" >> $GITHUB_OUTPUT
REASON=$(echo "$OVERRIDE_COMMENT" | sed -E 's/.*SKIP_COVERAGE_CHECK\s*=\s*(.+)/\1/')
echo "reason=$REASON" >> $GITHUB_OUTPUT
echo "Coverage override found in PR description: $REASON"
else
echo "override=false" >> $GITHUB_OUTPUT
echo "No coverage override found"
fi
- name: Check coverage percentage
if: steps.override.outputs.override == 'false'
run: |
COVERAGE_FILE="jdbc-core/target/site/jacoco/jacoco.xml"
if [ ! -f "$COVERAGE_FILE" ]; then
echo "ERROR: Coverage file not found at $COVERAGE_FILE"
exit 1
fi
# Install xmllint if not available
if ! command -v xmllint &> /dev/null; then
sudo apt-get update && sudo apt-get install -y libxml2-utils
fi
COVERED=$(xmllint --xpath "string(//report/counter[@type='INSTRUCTION']/@covered)" "$COVERAGE_FILE")
MISSED=$(xmllint --xpath "string(//report/counter[@type='INSTRUCTION']/@missed)" "$COVERAGE_FILE")
TOTAL=$((COVERED + MISSED))
# Use Python for floating-point math
PERCENTAGE=$(python3 -c "covered=${COVERED}; total=${TOTAL}; print(round((covered/total)*100, 2))")
echo "Branch Coverage: $PERCENTAGE%"
echo "Required Coverage: 85%"
# Use Python to compare the coverage with 85
python3 -c "import sys; sys.exit(0 if float('$PERCENTAGE') >= 85 else 1)"
if [ $? -eq 1 ]; then
echo "ERROR: Coverage is $PERCENTAGE%, which is less than the required 85%"
exit 1
else
echo "SUCCESS: Coverage is $PERCENTAGE%, which meets the required 85%"
fi
- name: Coverage enforcement summary
env:
OVERRIDE: ${{ steps.override.outputs.override }}
OVERRIDE_REASON: ${{ steps.override.outputs.reason }}
run: |
if [ "$OVERRIDE" == "true" ]; then
echo "Coverage checks bypassed: $OVERRIDE_REASON"
echo "Please ensure this override is justified and temporary"
else
echo "Coverage checks enforced - minimum 85% required"
fi