Skip to content

Merge pull request #39 from Syncrobotic/dev #40

Merge pull request #39 from Syncrobotic/dev

Merge pull request #39 from Syncrobotic/dev #40

Workflow file for this run

name: CI
on:
push:
branches: [ main, dev ]
pull_request:
branches: [ main, dev ]
workflow_dispatch:
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Build JVM target
run: ./gradlew jvmMainClasses
- name: Build Android target
run: ./gradlew bundleReleaseAar
- name: Build iOS framework
run: ./gradlew linkPodReleaseFrameworkIosArm64
# Level 1: Unit Tests + E2E (MockWhepWhipServer)
- name: Run Level 1 tests
run: ./gradlew jvmTest
# Level 2: Testcontainers MediaMTX (Docker is pre-installed on macos-latest)
- name: Run Level 2 tests (Testcontainers MediaMTX)
run: ./gradlew jvmTest --tests "com.syncrobotic.webrtc.e2e.MediaMTX*" --no-build-cache
- name: Test summary
if: always()
run: |
XML_DIR="build/test-results/jvmTest"
if [ -d "$XML_DIR" ]; then
TESTS=$(grep -roh 'tests="[0-9]*"' "$XML_DIR" | grep -o '[0-9]*' | paste -sd+ - | bc)
FAILURES=$(grep -roh 'failures="[0-9]*"' "$XML_DIR" | grep -o '[0-9]*' | paste -sd+ - | bc)
ERRORS=$(grep -roh 'errors="[0-9]*"' "$XML_DIR" | grep -o '[0-9]*' | paste -sd+ - | bc)
SKIPPED=$(grep -roh 'skipped="[0-9]*"' "$XML_DIR" | grep -o '[0-9]*' | paste -sd+ - | bc)
PASSED=$((TESTS - FAILURES - ERRORS - SKIPPED))
echo "## Test Results" >> "$GITHUB_STEP_SUMMARY"
echo "| Total | Passed | Failed | Errors | Skipped |" >> "$GITHUB_STEP_SUMMARY"
echo "|-------|--------|--------|--------|---------|" >> "$GITHUB_STEP_SUMMARY"
echo "| $TESTS | $PASSED | $FAILURES | $ERRORS | $SKIPPED |" >> "$GITHUB_STEP_SUMMARY"
echo ""
echo "📊 Tests: $TESTS | ✅ Passed: $PASSED | ❌ Failed: $FAILURES | 🚨 Errors: $ERRORS | ⏭️ Skipped: $SKIPPED"
else
echo "⚠️ No test results found at $XML_DIR"
fi
# Coverage report (printed to summary, not uploaded)
- name: Coverage report
if: always()
run: |
./gradlew koverXmlReport || true
REPORT="build/reports/kover/report.xml"
if [ -f "$REPORT" ]; then
INSTRUCTION=$(grep -o 'type="INSTRUCTION"[^/]*' "$REPORT" | head -1)
MISSED=$(echo "$INSTRUCTION" | grep -o 'missed="[0-9]*"' | grep -o '[0-9]*')
COVERED=$(echo "$INSTRUCTION" | grep -o 'covered="[0-9]*"' | grep -o '[0-9]*')
if [ -n "$MISSED" ] && [ -n "$COVERED" ]; then
TOTAL=$((MISSED + COVERED))
if [ "$TOTAL" -gt 0 ]; then
PCT=$((COVERED * 100 / TOTAL))
echo "## Coverage" >> "$GITHUB_STEP_SUMMARY"
echo "| Covered | Missed | Total | Coverage |" >> "$GITHUB_STEP_SUMMARY"
echo "|---------|--------|-------|----------|" >> "$GITHUB_STEP_SUMMARY"
echo "| $COVERED | $MISSED | $TOTAL | **${PCT}%** |" >> "$GITHUB_STEP_SUMMARY"
echo ""
echo "📈 Coverage: ${PCT}% ($COVERED / $TOTAL instructions)"
fi
fi
else
echo "⚠️ No coverage report found"
fi
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: build/reports/tests/
retention-days: 14