diff --git a/PHPCI/Controller/BuildStatusController.php b/PHPCI/Controller/BuildStatusController.php
index 54132401..9c2db5ab 100644
--- a/PHPCI/Controller/BuildStatusController.php
+++ b/PHPCI/Controller/BuildStatusController.php
@@ -37,31 +37,56 @@ class BuildStatusController extends \PHPCI\Controller
$this->projectStore = Store\Factory::getStore('Project');
}
+ /**
+ * Returns status of the last build
+ * @param $projectId
+ * @return string
+ */
+ protected function _getStatus($projectId)
+ {
+ $branch = $this->getParam('branch', 'master');
+ try {
+ $project = $this->projectStore->getById($projectId);
+ $status = 'passing';
+
+ if (!$project->getAllowPublicStatus()) {
+ die();
+ }
+
+ if (isset($project) && $project instanceof Project) {
+ $build = $project->getLatestBuild($branch, array(2,3));
+
+ if (isset($build) && $build instanceof Build && $build->getStatus() != 2) {
+ $status = 'failed';
+ }
+ }
+ } catch (\Exception $e) {
+ $status = 'error';
+ }
+
+ return $status;
+ }
+
/**
* Returns the appropriate build status image for a given project.
*/
public function image($projectId)
{
- $branch = $this->getParam('branch', 'master');
- $project = $this->projectStore->getById($projectId);
- $status = 'ok';
-
- if (!$project->getAllowPublicStatus()) {
- die();
- }
-
- if (isset($project) && $project instanceof Project) {
- $build = $project->getLatestBuild($branch, array(2,3));
-
- if (isset($build) && $build instanceof Build && $build->getStatus() != 2) {
- $status = 'failed';
- }
- }
-
+ $status = $this->_getStatus($projectId);
header('Content-Type: image/png');
die(file_get_contents(APPLICATION_PATH . 'public/assets/img/build-' . $status . '.png'));
}
+ /**
+ * Returns the appropriate build status image in SVG format for a given project.
+ */
+ public function svg($projectId)
+ {
+ $status = $this->_getStatus($projectId);
+ header('Content-Type: image/svg+xml');
+ die(file_get_contents(APPLICATION_PATH . 'public/assets/img/build-' . $status . '.svg'));
+ }
+
public function view($projectId)
{
$project = $this->projectStore->getById($projectId);
diff --git a/public/assets/img/build-error.svg b/public/assets/img/build-error.svg
new file mode 100644
index 00000000..a6567a32
--- /dev/null
+++ b/public/assets/img/build-error.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/build-failed.svg b/public/assets/img/build-failed.svg
new file mode 100644
index 00000000..c7afed21
--- /dev/null
+++ b/public/assets/img/build-failed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/build-ok.png b/public/assets/img/build-passing.png
similarity index 100%
rename from public/assets/img/build-ok.png
rename to public/assets/img/build-passing.png
diff --git a/public/assets/img/build-passing.svg b/public/assets/img/build-passing.svg
new file mode 100644
index 00000000..42f797eb
--- /dev/null
+++ b/public/assets/img/build-passing.svg
@@ -0,0 +1 @@
+
\ No newline at end of file