Skip to content

zdl-kotlin: refactor and Zfl language support #16

zdl-kotlin: refactor and Zfl language support

zdl-kotlin: refactor and Zfl language support #16

Workflow file for this run

name: Verify Main and Publish Coverage
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Cache Gradle packages
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build and test with coverage
run: ./gradlew build koverHtmlReport koverLog
- name: Print coverage to console
id: coverage
run: ./gradlew koverPrintCoverageDetailed
if: always()
- name: Upload coverage reports
uses: actions/upload-artifact@v4
if: always()
with:
name: coverage-reports
path: |
build/reports/kover/
build/reports/tests/
- name: Checkout badges branch
uses: actions/checkout@v4
if: github.event_name != 'pull_request'
with:
ref: badges
path: badges
- name: Generate coverage badges
if: github.event_name != 'pull_request'
run: |
# Extract coverage percentages from Kover detailed output
OUTPUT=$(./gradlew koverPrintCoverageDetailed --console=plain 2>&1)
LINE_COVERAGE=$(echo "$OUTPUT" | grep "coverage =" | grep -oP '\d+\.\d+' | awk '{printf "%.0f", $1}')
BRANCH_COVERAGE=$(echo "$OUTPUT" | grep "branches =" | grep -oP '\d+\.\d+' | awk '{printf "%.0f", $1}')
echo "Line Coverage: $LINE_COVERAGE%"
echo "Branch Coverage: $BRANCH_COVERAGE%"
# Generate badge color based on line coverage
if [ "$LINE_COVERAGE" -ge 80 ]; then
LINE_COLOR="brightgreen"
elif [ "$LINE_COVERAGE" -ge 60 ]; then
LINE_COLOR="yellow"
else
LINE_COLOR="red"
fi
# Generate badge color based on branch coverage
if [ "$BRANCH_COVERAGE" -ge 80 ]; then
BRANCH_COLOR="brightgreen"
elif [ "$BRANCH_COVERAGE" -ge 60 ]; then
BRANCH_COLOR="yellow"
else
BRANCH_COLOR="red"
fi
# Create badge directory if it doesn't exist
mkdir -p badges
# Download badges from shields.io
curl -o badges/coverage.svg "https://img.shields.io/badge/line%20coverage-${LINE_COVERAGE}%25-${LINE_COLOR}"
curl -o badges/branch-coverage.svg "https://img.shields.io/badge/branch%20coverage-${BRANCH_COVERAGE}%25-${BRANCH_COLOR}"
echo "LINE_COVERAGE=$LINE_COVERAGE" >> $GITHUB_ENV
echo "BRANCH_COVERAGE=$BRANCH_COVERAGE" >> $GITHUB_ENV
- name: Commit and push coverage badges
if: github.event_name != 'pull_request'
run: |
cd badges
if [[ `git status --porcelain` ]]; then
git config --global user.name 'github-actions'
git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com'
git add coverage.svg branch-coverage.svg
git commit -m "Update coverage badges: line ${{ env.LINE_COVERAGE }}%, branch ${{ env.BRANCH_COVERAGE }}%"
git push
fi
- name: Log coverage percentage
run: |
echo "coverage = ${{ env.LINE_COVERAGE }}"
echo "branches = ${{ env.BRANCH_COVERAGE }}"