Skip to content

Minor unit test enhancement #6807

Minor unit test enhancement

Minor unit test enhancement #6807

Workflow file for this run

name: Build and Deploy Snapshot
on:
push:
branches: ['3.*']
paths-ignore:
- "README.md"
- "release-notes/*"
pull_request:
paths-ignore:
- "README.md"
- "release-notes/*"
permissions:
contents: read
pull-requests: write
jobs:
build:
# Here we DO need "os" option, to include Windows
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
java_version: ['17', '21', '25']
os: ['ubuntu-24.04']
include:
- java_version: '17'
os: 'ubuntu-24.04'
release_build: 'R'
- java_version: '17'
os: 'windows-latest'
is_windows: 'W'
env:
JAVA_OPTS: "-XX:+TieredCompilation -XX:TieredStopAtLevel=1"
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
- name: Set up JDK
uses: actions/setup-java@dded0888837ed1f317902acf8a20df0ad188d165 # v5.0.0
with:
distribution: 'temurin'
java-version: ${{ matrix.java_version }}
cache: 'maven'
server-id: central-snapshots
server-username: CI_DEPLOY_USERNAME
server-password: CI_DEPLOY_PASSWORD
# See https://github.com/actions/setup-java/blob/v2/docs/advanced-usage.md#Publishing-using-Apache-Maven
# gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} # Value of the GPG private key to import
# gpg-passphrase: MAVEN_GPG_PASSPHRASE # env variable for GPG private key passphrase
- name: Build
run: ./mvnw -B -ff -ntp verify
- name: Extract project Maven version
id: projectVersion
if: ${{ !matrix.is_windows }}
run: echo "version=$(./mvnw org.apache.maven.plugins:maven-help-plugin:3.5.1:evaluate -DforceStdout -Dexpression=project.version -q)" >> $GITHUB_OUTPUT
- name: Verify Android SDK Compatibility
if: ${{ matrix.release_build }}
run: ./mvnw -B -q -ff -ntp -DskipTests animal-sniffer:check
- name: Deploy snapshot
if: ${{ matrix.release_build && github.event_name != 'pull_request' && endsWith(steps.projectVersion.outputs.version, '-SNAPSHOT') }}
env:
CI_DEPLOY_USERNAME: ${{ secrets.CENTRAL_DEPLOY_USERNAME }}
CI_DEPLOY_PASSWORD: ${{ secrets.CENTRAL_DEPLOY_PASSWORD }}
# MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
run: ./mvnw -B -q -ff -DskipTests -ntp source:jar deploy
- name: Generate code coverage
if: ${{ matrix.release_build }}
run: ./mvnw -B -q -ff -ntp test jacoco:report
- name: Publish code coverage
if: ${{ matrix.release_build && github.event_name != 'pull_request' }}
uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./target/site/jacoco/jacoco.xml
flags: unittests
- name: Generate coverage summary
if: ${{ matrix.release_build && github.event_name == 'pull_request' }}
id: jacoco
uses: cicirello/[email protected]
with:
jacoco-csv-file: target/site/jacoco/jacoco.csv
generate-coverage-badge: false
generate-branches-badge: false
generate-summary: true
- name: Add coverage comment to PR
if: ${{ matrix.release_build && github.event_name == 'pull_request' }}
run: |
# Convert decimal to percentage and round to 1 decimal place
COVERAGE=$(awk -v cov="${{ steps.jacoco.outputs.coverage }}" 'BEGIN { printf "%.1f", cov * 100 }')
BRANCHES=$(awk -v br="${{ steps.jacoco.outputs.branches }}" 'BEGIN { printf "%.1f", br * 100 }')
# Determine color for coverage badge using awk (more portable than bc)
COV_COLOR=$(awk -v cov="$COVERAGE" 'BEGIN {
if (cov >= 80) print "brightgreen"
else if (cov >= 60) print "green"
else if (cov >= 40) print "yellow"
else print "red"
}')
BR_COLOR=$(awk -v br="$BRANCHES" 'BEGIN {
if (br >= 80) print "brightgreen"
else if (br >= 60) print "green"
else if (br >= 40) print "yellow"
else print "red"
}')
COMMENT_BODY="## :test_tube: Code Coverage Report
| Metric | Coverage |
|--------|----------|
| **Instructions** | ![coverage](https://img.shields.io/badge/coverage-${COVERAGE}%25-${COV_COLOR}) **${COVERAGE}%** |
| **Branches** | ![branches](https://img.shields.io/badge/branches-${BRANCHES}%25-${BR_COLOR}) **${BRANCHES}%** |
> Coverage data generated from JaCoCo test results
<!-- jacoco-coverage-comment -->"
# Find and delete existing coverage comment
COMMENT_ID=$(gh pr view ${{ github.event.pull_request.number }} --json comments --jq '.comments[] | select(.body | contains("<!-- jacoco-coverage-comment -->")) | .id' | head -1)
if [ -n "$COMMENT_ID" ]; then
gh api -X DELETE "repos/${{ github.repository }}/issues/comments/$COMMENT_ID"
fi
# Post new comment
gh pr comment ${{ github.event.pull_request.number }} --body "$COMMENT_BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
trigger-dep-build-v2:
name: Trigger v2 dep builds
needs: [build]
# Only for pushes to 2.x (next 2.x being developed) branch
if: ${{ github.event_name == 'push' && github.ref_name == '2.x' }}
uses: ./.github/workflows/trigger_dep_builds_v2.yml
secrets:
token: ${{ secrets.REPO_DISPATCH }}
trigger-dep-build-v3:
name: Trigger v3 dep builds
needs: [build]
# Only for pushes to 3.x branch
if: ${{ github.event_name == 'push' && github.ref_name == '3.x' }}
uses: ./.github/workflows/trigger_dep_builds_v3.yml
secrets:
token: ${{ secrets.REPO_DISPATCH }}