Skip to content

Commit 1981924

Browse files
committed
feat: use batch to upload assets
1 parent 349844a commit 1981924

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

src/Deployment/ProcessAssetsStep.php

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
namespace Ymir\Cli\Deployment;
1515

1616
use Illuminate\Support\Collection;
17+
use Illuminate\Support\LazyCollection;
1718
use Symfony\Component\Console\Helper\ProgressBar;
1819
use Symfony\Component\Finder\Finder;
1920
use Ymir\Cli\ApiClient;
@@ -79,19 +80,19 @@ public function perform(Collection $deployment, OutputInterface $output)
7980
return isset($signedAssetRequests['copy'][$asset['relative_path']]);
8081
})->map(function (array $asset) use ($signedAssetRequests) {
8182
return $signedAssetRequests['copy'][$asset['relative_path']];
82-
})->all(), $output);
83+
}), $output);
8384

8485
$this->uploadAssetFiles($assetFiles->filter(function (array $asset) use ($signedAssetRequests) {
8586
return isset($signedAssetRequests['store'][$asset['relative_path']]);
8687
})->mapWithKeys(function (array $asset) use ($signedAssetRequests) {
8788
return [$asset['real_path'] => $signedAssetRequests['store'][$asset['relative_path']]];
88-
})->all(), $output);
89+
}), $output);
8990
}
9091

9192
/**
9293
* Send the given asset file copy requests.
9394
*/
94-
private function copyAssetFiles(array $requests, OutputInterface $output)
95+
private function copyAssetFiles(Collection $requests, OutputInterface $output)
9596
{
9697
if (empty($requests)) {
9798
return;
@@ -129,20 +130,22 @@ private function getAssetFiles(): Collection
129130
/**
130131
* Send the given asset file upload requests.
131132
*/
132-
private function uploadAssetFiles(array $requests, OutputInterface $output)
133+
private function uploadAssetFiles(Collection $requests, OutputInterface $output)
133134
{
134135
if (empty($requests)) {
135136
return;
136137
}
137138

138139
$progressBar = new ProgressBar($output);
139140
$progressBar->setFormat(' > Uploading new asset files (<comment>%current%/%max%</comment>)');
140-
$progressBar->start(count($requests));
141141

142-
foreach ($requests as $realFilePath => $request) {
143-
$this->uploader->uploadFile((string) $realFilePath, (string) $request['uri'], $request['headers']);
144-
$progressBar->advance();
145-
}
142+
$requests = LazyCollection::make($requests)->map(function (array $request, string $realFilePath) {
143+
$request['body'] = fopen($realFilePath, 'r+');
144+
145+
return $request;
146+
});
147+
148+
$this->uploader->batch('PUT', $requests, $progressBar);
146149

147150
$output->newLine();
148151
}

src/FileUploader.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use GuzzleHttp\ClientInterface;
1717
use GuzzleHttp\Pool;
1818
use GuzzleHttp\Psr7\Request;
19+
use Illuminate\Support\Enumerable;
1920
use Symfony\Component\Console\Exception\RuntimeException;
2021
use Symfony\Component\Console\Helper\ProgressBar;
2122

@@ -46,7 +47,7 @@ public function __construct(ClientInterface $client)
4647
/**
4748
* Sends multiple requests concurrently.
4849
*/
49-
public function batch(string $method, array $requests, ?ProgressBar $progressBar = null)
50+
public function batch(string $method, Enumerable $requests, ?ProgressBar $progressBar = null)
5051
{
5152
if ($progressBar instanceof ProgressBar) {
5253
$progressBar->start(count($requests));
@@ -58,7 +59,7 @@ public function batch(string $method, array $requests, ?ProgressBar $progressBar
5859
$progressBar->advance();
5960
}
6061

61-
yield new Request($method, $request['uri'], array_merge(self::DEFAULT_HEADERS, $request['headers']));
62+
yield new Request($method, $request['uri'], array_merge(self::DEFAULT_HEADERS, $request['headers']), $request['body'] ?? null);
6263
}
6364
};
6465

0 commit comments

Comments
 (0)