diff --git a/app/Console/Commands/BulkDeployStatus.php b/app/Console/Commands/BulkDeployStatus.php new file mode 100644 index 00000000..4d47cda2 --- /dev/null +++ b/app/Console/Commands/BulkDeployStatus.php @@ -0,0 +1,109 @@ +argument('bulk_id'); + + $this->info("Fetching status for bulk deployment ID: {$bulkId}..."); + + try { + $client = app(LagoonClientService::class)->getAuthenticatedClient(); + $deployments = $client->getDeploymentsByBulkId($bulkId); + + if (isset($deployments['error'])) { + $errors = is_array($deployments['error']) ? json_encode($deployments['error']) : $deployments['error']; + $this->error("Failed to fetch bulk deployment status: {$errors}"); + return 1; + } + + if (empty($deployments)) { + $this->warn("No deployments found for bulk ID: {$bulkId}"); + return 0; + } + + $total = count($deployments); + $stats = [ + 'new' => 0, + 'pending' => 0, + 'running' => 0, + 'complete' => 0, + 'failed' => 0, + 'cancelled' => 0, + ]; + + $rows = []; + foreach ($deployments as $deploy) { + $status = $deploy['status'] ?? 'unknown'; + $stats[$status] = ($stats[$status] ?? 0) + 1; + + $projectName = $deploy['environment']['project']['name'] ?? 'unknown'; + $envName = $deploy['environment']['name'] ?? 'unknown'; + + $rows[] = [ + $deploy['id'] ?? 'unknown', + $projectName, + $envName, + $status, + $deploy['started'] ?? '', + $deploy['completed'] ?? '', + ]; + } + + $this->info("\nBulk Deployment Summary:"); + $this->info("Total: {$total}"); + foreach ($stats as $status => $count) { + if ($count > 0) { + $color = $this->getStatusColor($status); + $this->line("{$status}: {$count}"); + } + } + + $this->newLine(); + $this->table( + ['ID', 'Project', 'Environment', 'Status', 'Started', 'Completed'], + $rows + ); + + return 0; + } catch (\Exception $e) { + $this->error("Error checking bulk deployment status: {$e->getMessage()}"); + return 1; + } + } + + private function getStatusColor(string $status): string + { + return match ($status) { + 'complete' => 'green', + 'failed' => 'red', + 'running' => 'blue', + 'pending' => 'yellow', + 'cancelled' => 'gray', + default => 'white', + }; + } +} diff --git a/app/Console/Commands/TriggerLagoonDeployOnAppInstances.php b/app/Console/Commands/TriggerLagoonDeployOnAppInstances.php index a21b1b83..34dedf35 100644 --- a/app/Console/Commands/TriggerLagoonDeployOnAppInstances.php +++ b/app/Console/Commands/TriggerLagoonDeployOnAppInstances.php @@ -155,91 +155,72 @@ public function handle() $this->table(headers: $headers, rows: $rows); } - if ($concurrency > 1) { - $this->info(string: "Running deployments concurrently on {$count} instances (concurrency: {$concurrency})..."); - - $phpBinary = PHP_BINARY; - $artisan = base_path('artisan'); - $commandBase = [ - $phpBinary, - $artisan, - 'polydock:app-instance:trigger-deploy', - $appUuid, - '--force', - ]; + if ($concurrency > 1 && ! $this->option('force')) { + $this->warn('Note: Concurrency option is ignored when using bulk deployment, as Lagoon handles parallelization natively.'); + } - if ($envOverride) { - $commandBase[] = "--environment={$envOverride}"; - } - if ($variablesOnly) { - $commandBase[] = '--variables-only'; - } + $this->info(string: 'Authenticating with Lagoon...'); + try { + $client = app(LagoonClientService::class)->getAuthenticatedClient(); + } catch (\Exception $e) { + $this->error(string: "Authentication failed: {$e->getMessage()}"); - $pool = Process::pool(function (Pool $pool) use ($instances, $commandBase) { - foreach ($instances as $instance) { - $command = array_merge($commandBase, ["--instance-id={$instance->id}"]); - $pool->as($instance->id)->command($command); - } - }); + return 1; + } - try { - $pool->concurrency($concurrency); - } catch (\Throwable) { - // Ignore if method doesn't exist + $environments = []; + foreach ($instances as $instance) { + $projectName = $instance->getKeyValue('lagoon-project-name'); + $branch = $envOverride ?: $instance->getKeyValue('lagoon-deploy-branch'); + + if ($projectName && $branch) { + $environments[] = [ + 'project' => $projectName, + 'name' => $branch, + ]; } + } - $poolResults = $pool->wait(); + if (empty($environments)) { + $this->error('No valid environments found to deploy.'); + return 1; + } - foreach ($poolResults as $instanceId => $result) { - $instance = $instances->find($instanceId); - if (! $instance) { - continue; - } + $buildVars = []; + if ($variablesOnly) { + $buildVars['LAGOON_VARIABLES_ONLY'] = 'true'; + } - $projectName = $instance->getKeyValue(key: 'lagoon-project-name'); + $bulkName = "Polydock Bulk Deploy: {$storeApp->name} (" . now()->toDateTimeString() . ")"; - if ($result->successful()) { - // Output already contains "SUCCESS" or "FAILED" messages from child process - $this->output->write(messages: $result->output()); - } else { - $this->error(string: "\n[FAILED] {$projectName} (Process Error): ".trim((string) $result->errorOutput())); - } - } + $this->info("Triggering bulk deployment for {$count} instances..."); + + try { + $result = $client->bulkDeployEnvironments( + environments: $environments, + name: $bulkName, + buildVariables: $buildVars + ); - $this->info(string: 'Done.'); + if (isset($result['error'])) { + $errors = is_array($result['error']) ? json_encode(value: $result['error']) : $result['error']; + $this->error(string: "Bulk deployment failed: {$errors}"); - return 0; - } + return 1; + } else { + $bulkId = $result['bulkDeployEnvironmentLatest'] ?? 'unknown'; + $this->info(string: "Bulk deployment triggered successfully! Bulk ID: {$bulkId}"); + + $this->info("\nYou can track the progress using:"); + $this->info(" https://dashboard.amazeeio.cloud/deployments?bulkId={$bulkId}"); - // Serial Logic - $this->info(string: 'Authenticating with Lagoon (Serial Mode)...'); - try { - $client = app(LagoonClientService::class)->getAuthenticatedClient(); + return 0; + } } catch (\Exception $e) { - $this->error(string: "Authentication failed: {$e->getMessage()}"); + $this->error(string: "Bulk deployment failed: {$e->getMessage()}"); return 1; } - - $bar = $this->output->createProgressBar(max: $count); - $bar->start(); - - /** @var PolydockAppInstance $instance */ - foreach ($instances as $instance) { - $this->deployToInstance( - instance: $instance, - client: $client, - envOverride: $envOverride, - variablesOnly: $variablesOnly - ); - $bar->advance(); - } - - $bar->finish(); - $this->newLine(); - $this->info(string: 'Done.'); - - return 0; } protected function deployToInstance( diff --git a/composer.json b/composer.json index db8ce9e2..2e305d71 100644 --- a/composer.json +++ b/composer.json @@ -12,13 +12,14 @@ "php": "^8.3", "ext-curl": "*", "amazeeio/lagoon-logs": "^0.0.5", - "amazeeio/polydock-app-amazeeclaw": "^0.1.11", + "amazeeio/polydock-app-amazeeclaw": "^0.1", "amazeeio/polydock-app-amazeeio-privategpt": "^0.1", - "amazeeio/polydock-app-anythingllm": "^0.1.2", - "dedoc/scramble": "^0.13.16", + "amazeeio/polydock-app-anythingllm": "^0.1", + "amazeeio/polydock-app-dependency-track": "^0.1.0", + "dedoc/scramble": "^0.13", "evanschleret/lara-mjml": "^0.3.0", "filament/filament": "^3.2", - "freedomtech-hosting/ft-lagoon-php": "^0.0.16", + "freedomtech-hosting/ft-lagoon-php": "^0.1", "freedomtech-hosting/polydock-amazeeai-backend-client-php": "^0.1", "freedomtech-hosting/polydock-app": "^0.0.33", "freedomtech-hosting/polydock-app-amazeeio-generic": "^0.1", diff --git a/composer.lock b/composer.lock index fdaa00b7..23eee3b3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "396f209711f1101719209ac0ae4f36a3", + "content-hash": "8c3ff76fb21ed66fb4dc18915b243ef3", "packages": [ { "name": "amazeeio/lagoon-logs", @@ -89,24 +89,24 @@ }, { "name": "amazeeio/polydock-app-amazeeio-privategpt", - "version": "v0.1.6", + "version": "v0.1.7", "source": { "type": "git", "url": "https://github.com/amazeeio/polydock-app-amazeeio-privategpt.git", - "reference": "94d4dd33cc50150a8cba603173a8a69fd7f0a4ef" + "reference": "bcc86eae73883e1e506d951854d59c47ec02ce81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amazeeio/polydock-app-amazeeio-privategpt/zipball/94d4dd33cc50150a8cba603173a8a69fd7f0a4ef", - "reference": "94d4dd33cc50150a8cba603173a8a69fd7f0a4ef", + "url": "https://api.github.com/repos/amazeeio/polydock-app-amazeeio-privategpt/zipball/bcc86eae73883e1e506d951854d59c47ec02ce81", + "reference": "bcc86eae73883e1e506d951854d59c47ec02ce81", "shasum": "" }, "require": { - "cuyz/valinor": "^2.3.2", - "freedomtech-hosting/ft-lagoon-php": "^0.0.16", + "cuyz/valinor": "^2.4", + "freedomtech-hosting/ft-lagoon-php": "^0.1", "freedomtech-hosting/polydock-app": "^0.0.33", "freedomtech-hosting/polydock-app-amazeeio-generic": "^0.1", - "guzzlehttp/guzzle": "^7.10.0" + "guzzlehttp/guzzle": "^7.10" }, "require-dev": { "laravel/pint": "^1.27.1", @@ -136,22 +136,22 @@ "description": "Polydock App - amazee.io PrivateGPT with Direct API Integration", "support": { "issues": "https://github.com/amazeeio/polydock-app-amazeeio-privategpt/issues", - "source": "https://github.com/amazeeio/polydock-app-amazeeio-privategpt/tree/v0.1.6" + "source": "https://github.com/amazeeio/polydock-app-amazeeio-privategpt/tree/v0.1.7" }, - "time": "2026-03-20T22:28:16+00:00" + "time": "2026-04-10T13:00:14+00:00" }, { "name": "amazeeio/polydock-app-anythingllm", - "version": "v0.1.2", + "version": "v0.1.4", "source": { "type": "git", "url": "https://github.com/amazeeio/polydock-app-anythingllm.git", - "reference": "d87d2f7759edd83b24b9eb5d7af2e23675fb4b90" + "reference": "feb95c8cc01e9edc11a29852798419dcf9c5339b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amazeeio/polydock-app-anythingllm/zipball/d87d2f7759edd83b24b9eb5d7af2e23675fb4b90", - "reference": "d87d2f7759edd83b24b9eb5d7af2e23675fb4b90", + "url": "https://api.github.com/repos/amazeeio/polydock-app-anythingllm/zipball/feb95c8cc01e9edc11a29852798419dcf9c5339b", + "reference": "feb95c8cc01e9edc11a29852798419dcf9c5339b", "shasum": "" }, "require": { @@ -180,9 +180,53 @@ "description": "Polydock App - AnythingLLM", "support": { "issues": "https://github.com/amazeeio/polydock-app-anythingllm/issues", - "source": "https://github.com/amazeeio/polydock-app-anythingllm/tree/v0.1.2" + "source": "https://github.com/amazeeio/polydock-app-anythingllm/tree/v0.1.4" + }, + "time": "2026-04-15T17:00:32+00:00" + }, + { + "name": "amazeeio/polydock-app-dependency-track", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/amazeeio/polydock-app-dependency-track.git", + "reference": "c6fe47518a853e137a862a68fbef20d732df89be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/amazeeio/polydock-app-dependency-track/zipball/c6fe47518a853e137a862a68fbef20d732df89be", + "reference": "c6fe47518a853e137a862a68fbef20d732df89be", + "shasum": "" + }, + "require": { + "freedomtech-hosting/polydock-app": "^0.0.33", + "freedomtech-hosting/polydock-app-amazeeio-generic": "^0.1" + }, + "require-dev": { + "laravel/pint": "^1.27.1", + "mockery/mockery": "^1.6.12", + "orchestra/testbench": "*", + "phpstan/extension-installer": "*", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-mockery": "^1.1", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Amazeeio\\PolydockAppDependencyTrack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Polydock App - Dependency Track", + "support": { + "issues": "https://github.com/amazeeio/polydock-app-dependency-track/issues", + "source": "https://github.com/amazeeio/polydock-app-dependency-track/tree/v0.1.0" }, - "time": "2026-03-31T21:34:53+00:00" + "time": "2026-04-15T17:15:12+00:00" }, { "name": "anourvalar/eloquent-serialize", @@ -320,16 +364,16 @@ }, { "name": "blade-ui-kit/blade-icons", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/driesvints/blade-icons.git", - "reference": "caa92fde675d7a651c38bf73ca582ddada56f318" + "reference": "377eede719f9690b03bbbfd516afef887e27634a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/driesvints/blade-icons/zipball/caa92fde675d7a651c38bf73ca582ddada56f318", - "reference": "caa92fde675d7a651c38bf73ca582ddada56f318", + "url": "https://api.github.com/repos/driesvints/blade-icons/zipball/377eede719f9690b03bbbfd516afef887e27634a", + "reference": "377eede719f9690b03bbbfd516afef887e27634a", "shasum": "" }, "require": { @@ -397,7 +441,7 @@ "type": "paypal" } ], - "time": "2026-02-23T10:42:23+00:00" + "time": "2026-04-07T17:56:48+00:00" }, { "name": "brick/math", @@ -712,16 +756,16 @@ }, { "name": "dedoc/scramble", - "version": "v0.13.17", + "version": "v0.13.18", "source": { "type": "git", "url": "https://github.com/dedoc/scramble.git", - "reference": "f7b1652316e3ed0243389837158128c8c1c8bfda" + "reference": "e013e242dfea2791c856330f8abbfd59a3a5bbc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dedoc/scramble/zipball/f7b1652316e3ed0243389837158128c8c1c8bfda", - "reference": "f7b1652316e3ed0243389837158128c8c1c8bfda", + "url": "https://api.github.com/repos/dedoc/scramble/zipball/e013e242dfea2791c856330f8abbfd59a3a5bbc1", + "reference": "e013e242dfea2791c856330f8abbfd59a3a5bbc1", "shasum": "" }, "require": { @@ -780,7 +824,7 @@ ], "support": { "issues": "https://github.com/dedoc/scramble/issues", - "source": "https://github.com/dedoc/scramble/tree/v0.13.17" + "source": "https://github.com/dedoc/scramble/tree/v0.13.18" }, "funding": [ { @@ -788,7 +832,7 @@ "type": "github" } ], - "time": "2026-03-27T13:32:04+00:00" + "time": "2026-04-10T17:59:04+00:00" }, { "name": "dflydev/dot-access-data", @@ -1386,7 +1430,7 @@ }, { "name": "filament/actions", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", @@ -1439,16 +1483,16 @@ }, { "name": "filament/filament", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "6098e568b4257dc438ff68aced0a260f06ba6d52" + "reference": "a7db5758d7693f589412ec4a768f13077960f1e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/6098e568b4257dc438ff68aced0a260f06ba6d52", - "reference": "6098e568b4257dc438ff68aced0a260f06ba6d52", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/a7db5758d7693f589412ec4a768f13077960f1e8", + "reference": "a7db5758d7693f589412ec4a768f13077960f1e8", "shasum": "" }, "require": { @@ -1500,20 +1544,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-02-07T21:52:21+00:00" + "time": "2026-04-04T07:47:06+00:00" }, { "name": "filament/forms", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "c64bf142f808d292b0c6c21fdd3c75cbef9e9d30" + "reference": "427473802e2e34c1b8be7c1a32b02a951f7fe152" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/c64bf142f808d292b0c6c21fdd3c75cbef9e9d30", - "reference": "c64bf142f808d292b0c6c21fdd3c75cbef9e9d30", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/427473802e2e34c1b8be7c1a32b02a951f7fe152", + "reference": "427473802e2e34c1b8be7c1a32b02a951f7fe152", "shasum": "" }, "require": { @@ -1556,11 +1600,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2026-02-19T23:07:33+00:00" + "time": "2026-04-04T07:47:01+00:00" }, { "name": "filament/infolists", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", @@ -1611,7 +1655,7 @@ }, { "name": "filament/notifications", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", @@ -1663,7 +1707,7 @@ }, { "name": "filament/support", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", @@ -1722,7 +1766,7 @@ }, { "name": "filament/tables", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", @@ -1774,7 +1818,7 @@ }, { "name": "filament/widgets", - "version": "v3.3.49", + "version": "v3.3.50", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", @@ -1818,16 +1862,16 @@ }, { "name": "freedomtech-hosting/ft-lagoon-php", - "version": "v0.0.16", + "version": "v0.1.19", "source": { "type": "git", "url": "https://github.com/amazeeio/polydock-lagoon-php-lib.git", - "reference": "a34ea9d0efc3dd5d207f773da2cd97bfe6493eec" + "reference": "865c66a616f02e2ee5542319d5bb17478b93498d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amazeeio/polydock-lagoon-php-lib/zipball/a34ea9d0efc3dd5d207f773da2cd97bfe6493eec", - "reference": "a34ea9d0efc3dd5d207f773da2cd97bfe6493eec", + "url": "https://api.github.com/repos/amazeeio/polydock-lagoon-php-lib/zipball/865c66a616f02e2ee5542319d5bb17478b93498d", + "reference": "865c66a616f02e2ee5542319d5bb17478b93498d", "shasum": "" }, "require": { @@ -1854,27 +1898,27 @@ "description": "The Freedom Tech Lagoon PHP library", "support": { "issues": "https://github.com/amazeeio/polydock-lagoon-php-lib/issues", - "source": "https://github.com/amazeeio/polydock-lagoon-php-lib/tree/v0.0.16" + "source": "https://github.com/amazeeio/polydock-lagoon-php-lib/tree/v0.1.19" }, - "time": "2026-03-11T21:55:59+00:00" + "time": "2026-04-13T16:45:48+00:00" }, { "name": "freedomtech-hosting/polydock-amazeeai-backend-client-php", - "version": "v0.1.2", + "version": "v0.1.3", "source": { "type": "git", "url": "https://github.com/amazeeio/polydock-amazeeai-backend-php-lib.git", - "reference": "afc528d55160f5be060ebabc1512562c8e98b9ed" + "reference": "af2d39b9147d3eebd93c6881d1174c12fb9e4317" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amazeeio/polydock-amazeeai-backend-php-lib/zipball/afc528d55160f5be060ebabc1512562c8e98b9ed", - "reference": "afc528d55160f5be060ebabc1512562c8e98b9ed", + "url": "https://api.github.com/repos/amazeeio/polydock-amazeeai-backend-php-lib/zipball/af2d39b9147d3eebd93c6881d1174c12fb9e4317", + "reference": "af2d39b9147d3eebd93c6881d1174c12fb9e4317", "shasum": "" }, "require": { "ext-curl": "*", - "symfony/http-client": "^7.2" + "symfony/http-client": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -1895,9 +1939,9 @@ "description": "The Freedom Tech amazee.ai Private AI PHP library", "support": { "issues": "https://github.com/amazeeio/polydock-amazeeai-backend-php-lib/issues", - "source": "https://github.com/amazeeio/polydock-amazeeai-backend-php-lib/tree/v0.1.2" + "source": "https://github.com/amazeeio/polydock-amazeeai-backend-php-lib/tree/v0.1.3" }, - "time": "2026-02-22T18:23:41+00:00" + "time": "2026-04-10T12:00:34+00:00" }, { "name": "freedomtech-hosting/polydock-app", @@ -1941,20 +1985,20 @@ }, { "name": "freedomtech-hosting/polydock-app-amazeeio-generic", - "version": "v0.1.7", + "version": "v0.1.8", "source": { "type": "git", "url": "https://github.com/amazeeio/polydock-app-amazeeio-generic.git", - "reference": "aba294a9a7b8991cb3acac4ba3360cc3fa75897b" + "reference": "45921f1e1da95aaee2ac7a7ddc1ef93412eb7b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amazeeio/polydock-app-amazeeio-generic/zipball/aba294a9a7b8991cb3acac4ba3360cc3fa75897b", - "reference": "aba294a9a7b8991cb3acac4ba3360cc3fa75897b", + "url": "https://api.github.com/repos/amazeeio/polydock-app-amazeeio-generic/zipball/45921f1e1da95aaee2ac7a7ddc1ef93412eb7b3c", + "reference": "45921f1e1da95aaee2ac7a7ddc1ef93412eb7b3c", "shasum": "" }, "require": { - "freedomtech-hosting/ft-lagoon-php": "^0.0.16", + "freedomtech-hosting/ft-lagoon-php": "^0.1", "freedomtech-hosting/polydock-amazeeai-backend-client-php": "^0.1", "freedomtech-hosting/polydock-app": "^0.0.33" }, @@ -1977,9 +2021,9 @@ "description": "Polydock App - amazee.io Generic", "support": { "issues": "https://github.com/amazeeio/polydock-app-amazeeio-generic/issues", - "source": "https://github.com/amazeeio/polydock-app-amazeeio-generic/tree/v0.1.7" + "source": "https://github.com/amazeeio/polydock-app-amazeeio-generic/tree/v0.1.8" }, - "time": "2026-03-23T18:05:50+00:00" + "time": "2026-04-10T12:47:59+00:00" }, { "name": "fruitcake/php-cors", @@ -2813,16 +2857,16 @@ }, { "name": "laravel/horizon", - "version": "v5.45.4", + "version": "v5.45.6", "source": { "type": "git", "url": "https://github.com/laravel/horizon.git", - "reference": "b2b32e3f6013081e0176307e9081cd085f0ad4d6" + "reference": "629707ff3cce9ff72715e7815f74dda10bdcbe0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/horizon/zipball/b2b32e3f6013081e0176307e9081cd085f0ad4d6", - "reference": "b2b32e3f6013081e0176307e9081cd085f0ad4d6", + "url": "https://api.github.com/repos/laravel/horizon/zipball/629707ff3cce9ff72715e7815f74dda10bdcbe0a", + "reference": "629707ff3cce9ff72715e7815f74dda10bdcbe0a", "shasum": "" }, "require": { @@ -2887,9 +2931,9 @@ ], "support": { "issues": "https://github.com/laravel/horizon/issues", - "source": "https://github.com/laravel/horizon/tree/v5.45.4" + "source": "https://github.com/laravel/horizon/tree/v5.45.6" }, - "time": "2026-03-18T14:14:59+00:00" + "time": "2026-04-14T13:31:53+00:00" }, { "name": "laravel/prompts", @@ -3071,16 +3115,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v2.0.10", + "version": "v2.0.12", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669" + "reference": "a6abb4e54f6fcd3138120b9ad497f0bd146f9919" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/870fc81d2f879903dfc5b60bf8a0f94a1609e669", - "reference": "870fc81d2f879903dfc5b60bf8a0f94a1609e669", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/a6abb4e54f6fcd3138120b9ad497f0bd146f9919", + "reference": "a6abb4e54f6fcd3138120b9ad497f0bd146f9919", "shasum": "" }, "require": { @@ -3128,7 +3172,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2026-02-20T19:59:49+00:00" + "time": "2026-04-14T13:33:34+00:00" }, { "name": "laravel/slack-notification-channel", @@ -3978,16 +4022,16 @@ }, { "name": "livewire/livewire", - "version": "v3.7.13", + "version": "v3.7.15", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "152b5a1a3f9ee93b6887a3bad6ab8e6db035efa5" + "reference": "d68e65beb7717eaabef74a1cf63cd1670260ff5f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/152b5a1a3f9ee93b6887a3bad6ab8e6db035efa5", - "reference": "152b5a1a3f9ee93b6887a3bad6ab8e6db035efa5", + "url": "https://api.github.com/repos/livewire/livewire/zipball/d68e65beb7717eaabef74a1cf63cd1670260ff5f", + "reference": "d68e65beb7717eaabef74a1cf63cd1670260ff5f", "shasum": "" }, "require": { @@ -4042,7 +4086,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v3.7.13" + "source": "https://github.com/livewire/livewire/tree/v3.7.15" }, "funding": [ { @@ -4050,7 +4094,7 @@ "type": "github" } ], - "time": "2026-03-30T22:04:01+00:00" + "time": "2026-04-03T13:08:41+00:00" }, { "name": "masterminds/html5", @@ -4284,16 +4328,16 @@ }, { "name": "nesbot/carbon", - "version": "3.11.3", + "version": "3.11.4", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "6a7e652845bb018c668220c2a545aded8594fbbf" + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/6a7e652845bb018c668220c2a545aded8594fbbf", - "reference": "6a7e652845bb018c668220c2a545aded8594fbbf", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", "shasum": "" }, "require": { @@ -4385,7 +4429,7 @@ "type": "tidelift" } ], - "time": "2026-03-11T17:23:39+00:00" + "time": "2026-04-07T09:57:54+00:00" }, { "name": "nette/schema", @@ -4979,16 +5023,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.50", + "version": "3.0.51", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b" + "reference": "d59c94077f9c9915abb51ddb52ce85188ece1748" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/aa6ad8321ed103dc3624fb600a25b66ebf78ec7b", - "reference": "aa6ad8321ed103dc3624fb600a25b66ebf78ec7b", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/d59c94077f9c9915abb51ddb52ce85188ece1748", + "reference": "d59c94077f9c9915abb51ddb52ce85188ece1748", "shasum": "" }, "require": { @@ -5069,7 +5113,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.50" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.51" }, "funding": [ { @@ -5085,7 +5129,7 @@ "type": "tidelift" } ], - "time": "2026-03-19T02:57:58+00:00" + "time": "2026-04-10T01:33:53+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -7130,31 +7174,27 @@ }, { "name": "symfony/http-client", - "version": "v7.4.8", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "01933e626c3de76bea1e22641e205e78f6a34342" + "reference": "356e43d6994ae9d7761fd404d40f78691deabe0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/01933e626c3de76bea1e22641e205e78f6a34342", - "reference": "01933e626c3de76bea1e22641e205e78f6a34342", + "url": "https://api.github.com/repos/symfony/http-client/zipball/356e43d6994ae9d7761fd404d40f78691deabe0e", + "reference": "356e43d6994ae9d7761fd404d40f78691deabe0e", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", - "symfony/polyfill-php83": "^1.29", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "amphp/amp": "<2.5", - "amphp/socket": "<1.1", - "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.4" + "amphp/amp": "<3", + "php-http/discovery": "<1.15" }, "provide": { "php-http/async-client-implementation": "*", @@ -7163,20 +7203,19 @@ "symfony/http-client-implementation": "3.0" }, "require-dev": { - "amphp/http-client": "^4.2.1|^5.0", - "amphp/http-tunnel": "^1.0|^2.0", + "amphp/http-client": "^5.3.2", + "amphp/http-tunnel": "^2.0", "guzzlehttp/promises": "^1.4|^2.0", "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/amphp-http-client-meta": "^1.0|^2.0", - "symfony/cache": "^6.4|^7.0|^8.0", - "symfony/dependency-injection": "^6.4|^7.0|^8.0", - "symfony/http-kernel": "^6.4|^7.0|^8.0", - "symfony/messenger": "^6.4|^7.0|^8.0", - "symfony/process": "^6.4|^7.0|^8.0", - "symfony/rate-limiter": "^6.4|^7.0|^8.0", - "symfony/stopwatch": "^6.4|^7.0|^8.0" + "symfony/cache": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7207,7 +7246,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v7.4.8" + "source": "https://github.com/symfony/http-client/tree/v8.0.8" }, "funding": [ { @@ -7227,7 +7266,7 @@ "type": "tidelift" } ], - "time": "2026-03-30T12:55:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/http-client-contracts", @@ -7683,16 +7722,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -7742,7 +7781,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -7762,20 +7801,20 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", - "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -7824,7 +7863,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -7844,11 +7883,11 @@ "type": "tidelift" } ], - "time": "2025-06-27T09:58:17+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", @@ -7911,7 +7950,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.36.0" }, "funding": [ { @@ -7935,7 +7974,7 @@ }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -7996,7 +8035,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -8020,16 +8059,16 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", - "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { @@ -8081,7 +8120,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -8101,20 +8140,20 @@ "type": "tidelift" } ], - "time": "2024-12-23T08:48:59+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", - "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -8165,7 +8204,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.36.0" }, "funding": [ { @@ -8185,20 +8224,20 @@ "type": "tidelift" } ], - "time": "2025-01-02T08:10:11+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", - "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/3600c2cb22399e25bb226e4a135ce91eeb2a6149", + "reference": "3600c2cb22399e25bb226e4a135ce91eeb2a6149", "shasum": "" }, "require": { @@ -8245,7 +8284,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.36.0" }, "funding": [ { @@ -8265,20 +8304,20 @@ "type": "tidelift" } ], - "time": "2025-07-08T02:45:35+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php84", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php84.git", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", - "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -8325,7 +8364,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -8345,20 +8384,20 @@ "type": "tidelift" } ], - "time": "2025-06-24T13:30:11+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { "name": "symfony/polyfill-php85", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php85.git", - "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91" + "reference": "2c408a6bb0313e6001a83628dc5506100474254e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", - "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/2c408a6bb0313e6001a83628dc5506100474254e", + "reference": "2c408a6bb0313e6001a83628dc5506100474254e", "shasum": "" }, "require": { @@ -8405,7 +8444,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-php85/tree/v1.36.0" }, "funding": [ { @@ -8425,20 +8464,20 @@ "type": "tidelift" } ], - "time": "2025-06-23T16:12:55+00:00" + "time": "2026-04-10T16:50:15+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.33.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", "shasum": "" }, "require": { @@ -8488,7 +8527,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.36.0" }, "funding": [ { @@ -8508,7 +8547,7 @@ "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/process", @@ -9776,16 +9815,16 @@ }, { "name": "justinrainbow/json-schema", - "version": "v6.7.2", + "version": "6.8.0", "source": { "type": "git", "url": "https://github.com/jsonrainbow/json-schema.git", - "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0" + "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/6fea66c7204683af437864e7c4e7abf383d14bc0", - "reference": "6fea66c7204683af437864e7c4e7abf383d14bc0", + "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", + "reference": "89ac92bcfe5d0a8a4433c7b89d394553ae7250cc", "shasum": "" }, "require": { @@ -9845,22 +9884,22 @@ ], "support": { "issues": "https://github.com/jsonrainbow/json-schema/issues", - "source": "https://github.com/jsonrainbow/json-schema/tree/v6.7.2" + "source": "https://github.com/jsonrainbow/json-schema/tree/6.8.0" }, - "time": "2026-02-15T15:06:22+00:00" + "time": "2026-04-02T12:43:11+00:00" }, { "name": "larastan/larastan", - "version": "v3.9.3", + "version": "v3.9.5", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65" + "reference": "aa637ef3c9102490e0fa9a7ea4fbdbbce4471f34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65", - "reference": "64a52bcc5347c89fdf131cb59f96ebfbc8d1ad65", + "url": "https://api.github.com/repos/larastan/larastan/zipball/aa637ef3c9102490e0fa9a7ea4fbdbbce4471f34", + "reference": "aa637ef3c9102490e0fa9a7ea4fbdbbce4471f34", "shasum": "" }, "require": { @@ -9874,7 +9913,7 @@ "illuminate/pipeline": "^11.44.2 || ^12.4.1 || ^13", "illuminate/support": "^11.44.2 || ^12.4.1 || ^13", "php": "^8.2", - "phpstan/phpstan": "^2.1.32" + "phpstan/phpstan": "^2.1.44" }, "require-dev": { "doctrine/coding-standard": "^13", @@ -9929,7 +9968,7 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v3.9.3" + "source": "https://github.com/larastan/larastan/tree/v3.9.5" }, "funding": [ { @@ -9937,7 +9976,7 @@ "type": "github" } ], - "time": "2026-02-20T12:07:12+00:00" + "time": "2026-04-11T20:10:30+00:00" }, { "name": "laravel/pail", @@ -10089,16 +10128,16 @@ }, { "name": "laravel/sail", - "version": "v1.55.0", + "version": "v1.57.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "67dc1b72da4e066a2fb54c1c7582fd2f140ea191" + "reference": "fa8d057b6e9310380ccbc3a209ed7f927d54f648" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/67dc1b72da4e066a2fb54c1c7582fd2f140ea191", - "reference": "67dc1b72da4e066a2fb54c1c7582fd2f140ea191", + "url": "https://api.github.com/repos/laravel/sail/zipball/fa8d057b6e9310380ccbc3a209ed7f927d54f648", + "reference": "fa8d057b6e9310380ccbc3a209ed7f927d54f648", "shasum": "" }, "require": { @@ -10148,7 +10187,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2026-03-23T15:56:34+00:00" + "time": "2026-04-14T13:32:04+00:00" }, { "name": "marc-mabe/php-enum", @@ -10308,23 +10347,23 @@ }, { "name": "nunomaduro/collision", - "version": "v8.9.1", + "version": "v8.9.3", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935" + "reference": "b0d8ab95b29c3189aeeb902d81215231df4c1b64" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/a1ed3fa530fd60bc515f9303e8520fcb7d4bd935", - "reference": "a1ed3fa530fd60bc515f9303e8520fcb7d4bd935", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/b0d8ab95b29c3189aeeb902d81215231df4c1b64", + "reference": "b0d8ab95b29c3189aeeb902d81215231df4c1b64", "shasum": "" }, "require": { "filp/whoops": "^2.18.4", "nunomaduro/termwind": "^2.4.0", "php": "^8.2.0", - "symfony/console": "^7.4.4 || ^8.0.4" + "symfony/console": "^7.4.8 || ^8.0.4" }, "conflict": { "laravel/framework": "<11.48.0 || >=14.0.0", @@ -10332,12 +10371,12 @@ }, "require-dev": { "brianium/paratest": "^7.8.5", - "larastan/larastan": "^3.9.2", - "laravel/framework": "^11.48.0 || ^12.52.0", - "laravel/pint": "^1.27.1", - "orchestra/testbench-core": "^9.12.0 || ^10.9.0", - "pestphp/pest": "^3.8.5 || ^4.4.1 || ^5.0.0", - "sebastian/environment": "^7.2.1 || ^8.0.3 || ^9.0.0" + "larastan/larastan": "^3.9.3", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.2.0", + "laravel/pint": "^1.29.0", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.0.0", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.0.0" }, "type": "library", "extra": { @@ -10400,7 +10439,7 @@ "type": "patreon" } ], - "time": "2026-02-17T17:33:08+00:00" + "time": "2026-04-06T19:25:53+00:00" }, { "name": "opis/json-schema", @@ -10712,11 +10751,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.45", + "version": "2.1.47", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f8cdfd9421b7edb7686a2d150a234870464eac70", - "reference": "f8cdfd9421b7edb7686a2d150a234870464eac70", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/79015445d8bd79e62b29140f12e5bfced1dcca65", + "reference": "79015445d8bd79e62b29140f12e5bfced1dcca65", "shasum": "" }, "require": { @@ -10761,7 +10800,7 @@ "type": "github" } ], - "time": "2026-03-30T13:22:02+00:00" + "time": "2026-04-13T15:49:08+00:00" }, { "name": "phpunit/php-code-coverage", @@ -11222,21 +11261,21 @@ }, { "name": "rector/rector", - "version": "2.3.9", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/rectorphp/rector.git", - "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4" + "reference": "000b7050b9e4fe98db2192971e56eb0b302b3feb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/rectorphp/rector/zipball/917842143fd9f5331a2adefc214b8d7143bd32c4", - "reference": "917842143fd9f5331a2adefc214b8d7143bd32c4", + "url": "https://api.github.com/repos/rectorphp/rector/zipball/000b7050b9e4fe98db2192971e56eb0b302b3feb", + "reference": "000b7050b9e4fe98db2192971e56eb0b302b3feb", "shasum": "" }, "require": { "php": "^7.4|^8.0", - "phpstan/phpstan": "^2.1.40" + "phpstan/phpstan": "^2.1.41" }, "conflict": { "rector/rector-doctrine": "*", @@ -11270,7 +11309,7 @@ ], "support": { "issues": "https://github.com/rectorphp/rector/issues", - "source": "https://github.com/rectorphp/rector/tree/2.3.9" + "source": "https://github.com/rectorphp/rector/tree/2.4.1" }, "funding": [ { @@ -11278,7 +11317,7 @@ "type": "github" } ], - "time": "2026-03-16T09:43:55+00:00" + "time": "2026-04-08T08:43:56+00:00" }, { "name": "sebastian/cli-parser", diff --git a/config/database.php b/config/database.php index 5fd0838f..a0b8e675 100644 --- a/config/database.php +++ b/config/database.php @@ -2,6 +2,18 @@ use Illuminate\Support\Str; +$mysqlSslCaOption = extension_loaded('pdo_mysql') + ? (defined('Pdo\\Mysql::ATTR_SSL_CA') + ? constant('Pdo\\Mysql::ATTR_SSL_CA') + : (defined('PDO::MYSQL_ATTR_SSL_CA') ? constant('PDO::MYSQL_ATTR_SSL_CA') : null)) + : null; + +$mysqlOptions = static fn (): array => $mysqlSslCaOption === null + ? [] + : array_filter([ + $mysqlSslCaOption => env('MYSQL_ATTR_SSL_CA'), + ]); + return [ /* @@ -57,9 +69,7 @@ 'prefix_indexes' => true, 'strict' => true, 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], + 'options' => $mysqlOptions(), ], 'mariadb' => [ @@ -77,9 +87,7 @@ 'prefix_indexes' => true, 'strict' => true, 'engine' => null, - 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), - ]) : [], + 'options' => $mysqlOptions(), ], 'pgsql' => [ diff --git a/lagoon/cli.dockerfile b/lagoon/cli.dockerfile index fde56d17..1ec2966f 100644 --- a/lagoon/cli.dockerfile +++ b/lagoon/cli.dockerfile @@ -1,5 +1,5 @@ FROM uselagoon/lagoon-cli:latest as LAGOONCLI -FROM uselagoon/php-8.3-cli +FROM uselagoon/php-8.4-cli ####################################################### # Install PHP extensions @@ -32,7 +32,6 @@ RUN DOWNLOAD_PATH=$(curl -sL "https://api.github.com/repos/uselagoon/lagoon-sync ####################################################### COPY . /app RUN if [ -f "composer.json" ]; then \ - COMPOSER_MEMORY_LIMIT=-1 composer update amazeeio/polydock-app-amazeeio-privategpt --ignore-platform-reqs; \ COMPOSER_MEMORY_LIMIT=-1 composer install --no-interaction --prefer-dist --optimize-autoloader; \ php artisan storage:link; \ fi diff --git a/lagoon/php.dockerfile b/lagoon/php.dockerfile index 8845d87d..db1969e5 100644 --- a/lagoon/php.dockerfile +++ b/lagoon/php.dockerfile @@ -1,6 +1,6 @@ ARG CLI_IMAGE FROM ${CLI_IMAGE} as cli -FROM uselagoon/php-8.3-fpm +FROM uselagoon/php-8.4-fpm ####################################################### # Setup Laravel Directories needed diff --git a/package-lock.json b/package-lock.json index 8a5144dd..b2032a1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,7 @@ "requires": true, "packages": { "": { + "name": "polydock-engine", "dependencies": { "mjml": "^4.18.0" }, @@ -592,9 +593,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.0.tgz", - "integrity": "sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", "cpu": [ "arm" ], @@ -606,9 +607,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.0.tgz", - "integrity": "sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", "cpu": [ "arm64" ], @@ -620,9 +621,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.0.tgz", - "integrity": "sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", "cpu": [ "arm64" ], @@ -634,9 +635,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.0.tgz", - "integrity": "sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", "cpu": [ "x64" ], @@ -648,9 +649,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.0.tgz", - "integrity": "sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", "cpu": [ "arm64" ], @@ -662,9 +663,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.0.tgz", - "integrity": "sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", "cpu": [ "x64" ], @@ -676,9 +677,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.0.tgz", - "integrity": "sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", "cpu": [ "arm" ], @@ -690,9 +691,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.0.tgz", - "integrity": "sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", "cpu": [ "arm" ], @@ -704,9 +705,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.0.tgz", - "integrity": "sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", "cpu": [ "arm64" ], @@ -718,9 +719,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.0.tgz", - "integrity": "sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", "cpu": [ "arm64" ], @@ -732,9 +733,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.0.tgz", - "integrity": "sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", "cpu": [ "loong64" ], @@ -746,9 +747,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.0.tgz", - "integrity": "sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", "cpu": [ "loong64" ], @@ -760,9 +761,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.0.tgz", - "integrity": "sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", "cpu": [ "ppc64" ], @@ -774,9 +775,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.0.tgz", - "integrity": "sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", "cpu": [ "ppc64" ], @@ -788,9 +789,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.0.tgz", - "integrity": "sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", "cpu": [ "riscv64" ], @@ -802,9 +803,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.0.tgz", - "integrity": "sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", "cpu": [ "riscv64" ], @@ -816,9 +817,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.0.tgz", - "integrity": "sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", "cpu": [ "s390x" ], @@ -830,9 +831,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.0.tgz", - "integrity": "sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", "cpu": [ "x64" ], @@ -844,9 +845,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.0.tgz", - "integrity": "sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", "cpu": [ "x64" ], @@ -858,9 +859,9 @@ ] }, "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.0.tgz", - "integrity": "sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", "cpu": [ "x64" ], @@ -872,9 +873,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.0.tgz", - "integrity": "sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", "cpu": [ "arm64" ], @@ -886,9 +887,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.0.tgz", - "integrity": "sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", "cpu": [ "arm64" ], @@ -900,9 +901,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.0.tgz", - "integrity": "sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", "cpu": [ "ia32" ], @@ -914,9 +915,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.0.tgz", - "integrity": "sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", "cpu": [ "x64" ], @@ -928,9 +929,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.0.tgz", - "integrity": "sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", "cpu": [ "x64" ], @@ -1028,9 +1029,9 @@ "license": "MIT" }, "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "dev": true, "funding": [ { @@ -1048,8 +1049,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -1065,15 +1066,15 @@ } }, "node_modules/axios": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", - "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", "dev": true, "license": "MIT", "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" + "proxy-from-env": "^2.1.0" } }, "node_modules/balanced-match": { @@ -1083,9 +1084,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.10", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.10.tgz", - "integrity": "sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==", + "version": "2.10.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz", + "integrity": "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1114,9 +1115,9 @@ "license": "ISC" }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -1135,9 +1136,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -1155,11 +1156,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -1203,9 +1204,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001781", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", - "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", "dev": true, "funding": [ { @@ -1660,9 +1661,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.321", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", - "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "version": "1.5.336", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.336.tgz", + "integrity": "sha512-AbH9q9J455r/nLmdNZes0G0ZKcRX73FicwowalLs6ijwOmCJSRRrLX63lcAlzy9ux3dWK1w1+1nsBJEWN11hcQ==", "dev": true, "license": "ISC" }, @@ -1836,9 +1837,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "dev": true, "funding": [ { @@ -2325,9 +2326,9 @@ "license": "MIT" }, "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", "license": "MIT" }, "node_modules/lower-case": { @@ -2927,9 +2928,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", "dev": true, "license": "MIT" }, @@ -3113,9 +3114,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "dev": true, "funding": [ { @@ -3282,11 +3283,14 @@ "license": "ISC" }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -3350,12 +3354,13 @@ } }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -3382,9 +3387,9 @@ } }, "node_modules/rollup": { - "version": "4.60.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.0.tgz", - "integrity": "sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==", + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", "dev": true, "license": "MIT", "dependencies": { @@ -3398,31 +3403,31 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.0", - "@rollup/rollup-android-arm64": "4.60.0", - "@rollup/rollup-darwin-arm64": "4.60.0", - "@rollup/rollup-darwin-x64": "4.60.0", - "@rollup/rollup-freebsd-arm64": "4.60.0", - "@rollup/rollup-freebsd-x64": "4.60.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.0", - "@rollup/rollup-linux-arm-musleabihf": "4.60.0", - "@rollup/rollup-linux-arm64-gnu": "4.60.0", - "@rollup/rollup-linux-arm64-musl": "4.60.0", - "@rollup/rollup-linux-loong64-gnu": "4.60.0", - "@rollup/rollup-linux-loong64-musl": "4.60.0", - "@rollup/rollup-linux-ppc64-gnu": "4.60.0", - "@rollup/rollup-linux-ppc64-musl": "4.60.0", - "@rollup/rollup-linux-riscv64-gnu": "4.60.0", - "@rollup/rollup-linux-riscv64-musl": "4.60.0", - "@rollup/rollup-linux-s390x-gnu": "4.60.0", - "@rollup/rollup-linux-x64-gnu": "4.60.0", - "@rollup/rollup-linux-x64-musl": "4.60.0", - "@rollup/rollup-openbsd-x64": "4.60.0", - "@rollup/rollup-openharmony-arm64": "4.60.0", - "@rollup/rollup-win32-arm64-msvc": "4.60.0", - "@rollup/rollup-win32-ia32-msvc": "4.60.0", - "@rollup/rollup-win32-x64-gnu": "4.60.0", - "@rollup/rollup-win32-x64-msvc": "4.60.0", + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" } }, @@ -3779,14 +3784,14 @@ } }, "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", "dev": true, "license": "MIT", "dependencies": { "fdir": "^6.5.0", - "picomatch": "^4.0.3" + "picomatch": "^4.0.4" }, "engines": { "node": ">=12.0.0" @@ -3934,9 +3939,9 @@ } }, "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/public/js/filament/filament/app.js b/public/js/filament/filament/app.js index 9ff5c439..0d9d483c 100644 --- a/public/js/filament/filament/app.js +++ b/public/js/filament/filament/app.js @@ -1 +1 @@ -(()=>{var Z=Object.create,L=Object.defineProperty,ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty,re=Object.getOwnPropertyNames,ne=Object.getOwnPropertyDescriptor,ae=s=>L(s,"__esModule",{value:!0}),ie=(s,n)=>()=>(n||(n={exports:{}},s(n.exports,n)),n.exports),oe=(s,n,p)=>{if(n&&typeof n=="object"||typeof n=="function")for(let d of re(n))!te.call(s,d)&&d!=="default"&&L(s,d,{get:()=>n[d],enumerable:!(p=ne(n,d))||p.enumerable});return s},se=s=>oe(ae(L(s!=null?Z(ee(s)):{},"default",s&&s.__esModule&&"default"in s?{get:()=>s.default,enumerable:!0}:{value:s,enumerable:!0})),s),fe=ie((s,n)=>{(function(p,d,M){if(!p)return;for(var h={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},g={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},y={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},q={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},S,w=1;w<20;++w)h[111+w]="f"+w;for(w=0;w<=9;++w)h[w+96]=w.toString();function C(e,t,a){if(e.addEventListener){e.addEventListener(t,a,!1);return}e.attachEvent("on"+t,a)}function T(e){if(e.type=="keypress"){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return h[e.which]?h[e.which]:g[e.which]?g[e.which]:String.fromCharCode(e.which).toLowerCase()}function V(e,t){return e.sort().join(",")===t.sort().join(",")}function $(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.push("alt"),e.ctrlKey&&t.push("ctrl"),e.metaKey&&t.push("meta"),t}function B(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=!1}function H(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=!0}function O(e){return e=="shift"||e=="ctrl"||e=="alt"||e=="meta"}function J(){if(!S){S={};for(var e in h)e>95&&e<112||h.hasOwnProperty(e)&&(S[h[e]]=e)}return S}function U(e,t,a){return a||(a=J()[e]?"keydown":"keypress"),a=="keypress"&&t.length&&(a="keydown"),a}function X(e){return e==="+"?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split("+"))}function I(e,t){var a,c,b,P=[];for(a=X(e),b=0;b1){z(r,m,o,l);return}f=I(r,l),t._callbacks[f.key]=t._callbacks[f.key]||[],j(f.key,f.modifiers,{type:f.action},i,r,u),t._callbacks[f.key][i?"unshift":"push"]({callback:o,modifiers:f.modifiers,action:f.action,seq:i,level:u,combo:r})}t._bindMultiple=function(r,o,l){for(var i=0;i-1||D(t,a.target))return!1;if("composedPath"in e&&typeof e.composedPath=="function"){var c=e.composedPath()[0];c!==e.target&&(t=c)}return t.tagName=="INPUT"||t.tagName=="SELECT"||t.tagName=="TEXTAREA"||t.isContentEditable},v.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},v.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(h[t]=e[t]);S=null},v.init=function(){var e=v(d);for(var t in e)t.charAt(0)!=="_"&&(v[t]=function(a){return function(){return e[a].apply(e,arguments)}}(t))},v.init(),p.Mousetrap=v,typeof n<"u"&&n.exports&&(n.exports=v),typeof define=="function"&&define.amd&&define(function(){return v})})(typeof window<"u"?window:null,typeof window<"u"?document:null)}),R=se(fe());(function(s){if(s){var n={},p=s.prototype.stopCallback;s.prototype.stopCallback=function(d,M,h,g){var y=this;return y.paused?!0:n[h]||n[g]?!1:p.call(y,d,M,h)},s.prototype.bindGlobal=function(d,M,h){var g=this;if(g.bind(d,M,h),d instanceof Array){for(var y=0;y{s.directive("mousetrap",(n,{modifiers:p,expression:d},{evaluate:M})=>{let h=()=>d?M(d):n.click();p=p.map(g=>g.replace(/--/g," ").replace(/-/g,"+").replace(/\bslash\b/g,"/")),p.includes("global")&&(p=p.filter(g=>g!=="global"),R.default.bindGlobal(p,g=>{g.preventDefault(),h()})),R.default.bind(p,g=>{g.preventDefault(),h()})})},F=le;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(F),window.Alpine.store("sidebar",{isOpen:window.Alpine.$persist(!0).as("isOpen"),collapsedGroups:window.Alpine.$persist(null).as("collapsedGroups"),groupIsCollapsed:function(n){return this.collapsedGroups.includes(n)},collapseGroup:function(n){this.collapsedGroups.includes(n)||(this.collapsedGroups=this.collapsedGroups.concat(n))},toggleCollapsedGroup:function(n){this.collapsedGroups=this.collapsedGroups.includes(n)?this.collapsedGroups.filter(p=>p!==n):this.collapsedGroups.concat(n)},close:function(){this.isOpen=!1},open:function(){this.isOpen=!0}});let s=localStorage.getItem("theme")??getComputedStyle(document.documentElement).getPropertyValue("--default-theme-mode");window.Alpine.store("theme",s==="dark"||s==="system"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.addEventListener("theme-changed",n=>{let p=n.detail;localStorage.setItem("theme",p),p==="system"&&(p=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.Alpine.store("theme",p)}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",n=>{localStorage.getItem("theme")==="system"&&window.Alpine.store("theme",n.matches?"dark":"light")}),window.Alpine.effect(()=>{window.Alpine.store("theme")==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")})});})(); +(()=>{var Z=Object.create,q=Object.defineProperty,ee=Object.getPrototypeOf,te=Object.prototype.hasOwnProperty,re=Object.getOwnPropertyNames,ne=Object.getOwnPropertyDescriptor,ae=s=>q(s,"__esModule",{value:!0}),ie=(s,r)=>()=>(r||(r={exports:{}},s(r.exports,r)),r.exports),oe=(s,r,p)=>{if(r&&typeof r=="object"||typeof r=="function")for(let d of re(r))!te.call(s,d)&&d!=="default"&&q(s,d,{get:()=>r[d],enumerable:!(p=ne(r,d))||p.enumerable});return s},se=s=>oe(ae(q(s!=null?Z(ee(s)):{},"default",s&&s.__esModule&&"default"in s?{get:()=>s.default,enumerable:!0}:{value:s,enumerable:!0})),s),le=ie((s,r)=>{(function(p,d,M){if(!p)return;for(var h={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"ins",46:"del",91:"meta",93:"meta",224:"meta"},g={106:"*",107:"+",109:"-",110:".",111:"/",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'"},y={"~":"`","!":"1","@":"2","#":"3",$:"4","%":"5","^":"6","&":"7","*":"8","(":"9",")":"0",_:"-","+":"=",":":";",'"':"'","<":",",">":".","?":"/","|":"\\"},x={option:"alt",command:"meta",return:"enter",escape:"esc",plus:"+",mod:/Mac|iPod|iPhone|iPad/.test(navigator.platform)?"meta":"ctrl"},S,w=1;w<20;++w)h[111+w]="f"+w;for(w=0;w<=9;++w)h[w+96]=w.toString();function C(e,t,a){if(e.addEventListener){e.addEventListener(t,a,!1);return}e.attachEvent("on"+t,a)}function G(e){if(e.type=="keypress"){var t=String.fromCharCode(e.which);return e.shiftKey||(t=t.toLowerCase()),t}return h[e.which]?h[e.which]:g[e.which]?g[e.which]:String.fromCharCode(e.which).toLowerCase()}function V(e,t){return e.sort().join(",")===t.sort().join(",")}function $(e){var t=[];return e.shiftKey&&t.push("shift"),e.altKey&&t.push("alt"),e.ctrlKey&&t.push("ctrl"),e.metaKey&&t.push("meta"),t}function B(e){if(e.preventDefault){e.preventDefault();return}e.returnValue=!1}function W(e){if(e.stopPropagation){e.stopPropagation();return}e.cancelBubble=!0}function O(e){return e=="shift"||e=="ctrl"||e=="alt"||e=="meta"}function H(){if(!S){S={};for(var e in h)e>95&&e<112||h.hasOwnProperty(e)&&(S[h[e]]=e)}return S}function J(e,t,a){return a||(a=H()[e]?"keydown":"keypress"),a=="keypress"&&t.length&&(a="keydown"),a}function U(e){return e==="+"?["+"]:(e=e.replace(/\+{2}/g,"+plus"),e.split("+"))}function I(e,t){var a,c,b,P=[];for(a=U(e),b=0;b1){Y(n,m,o,f);return}l=I(n,f),t._callbacks[l.key]=t._callbacks[l.key]||[],j(l.key,l.modifiers,{type:l.action},i,n,u),t._callbacks[l.key][i?"unshift":"push"]({callback:o,modifiers:l.modifiers,action:l.action,seq:i,level:u,combo:n})}t._bindMultiple=function(n,o,f){for(var i=0;i-1||D(t,a.target))return!1;if("composedPath"in e&&typeof e.composedPath=="function"){var c=e.composedPath()[0];c!==e.target&&(t=c)}return t.tagName=="INPUT"||t.tagName=="SELECT"||t.tagName=="TEXTAREA"||t.isContentEditable},v.prototype.handleKey=function(){var e=this;return e._handleKey.apply(e,arguments)},v.addKeycodes=function(e){for(var t in e)e.hasOwnProperty(t)&&(h[t]=e[t]);S=null},v.init=function(){var e=v(d);for(var t in e)t.charAt(0)!=="_"&&(v[t]=function(a){return function(){return e[a].apply(e,arguments)}}(t))},v.init(),p.Mousetrap=v,typeof r<"u"&&r.exports&&(r.exports=v),typeof define=="function"&&define.amd&&define(function(){return v})})(typeof window<"u"?window:null,typeof window<"u"?document:null)}),N=se(le());(function(s){if(s){var r={},p=s.prototype.stopCallback;s.prototype.stopCallback=function(d,M,h,g){var y=this;return y.paused?!0:r[h]||r[g]?!1:p.call(y,d,M,h)},s.prototype.bindGlobal=function(d,M,h){var g=this;if(g.bind(d,M,h),d instanceof Array){for(var y=0;y{s.directive("mousetrap",(r,{modifiers:p,expression:d},{evaluate:M})=>{let h=()=>d?M(d):r.click();p=p.map(g=>g.replace(/--/g," ").replace(/-/g,"+").replace(/\bslash\b/g,"/")),p.includes("global")&&(p=p.filter(g=>g!=="global"),N.default.bindGlobal(p,g=>{g.preventDefault(),h()})),N.default.bind(p,g=>{g.preventDefault(),h()})})},R=fe;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(R),window.Alpine.store("sidebar",{isOpen:window.Alpine.$persist(!0).as("isOpen"),collapsedGroups:window.Alpine.$persist(null).as("collapsedGroups"),scrollTop:0,init:function(){document.addEventListener("livewire:navigate",()=>{let r=document.querySelector(".fi-main-sidebar .fi-sidebar-nav");r&&(this.scrollTop=r.scrollTop)}),document.addEventListener("livewire:navigated",()=>{requestAnimationFrame(()=>{let r=document.querySelector(".fi-main-sidebar .fi-sidebar-nav");r&&this.scrollTop&&(r.scrollTop=this.scrollTop)})})},groupIsCollapsed:function(r){return this.collapsedGroups.includes(r)},collapseGroup:function(r){this.collapsedGroups.includes(r)||(this.collapsedGroups=this.collapsedGroups.concat(r))},toggleCollapsedGroup:function(r){this.collapsedGroups=this.collapsedGroups.includes(r)?this.collapsedGroups.filter(p=>p!==r):this.collapsedGroups.concat(r)},close:function(){this.isOpen=!1},open:function(){this.isOpen=!0}});let s=localStorage.getItem("theme")??getComputedStyle(document.documentElement).getPropertyValue("--default-theme-mode");window.Alpine.store("theme",s==="dark"||s==="system"&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.addEventListener("theme-changed",r=>{let p=r.detail;localStorage.setItem("theme",p),p==="system"&&(p=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),window.Alpine.store("theme",p)}),window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",r=>{localStorage.getItem("theme")==="system"&&window.Alpine.store("theme",r.matches?"dark":"light")}),window.Alpine.effect(()=>{window.Alpine.store("theme")==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")})});})(); diff --git a/tests/Feature/Console/Commands/RunLagoonCommandOnAppInstancesTest.php b/tests/Feature/Console/Commands/RunLagoonCommandOnAppInstancesTest.php index 35b9b4ae..53a7c9a0 100644 --- a/tests/Feature/Console/Commands/RunLagoonCommandOnAppInstancesTest.php +++ b/tests/Feature/Console/Commands/RunLagoonCommandOnAppInstancesTest.php @@ -22,13 +22,16 @@ class RunLagoonCommandOnAppInstancesTest extends TestCase protected function tearDown(): void { - if ($this->lagoonKeyDir !== null && is_dir($this->lagoonKeyDir)) { - $this->deleteDirectory($this->lagoonKeyDir); - $this->lagoonKeyDir = null; - } + try { + parent::tearDown(); + } finally { + if ($this->lagoonKeyDir !== null && is_dir($this->lagoonKeyDir)) { + $this->deleteDirectory($this->lagoonKeyDir); + $this->lagoonKeyDir = null; + } - \Mockery::close(); - parent::tearDown(); + \Mockery::close(); + } } /** diff --git a/tests/Feature/Console/Commands/TriggerLagoonDeployOnAppInstancesTest.php b/tests/Feature/Console/Commands/TriggerLagoonDeployOnAppInstancesTest.php index 53cc61c9..86fc96c0 100644 --- a/tests/Feature/Console/Commands/TriggerLagoonDeployOnAppInstancesTest.php +++ b/tests/Feature/Console/Commands/TriggerLagoonDeployOnAppInstancesTest.php @@ -22,13 +22,16 @@ class TriggerLagoonDeployOnAppInstancesTest extends TestCase protected function tearDown(): void { - if ($this->lagoonKeyDir !== null && is_dir($this->lagoonKeyDir)) { - $this->deleteDirectory($this->lagoonKeyDir); - $this->lagoonKeyDir = null; - } + try { + parent::tearDown(); + } finally { + if ($this->lagoonKeyDir !== null && is_dir($this->lagoonKeyDir)) { + $this->deleteDirectory($this->lagoonKeyDir); + $this->lagoonKeyDir = null; + } - \Mockery::close(); - parent::tearDown(); + \Mockery::close(); + } } /** @@ -83,14 +86,13 @@ public function test_it_runs_serially_by_default(): void $mock = \Mockery::mock(Client::class); $mock->shouldReceive('setLagoonToken')->with('fake-token')->once(); $mock->shouldReceive('initGraphqlClient')->once(); - $mock->shouldReceive('deployProjectEnvironmentByName') - ->with('project-1', 'main', []) + $mock->shouldReceive('bulkDeployEnvironments') + ->with([ + ['project' => 'project-1', 'name' => 'main'], + ['project' => 'project-2', 'name' => 'develop'], + ], \Mockery::type('string'), []) ->once() - ->andReturn(['data' => 'success']); - $mock->shouldReceive('deployProjectEnvironmentByName') - ->with('project-2', 'develop', []) - ->once() - ->andReturn(['data' => 'success']); + ->andReturn(['bulkDeployEnvironmentLatest' => 'bulk-id-123']); $this->app->instance(Client::class, $mock); $store = PolydockStore::factory()->create([ @@ -135,12 +137,28 @@ public function test_it_runs_serially_by_default(): void '--force' => true, ]) ->expectsOutput('Found 2 running instances.') - ->expectsOutput('Authenticating with Lagoon (Serial Mode)...') + ->expectsOutput('Authenticating with Lagoon...') + ->expectsOutput('Triggering bulk deployment for 2 instances...') + ->expectsOutput('Bulk deployment triggered successfully! Bulk ID: bulk-id-123') ->assertExitCode(0); } public function test_it_runs_concurrently(): void { + $this->setupLagoonKey(); + + $mock = \Mockery::mock(Client::class); + $mock->shouldReceive('setLagoonToken')->with('fake-token')->once(); + $mock->shouldReceive('initGraphqlClient')->once(); + $mock->shouldReceive('bulkDeployEnvironments') + ->with([ + ['project' => 'project-1', 'name' => 'main'], + ['project' => 'project-2', 'name' => 'main'], + ], \Mockery::type('string'), []) + ->once() + ->andReturn(['bulkDeployEnvironmentLatest' => 'bulk-id-456']); + $this->app->instance(Client::class, $mock); + $store = PolydockStore::factory()->create([ 'lagoon_deploy_project_prefix' => 'test-prefix', ]); @@ -182,26 +200,10 @@ public function test_it_runs_concurrently(): void '--force' => true, '--concurrency' => 2, ]) - ->expectsOutput('Running deployments concurrently on 2 instances (concurrency: 2)...') + ->expectsOutput('Authenticating with Lagoon...') + ->expectsOutput('Triggering bulk deployment for 2 instances...') + ->expectsOutput('Bulk deployment triggered successfully! Bulk ID: bulk-id-456') ->assertExitCode(0); - - Process::assertRan(function ($process) use ($instance1) { - $cmd = $process->command; - $hasId = is_array($cmd) - ? in_array("--instance-id={$instance1->id}", $cmd) - : str_contains($cmd, "--instance-id={$instance1->id}"); - - return $hasId; - }); - - Process::assertRan(function ($process) use ($instance2) { - $cmd = $process->command; - $hasId = is_array($cmd) - ? in_array("--instance-id={$instance2->id}", $cmd) - : str_contains($cmd, "--instance-id={$instance2->id}"); - - return $hasId; - }); } public function test_it_deploys_variables_only(): void @@ -211,10 +213,12 @@ public function test_it_deploys_variables_only(): void $mock = \Mockery::mock(Client::class); $mock->shouldReceive('setLagoonToken')->with('fake-token')->once(); $mock->shouldReceive('initGraphqlClient')->once(); - $mock->shouldReceive('deployProjectEnvironmentByName') - ->with('project-1', 'main', ['LAGOON_VARIABLES_ONLY' => 'true']) + $mock->shouldReceive('bulkDeployEnvironments') + ->with([ + ['project' => 'project-1', 'name' => 'main'], + ], \Mockery::type('string'), ['LAGOON_VARIABLES_ONLY' => 'true']) ->once() - ->andReturn(['data' => 'success']); + ->andReturn(['bulkDeployEnvironmentLatest' => 'bulk-id-789']); $this->app->instance(Client::class, $mock); $store = PolydockStore::factory()->create(); @@ -251,7 +255,7 @@ public function test_it_skips_instances_missing_metadata(): void $mock = \Mockery::mock(Client::class); $mock->shouldReceive('setLagoonToken')->with('fake-token')->once(); $mock->shouldReceive('initGraphqlClient')->once(); - $mock->shouldNotReceive('deployProjectEnvironmentByName'); + $mock->shouldNotReceive('bulkDeployEnvironments'); $this->app->instance(Client::class, $mock); $store = PolydockStore::factory()->create(); @@ -274,7 +278,8 @@ public function test_it_skips_instances_missing_metadata(): void 'app_uuid' => $storeApp->uuid, '--force' => true, ]) - ->assertExitCode(0); + ->expectsOutput('No valid environments found to deploy.') + ->assertExitCode(1); } public function test_it_returns_error_when_store_app_not_found(): void