private function get_updates($assoc_args)
{
$url = 'https://api.github.com/repos/wp-cli/wp-cli/releases';
$options = array('timeout' => 30);
$headers = array('Accept' => 'application/json');
$response = Utils\http_request('GET', $url, $headers, $options);
if (!$response->success || 200 !== $response->status_code) {
WP_CLI::error(sprintf("Failed to get latest version (HTTP code %d).", $response->status_code));
}
$release_data = json_decode($response->body);
$updates = array('major' => false, 'minor' => false, 'patch' => false);
foreach ($release_data as $release) {
// Get rid of leading "v" if there is one set.
$release_version = $release->tag_name;
if ('v' === substr($release_version, 0, 1)) {
$release_version = ltrim($release_version, 'v');
}
$update_type = Utils\get_named_sem_ver($release_version, WP_CLI_VERSION);
if (!$update_type) {
continue;
}
if (!empty($updates[$update_type]) && !Comparator::greaterThan($release_version, $updates[$update_type]['version'])) {
continue;
}
$updates[$update_type] = array('version' => $release_version, 'update_type' => $update_type, 'package_url' => $release->assets[0]->browser_download_url);
}
foreach ($updates as $type => $value) {
if (empty($value)) {
unset($updates[$type]);
}
}
foreach (array('major', 'minor', 'patch') as $type) {
if (true === \WP_CLI\Utils\get_flag_value($assoc_args, $type)) {
return !empty($updates[$type]) ? array($updates[$type]) : false;
}
}
if (empty($updates) && preg_match('#-alpha-(.+)$#', WP_CLI_VERSION, $matches)) {
$version_url = 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/NIGHTLY_VERSION';
$response = Utils\http_request('GET', $version_url);
if (!$response->success || 200 !== $response->status_code) {
WP_CLI::error(sprintf("Failed to get current nightly version (HTTP code %d)", $response->status_code));
}
$nightly_version = trim($response->body);
if (WP_CLI_VERSION != $nightly_version) {
$updates['nightly'] = array('version' => $nightly_version, 'update_type' => 'nightly', 'package_url' => 'https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli-nightly.phar');
}
}
return array_values($updates);
}