2015-03-04 09:12:15 -08:00

121 lines
2.7 KiB
PHP

<?php
class Crunchbutton_Deploy_Server extends Cana_Table {
public function exports() {
$ex = $this->properties();
$ex['version'] = $this->version() ? $this->version()->exports() : null;
return $ex;
}
public static function byName($name) {
return Crunchbutton_Deploy_Server::q('select * from deploy_server where name=?', [$name])->get(0);
}
public static function currentVersion() {
$server = self::byName($_SERVER['SERVER_NAME']);
if ($server) {
$version = $server->version();
}
if ($version) {
$v = $version->version;
}
if (!$v) {
$v = Cana_Util::gitVersion();
}
return md5($v);
}
public function version() {
if (!isset($this->_version)) {
$this->_version = Crunchbutton_Deploy_Version::q("
select * from deploy_version
where status='success'
and id_deploy_server=?
order by date desc
limit 1
",[$this->id_deploy_server])->get(0);
}
return $this->_version;
}
public function versions() {
if (!isset($this->_versions)) {
$this->_versions = Crunchbutton_Deploy_Version::q('
select * from deploy_version
where id_deploy_server=?
order by date desc
', [$this->id_deploy_server]);
}
return $this->_versions;
}
public function commits() {
if (!isset($this->_commits)) {
$this->_commits = [];
$repo = explode('/', $this->repo);
$logs = Github::commits($repo[0], $repo[1], $repo[2]);
if ($logs) {
$travis = new Travis;
$status = $travis->status($repo[0],$repo[1]);
foreach ($logs as $log) {
$this->_commits[] = [
'commit' => $log['sha'],
'author' => $log['commit']['author']['name'],
'date' => $log['commit']['author']['date'],
'note' => $log['commit']['message'],
'status' => $status[$log['sha']]
];
}
}
}
return $this->_commits;
}
public function createTag($version) {
$name = date('ymd');
$inc = '00';
$tags = $this->tags();
while ($created == false) {
$inc++;
foreach ($tags as $tag) {
$tagName = str_replace('refs/tags/', '', $tag['ref']);
if ($tagName == $name.$inc) {
$created = false;
break;
}
}
$created = true;
$inc = sprintf('%02d', $inc);
if ($inc == 99) {
return false;
}
}
$tag = $name.'.'.$inc;
$repo = explode('/', $this->repo);
$log = Github::createTag($repo[0], $repo[1], $tag, $version, 'Created from Cockpit Deployment Tool');
$this->_commits = null;
return $tag;
}
public function tags() {
if (!isset($this->_tags) || $this->_tags === null) {
$repo = explode('/', $this->repo);
$this->_tags = Github::tags($repo[0], $repo[1]);
}
return $this->_tags;
}
public function __construct($id = null) {
parent::__construct();
$this
->table('deploy_server')
->idVar('id_deploy_server')
->load($id);
}
}