/**
* Updates repo based on status from travis.
*
* @param Bundle $bundle
*
* @return boolean
*/
public function update(Bundle $bundle)
{
$this->output->write(' Travis status:');
$response = $this->browser->get('http://travis-ci.org/' . $bundle->getOwnerName() . '/' . $bundle->getName() . '.json');
$status = json_decode($response->getContent(), true);
if (JSON_ERROR_NONE === json_last_error()) {
$lastBuildAt = new \DateTime();
$lastBuildAt->setTimestamp(strtotime($status['last_build_finished_at']));
// Only execute if date of last build is older than last update of bundle
if ($lastBuildAt < $bundle->getUpdatedAt()) {
$state = Activity::STATE_UNKNOWN;
if (0 === $status['last_build_status']) {
$bundle->setTravisCiBuildStatus(true);
$state = Activity::STATE_OPEN;
$this->output->write(' success');
} elseif (1 === $status['last_build_status']) {
$bundle->setTravisCiBuildStatus(false);
$state = Activity::STATE_CLOSED;
$this->output->write(' failed');
}
if (Activity::STATE_UNKNOWN !== $state) {
$activity = new Activity();
$activity->setType(Activity::ACTIVITY_TYPE_TRAVIS_BUILD);
$activity->setState($state);
$activity->setBundle($bundle);
return true;
}
} else {
$this->output->write(' skipped');
return true;
}
}
$bundle->setTravisCiBuildStatus(null);
$this->output->write(' error');
return false;
}