diff --git a/.ddev/docker-compose.phpmyadmin.yaml b/.ddev/docker-compose.phpmyadmin.yaml
index 54f6140e..3958baf3 100644
--- a/.ddev/docker-compose.phpmyadmin.yaml
+++ b/.ddev/docker-compose.phpmyadmin.yaml
@@ -24,7 +24,7 @@ services:
- HTTPS_EXPOSE=8037:80
healthcheck:
test: ["CMD-SHELL", "true"]
- interval: 120s
+ interval: 5s
timeout: 2s
retries: 1
depends_on:
diff --git a/src/Command/SyncPackagesCommand.php b/src/Command/SyncPackagesCommand.php
index 22926764..207948b8 100644
--- a/src/Command/SyncPackagesCommand.php
+++ b/src/Command/SyncPackagesCommand.php
@@ -96,8 +96,24 @@ public function execute(Arguments $args, ConsoleIo $io): void
$packagesTable = $this->fetchTable('Packages');
$touchedIds = [];
- $data = $this->client->all(['type' => 'cakephp-plugin']);
- foreach ($data as $package) {
+ $io->out('Fetching package list from Packagist...');
+ $packages = $this->client->all(['type' => 'cakephp-plugin']);
+ $total = count($packages);
+ $io->out(sprintf('Found %d packages. Processing...', $total));
+
+ $saved = 0;
+ $skipped = 0;
+ $failed = 0;
+ $i = 0;
+
+ $progress = $io->helper('Progress');
+ $progress->init(['total' => $total, 'width' => 60]);
+ $io->out('', 0);
+
+ foreach ($packages as $package) {
+ $i++;
+ $io->out(sprintf('[%d/%d] %s', $i, $total, $package), 1, ConsoleIo::VERBOSE);
+
$data = $this->getDataForPackage($package);
if (
@@ -106,6 +122,8 @@ public function execute(Arguments $args, ConsoleIo $io): void
$data['downloads'] < 10 ||
!$this->hasExplicitCakePhpDependency($data['tag_list'])
) {
+ $skipped++;
+ $progress->increment()->draw();
continue;
}
@@ -116,26 +134,49 @@ public function execute(Arguments $args, ConsoleIo $io): void
$entity = $packagesTable->patchEntity($entity, $data);
if (!$packagesTable->save($entity)) {
+ $failed++;
Log::warning('Unable to save package', [
- 'package' => $package->getName(),
+ 'package' => $package,
'errors' => $entity->getErrors(),
]);
+ } else {
+ $saved++;
}
$touchedIds[] = $entity->id;
+ $progress->increment()->draw();
}
+ $io->out('');
+ $io->out(sprintf(
+ 'Sync complete. Saved: %d, Skipped: %d, Failed: %d',
+ $saved,
+ $skipped,
+ $failed,
+ ));
+
// Remove packages that were not touched
+ $io->out('Removing stale packages...');
+ $deleted = 0;
+ $deleteFailed = 0;
/** @var \Cake\ORM\ResultSet $toDeletePackages */
$toDeletePackages = $packagesTable->find()->where(['id NOT IN' => $touchedIds])->all();
foreach ($toDeletePackages as $package) {
if (!$packagesTable->delete($package)) {
+ $deleteFailed++;
Log::warning('Unable to delete package', [
'package' => $package->package,
'id' => $package->id,
'errors' => $package->getErrors(),
]);
+ } else {
+ $deleted++;
}
}
+ $io->out(sprintf(
+ 'Cleanup complete. Deleted: %d, Failed: %d',
+ $deleted,
+ $deleteFailed,
+ ));
}
/**
diff --git a/templates/element/navbar.php b/templates/element/navbar.php
index c2815189..823ce077 100644
--- a/templates/element/navbar.php
+++ b/templates/element/navbar.php
@@ -50,8 +50,7 @@
-
-
+
= $this->Html->link('Sign out', [
'controller' => 'Users',
'action' => 'logout',
@@ -92,8 +91,7 @@
= $this->Html->link('Docs', 'https://book.cakephp.org/', ['target' => '_blank', 'rel' => 'noopener']) ?>
= $this->Html->link('API', 'https://api.cakephp.org/', ['target' => '_blank', 'rel' => 'noopener']) ?>
Identity->isLoggedIn()) : ?>
-
-
+
= $this->Form->postLink(
'Sign in with GitHub',
[