public static function getPackages($username) { $packagistClient = new \Packagist\Api\Client(); //$packages = $packagistClient->search($username); // didn't notice much difference between multiple requests or a generic // search with multiple results. // this could be faster if I checked here if there was a path found already $packages = []; $packageNames = $packagistClient->all(array('vendor' => $username)); foreach ($packageNames as $name) { array_push($packages, $packagistClient->get($name)); } return $packages; }
} else { $min = false; } // Get all keywords $client = new Packagist\Api\Client(); $keywords = []; $n = 0; $projects = $client->all(); $count = count($projects); $bar = new Dariuszp\CliProgressBar($count); echo 'Pass 1/2: Analyzing projects' . PHP_EOL; $bar->display(); foreach ($projects as $key => $name) { $bar->progress(); try { $package = $client->get($name); $versions = $package->getVersions(); if (!empty($versions)) { $n++; foreach (reset($versions)->getKeywords() as $keyword) { if (!isset($keywords[$keyword])) { $keywords[$keyword] = 0; } $keywords[$keyword]++; } } } catch (Exception $e) { } } // Sort the keywords arsort($keywords);
/** * runs the actual steps to verify if there are updates available * * @param SS_HTTPRequest $request */ public function run($request) { // Retrieve the packages $packages = $this->getPackages(); $dependencies = $this->getDependencies(); // Load the Packagist API $packagist = new Packagist\Api\Client(); // run through the packages and check each for updates foreach ($packages as $package) { // verify that we need to check this package. if (!isset($dependencies[$package])) { continue; } else { // get information about this package from packagist. try { $latest = $packagist->get($package); } catch (Guzzle\Http\Exception\ClientErrorResponseException $e) { SS_Log::log($e->getMessage(), SS_Log::WARN); continue; } // Check if there is a newer version $currentVersion = $dependencies[$package]; $result = $this->hasUpdate($currentVersion, $latest->getVersions()); // Check if there is a newer version and if so record the update if ($result !== false) { $this->recordUpdate($package, $currentVersion, $result); } } } // finished message $this->message('The task finished running. You can find the updated information in the database now.'); }
* * */ use Symfony\Component\Console\Application; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; /** @var Application $console */ $console->register('packagist:process-package')->setDefinition(array(new InputArgument('name', InputArgument::REQUIRED, 'name of the package'), new InputArgument('dir', InputArgument::REQUIRED, 'Directory to put the signature files into')))->setDescription('find all packages with this exact name and create signatures')->setCode(function (InputInterface $input, OutputInterface $output) use($config) { $name = $input->getArgument('name'); $dir = $input->getArgument('dir'); $client = new Packagist\Api\Client(); $SignatureClient = new \Cotya\SignatureChainer\Client($config['userAgent'], $config['githubApiToken']); $storage = new \Cotya\SignatureChainer\Storage($dir . '/signatures'); $packages = $client->get($name); $numberOfVersions = count($packages->getVersions()); $output->writeln("found {$numberOfVersions} versions for {$packages->getName()}"); foreach ($packages->getVersions() as $version) { /** @var \Packagist\Api\Result\Package\Version $version */ if (!is_numeric(mb_substr($version->getVersionNormalized(), 0, 1, 'utf-8')) || mb_stripos($version->getVersionNormalized(), '-dev') !== false) { $output->writeln('jump over version: ' . $version->getVersionNormalized()); continue; } $dist = $version->getDist(); if (!$dist || !$dist->getUrl()) { $output->writeln('no Dist url found '); var_dump($dist); continue; } if ($storage->doesSignatureExist($packages->getName(), $version->getVersionNormalized(), $config['storageKey'])) {
public function process() { // Retrieve the packages $packages = $this->getPackages(); $dependencies = $this->getDependencies(); // Load the Packagist API require_once BASE_PATH . '/vendor/autoload.php'; $packagist = new Packagist\Api\Client(); // Record updates we need to notify about $updates = array(); // Loop through each package foreach ($packages as $package) { echo PHP_EOL; $this->logMessage('Checking ' . $package); // Get the currentVersion if (!isset($dependencies[$package])) { $this->logMessage($package . ' cannot be found in composer.json'); continue; } else { $currentVersion = $dependencies[$package]; $currentStability = $this->getStability($currentVersion); $versionDesc = $currentVersion; if ($currentStability !== 'stable') { $versionDesc .= '-' . $currentStability; } $this->logMessage('Installed: ' . $versionDesc, true); } // Get the details from packagist try { $latest = $packagist->get($package); } catch (Guzzle\Http\Exception\ClientErrorResponseException $ex) { $this->logMessage($ex->getMessage()); continue; } $versions = $latest->getVersions(); // Check if there is a newer version $result = $this->hasUpdate($currentVersion, $versions); if ($result === false) { $this->logMessage('Up to date'); } else { $this->logMessage('Update to ' . $result); } // Record the result and check if any update is newer than one we knew about before $update = $this->recordUpdate($package, $currentVersion, $result); if ($update) { $updates[$package] = array('package' => $package, 'installed' => $versionDesc, 'latest' => $result); } } // Email updates $this->emailUpdates($updates); }
/** * @param $packageName * @return mixed */ public function getPackage($packageName) { $package = null; if (!empty($packageName)) { try { $client = new \Packagist\Api\Client(); $package = $client->get($packageName); } catch (\Exception $e) { } } return $package; }