Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
],
"require": {
"php": "8.1.*||8.2.*||8.3.*||8.4.*||8.5.*",
"composer/composer": "^2.9.2",
"composer/composer": "^2.9.5",
"composer/pcre": "^3.3.2",
"composer/semver": "^3.4.4",
"fidry/cpu-core-counter": "^1.3.0",
Expand Down
16 changes: 8 additions & 8 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion features/download-extensions.feature
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Feature: Extensions can be downloaded with PIE
Examples:
| constraint | version |
| 2.0.5 | 2.0.5 |
| ^2.0 | 2.0.5 |
| ^2.0 | 2.0.8 |

# pie download <ext>:dev-main
@non-windows
Expand Down
14 changes: 1 addition & 13 deletions phpstan-baseline.neon
Original file line number Diff line number Diff line change
Expand Up @@ -420,26 +420,14 @@ parameters:
count: 1
path: test/unit/ComposerIntegration/VendorCleanupTest.php

-
message: '#^Parameter \#1 \$phpExt of method Composer\\Package\\Package\:\:setPhpExt\(\) expects array\{extension\-name\?\: string, priority\?\: int, support\-zts\?\: bool, support\-nts\?\: bool, build\-path\?\: string\|null, download\-url\-method\?\: string, os\-families\?\: non\-empty\-list\<non\-empty\-string\>, os\-families\-exclude\?\: non\-empty\-list\<non\-empty\-string\>, \.\.\.\}\|null, array\{download\-url\-method\: array\{''composer\-default''\}\} given\.$#'
identifier: argument.type
count: 1
path: test/unit/DependencyResolver/PackageTest.php

-
message: '#^Parameter \#1 \$phpExt of method Composer\\Package\\Package\:\:setPhpExt\(\) expects array\{extension\-name\?\: string, priority\?\: int, support\-zts\?\: bool, support\-nts\?\: bool, build\-path\?\: string\|null, download\-url\-method\?\: string, os\-families\?\: non\-empty\-list\<non\-empty\-string\>, os\-families\-exclude\?\: non\-empty\-list\<non\-empty\-string\>, \.\.\.\}\|null, array\{download\-url\-method\: array\{''pre\-packaged\-source'', ''composer\-default''\}\} given\.$#'
identifier: argument.type
count: 1
path: test/unit/DependencyResolver/PackageTest.php

-
message: '#^Parameter \#2 \$extractedSourcePath of static method Php\\Pie\\Downloading\\DownloadedPackage\:\:fromPackageAndExtractedPath\(\) expects string, string\|false given\.$#'
identifier: argument.type
count: 3
path: test/unit/Downloading/DownloadedPackageTest.php

-
message: '#^Parameter \#1 \$phpExt of method Composer\\Package\\Package\:\:setPhpExt\(\) expects array\{extension\-name\?\: string, priority\?\: int, support\-zts\?\: bool, support\-nts\?\: bool, build\-path\?\: string\|null, download\-url\-method\?\: string, os\-families\?\: non\-empty\-list\<non\-empty\-string\>, os\-families\-exclude\?\: non\-empty\-list\<non\-empty\-string\>, \.\.\.\}\|null, array\{extension\-name\: null\} given\.$#'
message: '#^Parameter \#1 \$phpExt of method Composer\\Package\\Package\:\:setPhpExt\(\) expects array\{extension\-name\?\: string, priority\?\: int, support\-zts\?\: bool, support\-nts\?\: bool, build\-path\?\: string\|null, download\-url\-method\?\: list\<string\>\|string, os\-families\?\: non\-empty\-list\<non\-empty\-string\>, os\-families\-exclude\?\: non\-empty\-list\<non\-empty\-string\>, \.\.\.\}\|null, array\{extension\-name\: null\} given\.$#'
identifier: argument.type
count: 1
path: test/unit/ExtensionNameTest.php
Expand Down
8 changes: 4 additions & 4 deletions src/DependencyResolver/Package.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,11 +94,11 @@ public static function fromComposerCompletePackage(CompletePackageInterface $com
/** @var string|list<string> $method */
$method = $phpExtOptions['download-url-method'];
if (is_array($method)) {
if (count($method) !== 1) {
throw new InvalidArgumentException('This extension requires a newer version of PIE. Multiple download-url-methods are not supported until PIE 1.4.0.');
if (count($method) === 1) {
$method = $method[0];
} else {
$method = DownloadUrlMethod::ComposerDefaultDownload->value;
}

$method = $method[0];
}

$package->downloadUrlMethod = DownloadUrlMethod::tryFrom($method);
Expand Down
6 changes: 5 additions & 1 deletion src/SelfManage/Update/FetchPieReleaseFromGitHub.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Webmozart\Assert\Assert;

use function array_filter;
use function array_key_exists;
use function array_map;
use function count;
use function file_put_contents;
Expand Down Expand Up @@ -85,7 +86,10 @@ static function (array $asset): bool {
$firstAssetNamedPiePhar['browser_download_url'],
);
},
$decodedResponse,
array_filter(
$decodedResponse,
static fn (array $releaseResponse): bool => (! array_key_exists('draft', $releaseResponse) || ! $releaseResponse['draft']),
),
),
static function (ReleaseMetadata|null $releaseMetadata) use ($updateChannel): bool {
if ($releaseMetadata === null) {
Expand Down
2 changes: 1 addition & 1 deletion test/integration/Command/DownloadCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
#[CoversClass(DownloadCommand::class)]
class DownloadCommandTest extends TestCase
{
private const TEST_PACKAGE_LATEST = '2.0.5';
private const TEST_PACKAGE_LATEST = '2.0.8';
private const TEST_PACKAGE = 'asgrim/example-pie-extension';

private CommandTester $commandTester;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#[CoversClass(ResolveDependencyWithComposer::class)]
final class ResolveDependencyWithComposerTest extends TestCase
{
private const TEST_PACKAGE_LATEST = '2.0.5';
private const TEST_PACKAGE_LATEST = '2.0.8';
private const DOWNLOAD_URL_ANY = 'https://api.github.com/repos/asgrim/example-pie-extension/zipball/%s';
private const DOWNLOAD_URL_1_0_1_ALPHA_3 = 'https://api.github.com/repos/asgrim/example-pie-extension/zipball/115f8f8e01ee098a18ec2f47af4852be51ebece7';
private const DOWNLOAD_URL_1_0_1 = 'https://api.github.com/repos/asgrim/example-pie-extension/zipball/769f906413d6d1e12152f6d34134cbcd347ca253';
Expand Down
6 changes: 3 additions & 3 deletions test/unit/DependencyResolver/PackageTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,8 @@ public function testDownloadUrlMethodWithMultiItemListIsNotYetSupported(): void
$composerCompletePackage = new CompletePackage('vendor/foo', '1.2.3.0', '1.2.3');
$composerCompletePackage->setPhpExt(['download-url-method' => ['pre-packaged-source', 'composer-default']]);

$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('This extension requires a newer version of PIE. Multiple download-url-methods are not supported until PIE 1.4.0.');
Package::fromComposerCompletePackage($composerCompletePackage);
$package = Package::fromComposerCompletePackage($composerCompletePackage);

self::assertSame(DownloadUrlMethod::ComposerDefaultDownload, $package->downloadUrlMethod());
}
}
56 changes: 56 additions & 0 deletions test/unit/SelfManage/Update/FetchPieReleaseFromGitHubTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,4 +207,60 @@ public function testDownloadContent(): void
self::assertSame($pharContent, file_get_contents($file->filePath));
self::assertSame($expectedDigest, $file->checksum);
}

public function testDraftReleasesAreNotReturnedForStableChannel(): void
{
$httpDownloader = $this->createMock(HttpDownloader::class);

$url = self::TEST_GITHUB_URL . '/repos/php/pie/releases';
$httpDownloader->expects(self::once())
->method('get')
->with(
$url,
[
'retry-auth-failure' => true,
'http' => [
'method' => 'GET',
'header' => [],
],
],
)
->willReturn(
new Response(
['url' => $url],
200,
[],
(string) json_encode([

[
'draft' => true,
'tag_name' => '1.2.4',
'assets' => [
[
'name' => 'pie.phar',
'browser_download_url' => self::TEST_GITHUB_URL . '/path/to/pie.phar',
],
],
],
[
'draft' => false,
'tag_name' => '1.2.3',
'assets' => [
[
'name' => 'pie.phar',
'browser_download_url' => self::TEST_GITHUB_URL . '/path/to/pie.phar',
],
],
],
]),
),
);

$fetch = new FetchPieReleaseFromGitHub(self::TEST_GITHUB_URL, $httpDownloader);

$latestRelease = $fetch->latestReleaseMetadata(Channel::Stable);

self::assertSame('1.2.3', $latestRelease->tag);
self::assertSame(self::TEST_GITHUB_URL . '/path/to/pie.phar', $latestRelease->downloadUrl);
}
}