Skip to content

Add coverage badge

Add coverage badge #82

Workflow file for this run

name: JavaCrypt Test
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
build:
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
java: [11, 17, 21, 25]
steps:
- name: Checkout Repository
uses: actions/checkout@v7
- name: Set up JDK
uses: actions/setup-java@v6.0.1
with:
distribution: 'temurin'
java-version: ${{ matrix.java }}
cache: 'maven'
- name: Build and test with Maven
run: ./mvnw -B verify
- name: Upload coverage report
if: matrix.os == 'ubuntu-latest' && matrix.java == 21
uses: actions/upload-artifact@v4
with:
name: jacoco-report
path: target/site/jacoco
- name: Start Tool (usage must exit with code 1)
run: |
set +e
java -jar target/JavaCrypt.jar
code=$?
if [ "$code" -ne 1 ]; then
echo "Expected exit code 1, got $code"
exit 1
fi
- name: Generate Keys
run: java -jar target/JavaCrypt.jar -genkeys priv.key pub.key
- name: create Test (clear) File
run: |
crypt_file="weather_report.txt"
if [ ! -e "$crypt_file" ]; then
echo "Dear readers, today's weather is best described as a blend of unpleasant dampness and ominous clouds." > "$crypt_file"
else
exit 1
fi
touch encrypt.txt
touch decrypt.txt
- name: encrypt file
run: java -jar target/JavaCrypt.jar -encrypt pub.key weather_report.txt encrypt.txt
- name: decrypt file
run: java -jar target/JavaCrypt.jar -decrypt priv.key encrypt.txt decrypt.txt
- name: compare files
run: |
datei1="decrypt.txt"
datei2="weather_report.txt"
cat $datei1
cat $datei2
if [ -e "$datei1" ] && [ -e "$datei2" ]; then
if ! cmp -s "$datei1" "$datei2"; then
exit 1
fi
fi
- name: Clean Up
run: |
rm -rf *.key
rm -rf *.txt
git clean -fX
coverage-badge:
if: github.event_name == 'push'
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout Repository
uses: actions/checkout@v7
- name: Set up JDK
uses: actions/setup-java@v6.0.1
with:
distribution: 'temurin'
java-version: 21
cache: 'maven'
- name: Run tests with coverage
run: ./mvnw -B verify
- name: Create badge file
run: |
mkdir -p badge
python3 - <<'PY'
import csv, json
rows = list(csv.DictReader(open('target/site/jacoco/jacoco.csv')))
covered = sum(int(r['INSTRUCTION_COVERED']) for r in rows)
missed = sum(int(r['INSTRUCTION_MISSED']) for r in rows)
pct = round(100 * covered / (covered + missed))
color = ('brightgreen' if pct >= 90 else 'green' if pct >= 80 else
'yellowgreen' if pct >= 70 else 'yellow' if pct >= 60 else
'orange' if pct >= 50 else 'red')
json.dump({'schemaVersion': 1, 'label': 'coverage',
'message': f'{pct}%', 'color': color},
open('badge/coverage.json', 'w'))
PY
cat badge/coverage.json
- name: Publish badge to badges branch
run: |
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git fetch origin badges || true
if git rev-parse --verify origin/badges >/dev/null 2>&1; then
git worktree add badges-wt origin/badges
else
git worktree add --detach badges-wt
git -C badges-wt checkout --orphan badges
git -C badges-wt rm -rf . >/dev/null
fi
cp badge/coverage.json badges-wt/coverage.json
cd badges-wt
git add coverage.json
if git diff --cached --quiet; then
echo "Badge unchanged"
else
git commit -m "Update coverage badge"
git push origin HEAD:badges
fi