Skip to content

Commit 2bae4de

Browse files
committed
491: fix error when latest release is a draft by filtering out draft releases
1 parent a8bf21c commit 2bae4de

File tree

2 files changed

+61
-1
lines changed

2 files changed

+61
-1
lines changed

src/SelfManage/Update/FetchPieReleaseFromGitHub.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Webmozart\Assert\Assert;
1212

1313
use function array_filter;
14+
use function array_key_exists;
1415
use function array_map;
1516
use function count;
1617
use function file_put_contents;
@@ -85,7 +86,10 @@ static function (array $asset): bool {
8586
$firstAssetNamedPiePhar['browser_download_url'],
8687
);
8788
},
88-
$decodedResponse,
89+
array_filter(
90+
$decodedResponse,
91+
static fn (array $releaseResponse): bool => (! array_key_exists('draft', $releaseResponse) || ! $releaseResponse['draft']),
92+
),
8993
),
9094
static function (ReleaseMetadata|null $releaseMetadata) use ($updateChannel): bool {
9195
if ($releaseMetadata === null) {

test/unit/SelfManage/Update/FetchPieReleaseFromGitHubTest.php

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,60 @@ public function testDownloadContent(): void
207207
self::assertSame($pharContent, file_get_contents($file->filePath));
208208
self::assertSame($expectedDigest, $file->checksum);
209209
}
210+
211+
public function testDraftReleasesAreNotReturnedForStableChannel(): void
212+
{
213+
$httpDownloader = $this->createMock(HttpDownloader::class);
214+
215+
$url = self::TEST_GITHUB_URL . '/repos/php/pie/releases';
216+
$httpDownloader->expects(self::once())
217+
->method('get')
218+
->with(
219+
$url,
220+
[
221+
'retry-auth-failure' => true,
222+
'http' => [
223+
'method' => 'GET',
224+
'header' => [],
225+
],
226+
],
227+
)
228+
->willReturn(
229+
new Response(
230+
['url' => $url],
231+
200,
232+
[],
233+
(string) json_encode([
234+
235+
[
236+
'draft' => true,
237+
'tag_name' => '1.2.4',
238+
'assets' => [
239+
[
240+
'name' => 'pie.phar',
241+
'browser_download_url' => self::TEST_GITHUB_URL . '/path/to/pie.phar',
242+
],
243+
],
244+
],
245+
[
246+
'draft' => false,
247+
'tag_name' => '1.2.3',
248+
'assets' => [
249+
[
250+
'name' => 'pie.phar',
251+
'browser_download_url' => self::TEST_GITHUB_URL . '/path/to/pie.phar',
252+
],
253+
],
254+
],
255+
]),
256+
),
257+
);
258+
259+
$fetch = new FetchPieReleaseFromGitHub(self::TEST_GITHUB_URL, $httpDownloader);
260+
261+
$latestRelease = $fetch->latestReleaseMetadata(Channel::Stable);
262+
263+
self::assertSame('1.2.3', $latestRelease->tag);
264+
self::assertSame(self::TEST_GITHUB_URL . '/path/to/pie.phar', $latestRelease->downloadUrl);
265+
}
210266
}

0 commit comments

Comments
 (0)