summaryrefslogtreecommitdiffstats
path: root/autobuild/index.php
blob: 40fd7a9ca3d1597313748512be5a13b8a434c230 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<html>
<head>
<?php

$runs = Array();
$handle = opendir('cauldron/x86_64/core/');
while (false !== ($entry = readdir($handle))) {
	if (preg_match("/^....-..-..$/", $entry, $matches)) {
		array_push($runs, $matches[0]);
	}
}
closedir($handle);
sort($runs);

$run = $_GET['run'];
if (!$run) {
	$run = readlink("cauldron/x86_64/core/latest");
}

foreach ($runs as $r) {
	if ($r==$run) {
		break;
	}
	$prev = $r;
}
$packages = Array();
if ($handle = opendir('/distrib/bootstrap/distrib/cauldron/SRPMS/core/release/')) {
	while (false !== ($entry = readdir($handle))) {
		if (preg_match("/(.*)-([^-]*-[^-]*mga)[1-9].src.rpm/", $entry, $matches)) {
			$packages[$matches[1]] = $matches[2];
		}
	}
	closedir($handle);
}

$prev_failure = Array();
if ($prev) {
	$base_dir = "cauldron/x86_64/core/$prev";
	$status_name = "$base_dir/status.core.log";
	$status_file = fopen($status_name, "r");
	while (!feof($status_file)) {
		$line = fgets($status_file);
		if (preg_match("/^(.*): (.*)$/", $line, $matches)) {
			$rpm = $matches[1];
			$status = $matches[2];
			if ($status != "ok" && $status != "unknown" && $status != "not_on_this_arch") {
				$prev_failure[$rpm] = 1;
			}
		}
	}
	fclose($status_file);
}

$success = Array();
$failure = Array();
$fixed = Array();
$removed = Array();

$base_dir = "cauldron/x86_64/core/$run";


$status_name = "$base_dir/status.core.log";
if (!file_exists($status_name)) {
	echo "Invalid run";
	exit;
}
$status_file = fopen($status_name, "r");

while (!feof($status_file)) {
	$line = fgets($status_file);
	if (preg_match("/^(.*): (.*)$/", $line, $matches)) {
		$rpm = $matches[1];
		$status = $matches[2];
		if ($status == "ok") {
			array_push($success, $rpm);
		} elseif ($status != "unknown" && $status != "not_on_this_arch"){
			array_push($failure, $rpm);
			preg_match("/(.*)-([^-]*-[^-]*mga)[1-9].src.rpm/", $rpm, $matches);
			if(!$packages[$matches[1]]) {
				$removed[$rpm] = 1;
			} elseif ($packages[$matches[1]] != $matches[2]) {
				$fixed[$rpm] = 1;
			}
		}
	}
}
fclose($status_file);

sort($success);
sort($failure);

$nb_failed = count($failure);
$nb_success = count($success);
$nb_fixed = count($fixed);
$nb_removed = count($removed);
$nb_tried = $nb_failed + $nb_success;
$succes_percent = round($nb_success*1000/$nb_tried)/10;
$estimated_percent = round(($nb_success+$nb_fixed)*1000/($nb_tried-$nb_removed))/10;

echo "<title>$succes_percent% Success</title>\n";
echo "</head><body>\n";

echo "<h1>$succes_percent% Success</h1>\n";
echo "$nb_fixed packages have been fixed since this run and $nb_removed have been removed.<br/> If no new package was broken, success rate next time should be $estimated_percent%.<br/>\n";
echo "<div style='float:left'><h1>Failed builds ($nb_failed/$nb_tried):</h1><ul>";

foreach ($failure as $rpm) {
	$status = "";
	if ($fixed[$rpm]) {
		$status = " <span style='color:green;'><b>Fixed!</b></span>";
	} elseif ($removed[$rpm]) {
		$status = " <span style='color:yellow;'><b>Removed</b></span>";
	} elseif ($prev && !$prev_failure[$rpm]) {
		$status = " <span style='color:red;'><b>New!</b></span>";
	}
	echo "<li><a href='$base_dir/$rpm/'>$rpm</a>$status</li>\n";
}

echo "</ul></div><div style='float:right'><h1>Successful builds ($nb_success/$nb_tried):</h1><ul>";

foreach ($success as $rpm) {
	echo "<li><a href='$base_dir/$rpm/'>$rpm</a></li>\n";
}

?>
</ul></div>
</body>
</html>