Repository navigation
Add coverage badge #82
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |