hash = $hash; $build->result = -1; $build->project = $project; $file = MICOBU_BASE . "/". $project->name . "/" . $hash . "/meta.json"; if (file_exists($file)) { $json = json_decode(file_get_contents($file)); $build->hash = $json->hash; $build->result = $json->result; $build->time_start = $json->time_start; $build->time_stop = $json->time_stop; $build->description = $json->description; } return $build; } function scan_project($name) { $project = new micobu_project(); $project->name = $name; $project->builds = array(); $dirs = glob_sorted_mtime(MICOBU_BASE . "/" . $name); foreach ($dirs as $dir) { $hash = basename($dir); $project->builds += array($hash => scan_build($project, $hash)); } return $project; } function micobu_scan() { $projects = array(); foreach (glob(MICOBU_BASE . "/*", GLOB_ONLYDIR) as $project_path) { $project_name = basename($project_path); $projects += array($project_name => scan_project($project_name)); } return $projects; } function micobu_get_trend($project) { foreach ($project->builds as $build) { if ($build->result > 0) return ""; else return ""; } return "⌛"; return "🔼"; return "❗"; } function micobu_get_build_icon($build, $verbose = false) { $verb = ($verbose ? ($build->result > 0 ? " Build failed with return code " . $build->result : " Build succeeded") : ""); if ($build->result > 0) return "$verb"; else return ""; } function micobu_get_build_time($build) { return gmdate("i\m s\s", $build->time_stop - $build->time_start); } function micobu_get_weblink($build, $filename) { return MICOBU_BASE_LINK . "/" . $build->project->name . "/" . $build->hash . "/" . $filename; } function micobu_get_dl_buttons($build) { return "📰 🛈 📂"; } $projects = micobu_scan(); if (isset($_GET['p'])) { $selected_project = $_GET['p']; preg_match("/^[_\-A-Za-z0-9]{1,20}$/", $selected_project, $matches); if (!$matches) die("Invalid request."); if (!isset($projects[$selected_project])) die("Invalid project."); if (isset($_GET['h'])) { $selected_hash = $_GET['h']; preg_match("/^[_\-A-Za-z0-9]{1,40}$/", $selected_hash, $matches); if (!$matches) die("Invalid request."); if (!isset($projects[$selected_project]->builds[$selected_hash])) die("Invalid hash."); } } ?> $selected_project" : ""); $dpath .= (isset($selected_hash) ? " / $selected_hash" : ""); echo "

Micobu CI Dashboard$dpath

"; ?>
builds[$selected_hash]); $build = $projects[$selected_project]->builds[$selected_hash]; echo ""; echo ""; echo ""; echo ""; echo ""; ?> "; } else if (isset($selected_project)) { echo "
Build status" . micobu_get_build_icon($build, true). "
Build time" . micobu_get_build_time($build) . "
Commit info" . $build->hash . " (" . $build->description . ")
Download" . micobu_get_dl_buttons($build) . "

Loading log...
"; foreach ($projects[$selected_project]->builds as $hash => $build) { echo ""; } echo "
" . date(DATE_RFC2822, $build->time_start) . "" . micobu_get_build_icon($build) . "" . $build->description . "" . micobu_get_dl_buttons($build) . "
"; } else { echo ""; foreach ($projects as $project) { echo ""; } echo "
" . $project->name . "" . micobu_get_trend($project) . "
"; } ?>