--- name: "Test Coverage Analysis" description: "Analyzes test coverage and generates coverage report" inputs: minimum-tests: description: "Minimum number of tests required" required: false default: "55" outputs: total-tests: description: "Total number of tests found" value: ${{ steps.coverage.outputs.total-tests }} passing-tests: description: "Number of passing tests" value: ${{ steps.coverage.outputs.passing-tests }} coverage-percent: description: "Test coverage percentage" value: ${{ steps.coverage.outputs.coverage-percent }} runs: using: "composite" steps: - name: Test Coverage Analysis id: coverage run: | echo "## Test Coverage Report" > coverage_report.md echo "" >> coverage_report.md # Run tests and capture output TEST_OUTPUT=$(npm test 2>&1) TOTAL_TESTS=$(echo "$TEST_OUTPUT" | grep -E "^\s+[0-9]+\." | wc -l) PASSING_TESTS=$(echo "$TEST_OUTPUT" | grep -E "^\s+[0-9]+\. ✓" | wc -l) FAILING_TESTS=$(echo "$TEST_OUTPUT" | grep -E "^\s+[0-9]+\. ✗" | wc -l) echo "- **Total Tests:** $TOTAL_TESTS" >> coverage_report.md echo "- **Passing:** $PASSING_TESTS ✅" >> coverage_report.md echo "- **Failing:** $FAILING_TESTS ❌" >> coverage_report.md if [ $TOTAL_TESTS -gt 0 ]; then COVERAGE_PERCENT=$(( (PASSING_TESTS * 100) / TOTAL_TESTS )) echo "- **Coverage:** $COVERAGE_PERCENT%" >> coverage_report.md else COVERAGE_PERCENT=0 fi echo "" >> coverage_report.md echo "### Test Files" >> coverage_report.md echo "$TEST_OUTPUT" | grep -E "^\s+[a-z_]+:" | sed 's/^/- /' >> coverage_report.md cat coverage_report.md # Set outputs echo "total-tests=$TOTAL_TESTS" >> $GITHUB_OUTPUT echo "passing-tests=$PASSING_TESTS" >> $GITHUB_OUTPUT echo "coverage-percent=$COVERAGE_PERCENT" >> $GITHUB_OUTPUT # Validate test coverage requirements if [ $TOTAL_TESTS -lt ${{ inputs.minimum-tests }} ]; then echo "❌ Expected at least ${{ inputs.minimum-tests }} tests, found $TOTAL_TESTS" exit 1 fi if [ $FAILING_TESTS -gt 0 ]; then echo "❌ Found $FAILING_TESTS failing tests" exit 1 fi echo "✅ Test coverage is acceptable: $PASSING_TESTS/$TOTAL_TESTS tests passing ($COVERAGE_PERCENT%)" shell: bash