Skip to content

Commit 7527130

Browse files
committed
Add new 'CoverageBadge' library
This commit introduces the 'CoverageBadge' library designed to create an SVG coverage badge from a Clover XML file. Various files including README.md, badge.svg template file, coverage-badge.php, and composer.json have been added detailing installation, usage, and other necessary information.
0 parents  commit 7527130

File tree

5 files changed

+108
-0
lines changed

5 files changed

+108
-0
lines changed

README.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# CoverageBadge
2+
3+
CoverageBadge is a library for creating an SVG coverage badge from a Clover XML file.
4+
5+
## Installation
6+
7+
Composer!
8+
9+
10+
## Usage
11+
12+
1. Generate [XML Code Coverage](https://phpunit.de/manual/current/en/logging.html#logging.codecoverage.xml) using [PHPUnit](https://phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.logging)
13+
2. Run `vendor/bin/coverage-badge /path/to/clover.xml /path/to/badge/destination.svg type_of_test`
14+
* e.g. `vendor/bin/php-coverage-badge build/clover.xml report/coverage.svg unit-test`

bin/coverage-badge

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
#!/usr/bin/env php
2+
<?php
3+
include(__DIR__ . '/../coverage-badge.php');

composer.json

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "codebtech/coveragebadge",
3+
"description": "Creates code coverage badge from a Clover XML file.",
4+
"type": "library",
5+
"license": "MIT",
6+
"homepage": "https://github.com/codebtech/coveragebadge",
7+
"authors": [
8+
{
9+
"name": "Mohan Raj",
10+
"homepage": "https://github.com/m0hanraj"
11+
}
12+
],
13+
"bin": [
14+
"bin/coverage-badge"
15+
]
16+
}

coverage-badge.php

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
$inputFile = $argv[1];
4+
$outputFile = $argv[2];
5+
$coverageName = isset($argv[3]) ? $argv[3] : 'coverage';
6+
7+
if (!file_exists($inputFile)) {
8+
throw new InvalidArgumentException('Invalid input file provided');
9+
}
10+
11+
try {
12+
$xml = new SimpleXMLElement(file_get_contents($inputFile));
13+
14+
$metrics = $xml->xpath('//metrics');
15+
$totalElements = 0;
16+
$checkedElements = 0;
17+
18+
foreach ($metrics as $metric) {
19+
$totalElements += (int) $metric['elements'];
20+
$checkedElements += (int) $metric['coveredelements'];
21+
}
22+
23+
$coverage = (int)(($totalElements === 0) ? 0 : ($checkedElements / $totalElements) * 100);
24+
25+
$template = file_get_contents(__DIR__ . '/templates/badge.svg');
26+
27+
$template = str_replace('{{ total }}', $coverage, $template);
28+
29+
$template = str_replace('{{ coverage }}', $coverageName, $template);
30+
31+
$color = '#a4a61d'; // Default Gray
32+
if ($coverage < 40) {
33+
$color = '#e05d44'; // Red
34+
} elseif($coverage < 60) {
35+
$color = '#fe7d37'; // Orange
36+
} elseif($coverage < 75) {
37+
$color = '#dfb317'; // Yellow
38+
} elseif($coverage < 90) {
39+
$color = '#a4a61d'; // Yellow-Green
40+
} elseif($coverage < 95) {
41+
$color = '#97CA00'; // Green
42+
} elseif ($coverage <= 100) {
43+
$color = '#4c1'; // Bright Green
44+
}
45+
46+
$template = str_replace('{{ total }}', $coverage, $template);
47+
$template = str_replace('{{ color }}', $color, $template);
48+
49+
file_put_contents($outputFile, $template);
50+
} catch (Exception $e) {
51+
echo $e->getMessage();
52+
}
53+
54+

templates/badge.svg

+21
Loading

0 commit comments

Comments
 (0)