diff --git a/README.md b/README.md index 60bf091..bd0717a 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ With the `bunny deploy` command, you can easily synchronize your `dist` folder w - CDN diffing files... ✔ CDN requesting 10875 files - Synchronizing 10875 files - 10875/10875 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100% + 10875/10875 [============================] 100% ✔ Finished synchronizing 10875 files - Waiting for deploy to go live... ✔ Deployment is live! (322.96s) diff --git a/app/Bunny/Client.php b/app/Bunny/Client.php index d5fce27..6959d8d 100644 --- a/app/Bunny/Client.php +++ b/app/Bunny/Client.php @@ -9,6 +9,7 @@ class Client public function __construct() { $this->client = new \GuzzleHttp\Client([ + 'http_errors' => false, 'base_uri' => 'https://api.bunny.net/', ]); } diff --git a/app/Bunny/Filesystem/EdgeStorageCache.php b/app/Bunny/Filesystem/EdgeStorageCache.php index 6623730..2620c6f 100644 --- a/app/Bunny/Filesystem/EdgeStorageCache.php +++ b/app/Bunny/Filesystem/EdgeStorageCache.php @@ -20,6 +20,7 @@ class EdgeStorageCache /** * @throws FilesystemException + * @throws LockException */ public function parse(string $path): array { @@ -28,8 +29,6 @@ class EdgeStorageCache File::EMPTY_SHA256, )); - file_put_contents(base_path(sprintf('%s.bk', basename($this->filename))), $contents); - return $this->extract($contents); } @@ -39,8 +38,6 @@ class EdgeStorageCache $contents = $this->hydrate($files, $local, $edge); $checksum = strtoupper(hash('sha256', $contents)); - file_put_contents(base_path(sprintf('%s', basename($this->filename))), $contents); - $promise = $this->edgeStorage->put(new LocalFile($filename, $checksum, $contents)); /** @var ResponseInterface $response */ diff --git a/app/Bunny/Filesystem/FileCompare.php b/app/Bunny/Filesystem/FileCompare.php index f650be9..9bffe8b 100644 --- a/app/Bunny/Filesystem/FileCompare.php +++ b/app/Bunny/Filesystem/FileCompare.php @@ -125,7 +125,7 @@ class FileCompare $this->command->info('- Waiting for deploy to go live...'); - if (!$options[CompareOptions::DRY_RUN]) { + if (!$options[CompareOptions::DRY_RUN] && $pullZoneId) { $flushResult = $this->apiClient->purgeCache($pullZoneId); } diff --git a/app/Commands/InitCommand.php b/app/Commands/InitCommand.php index 3609919..5421556 100644 --- a/app/Commands/InitCommand.php +++ b/app/Commands/InitCommand.php @@ -46,38 +46,65 @@ class InitCommand extends Command $env = []; } - $env['BUNNY_API_ACCESS_KEY'] = $this->ask( - 'What is your api key?', - $this->option('api-key') ?? $env['BUNNY_API_ACCESS_KEY'] ?? null - ); + $this->newLine(); - config()->set('bunny.api.access_key', $env['BUNNY_API_ACCESS_KEY']); + $this->info('In order for the Bunny CLI to work properly you need to store your Bunny CDN API token.'); + $this->info('You can find your API Token in your Account Settings (https://panel.bunny.net/account).'); - $storageZones = new Collection($client->getStorageZones()->getData()); + do { + $env['BUNNY_API_ACCESS_KEY'] = $this->ask( + 'What is your API Token?', + $this->option('api-key') ?? $env['BUNNY_API_ACCESS_KEY'] ?? null + ); + + config()->set('bunny.api.access_key', $env['BUNNY_API_ACCESS_KEY']); + + $result = $client->getStorageZones(); + + if (!$result->success()) { + $this->warn('Your API Token is invalid. Please try again.'); + } + + $storageZones = new Collection($result->getData()); + } while (!$result->success() || $storageZones->isEmpty()); if (!$this->option('no-interaction')) { + $this->info('Please select your default storage zone below. This is used for the deploy command.'); + + $this->newLine(); + $storageZones->each(fn($item) => $this->info(sprintf(' - %s', $item->Name))); } - $storageZoneName = $this->anticipate( - 'Which storage zone do you want to use?', - function ($input) use ($storageZones) { - return $storageZones->filter(function ($item) use ($input) { - // replace stristr with your choice of matching function - return false !== stristr($item->Name, $input); - })->pluck('Name')->toArray(); - }, - $this->option('storage-zone') - ); + do { + $storageZoneName = $this->anticipate( + 'Which storage zone do you want to use?', + function ($input) use ($storageZones) { + return $storageZones->filter(function ($item) use ($input) { + // replace stristr with your choice of matching function + return false !== stristr($item->Name, $input); + })->pluck('Name')->toArray(); + }, + $this->option('storage-zone') ?? $env['BUNNY_STORAGE_USERNAME'] ?? null + ); - $storageZone = $storageZones->where('Name', '===', $storageZoneName)->first(); + $storageZone = $storageZones->where('Name', '===', $storageZoneName)->first(); - $env['BUNNY_STORAGE_USERNAME'] = $storageZone->Name; - $env['BUNNY_STORAGE_PASSWORD'] = $storageZone->Password; + if (!$storageZone) { + $this->warn(sprintf('Cannot find storage zone by `%s`. Please check your spelling.', $storageZoneName)); + } else { + $env['BUNNY_STORAGE_USERNAME'] = $storageZone->Name; + $env['BUNNY_STORAGE_PASSWORD'] = $storageZone->Password; + } + } while ($storageZone === null); $pullZones = new Collection($storageZone->PullZones); if (!$this->option('no-interaction')) { + $this->info('Now select your pull zone whose cache you want to flush when the deploy is complete.'); + + $this->newLine(); + $pullZones->each(fn($item) => $this->info(sprintf(' - %s', $item->Name))); } @@ -104,7 +131,15 @@ class InitCommand extends Command Storage::put('.env', EnvSetCommand::updateEnv($env)); - $this->info('The environment file was successfully updated.'); + $this->info('The environment file was successfully updated!'); + + $this->info('You can view these environment variables at any other time using the bunny env:list command.'); + + $this->info('If you need help, please check out our documentation: https://github.com/own3d/bunny-cli'); + + $this->newLine(); + + $this->info('Thanks for using Bunny CLI!'); return 0; }