Author: Shivam Mathur (shivammathur)
Date: 2026-07-26T18:21:37+05:30
Commit:
https://github.com/php/web-downloads/commit/3860e14e5096e36d857d884e4a7b8ba3f7a72f97
Raw diff:
https://github.com/php/web-downloads/commit/3860e14e5096e36d857d884e4a7b8ba3f7a72f97.diff
Merge PHP SBOM sidecar support
Changed paths:
M src/Console/Command/PhpCommand.php
M tests/Console/Command/PhpCommandTest.php
Diff:
diff --git a/src/Console/Command/PhpCommand.php
b/src/Console/Command/PhpCommand.php
index f2a7415..8d1c975 100644
--- a/src/Console/Command/PhpCommand.php
+++ b/src/Console/Command/PhpCommand.php
@@ -166,9 +166,16 @@ private function copyBuildsToArchive(string $directory,
string $version): void
foreach ($files as $file) {
$fileVersion = $this->getFileVersion($file);
if ($fileVersion) {
- copy($directory . '/' . basename($file), $directory .
'/archives/' . basename($file));
+ copy($file, $directory . '/archives/' . basename($file));
+ $sidecars = glob($file . '.*.json') ?: [];
+ foreach ($sidecars as $sidecar) {
+ copy($sidecar, $directory . '/archives/' .
basename($sidecar));
+ }
if (version_compare($fileVersion, $version) < 0) {
unlink($file);
+ foreach ($sidecars as $sidecar) {
+ unlink($sidecar);
+ }
}
}
}
diff --git a/tests/Console/Command/PhpCommandTest.php
b/tests/Console/Command/PhpCommandTest.php
index 62a0e9e..1beb4f9 100644
--- a/tests/Console/Command/PhpCommandTest.php
+++ b/tests/Console/Command/PhpCommandTest.php
@@ -48,6 +48,9 @@ public static function buildsProvider(): array
return [
[[
'php-8.4.1-Win32-vs17-x64.zip',
+ 'php-8.4.1-Win32-vs17-x64.zip.cdx.json',
+ 'php-8.4.1-Win32-vs17-x64.zip.spdx.json',
+ 'php-8.4.1-Win32-vs17-x64.zip.openvex.json',
'php-8.4.1-Win32-vs17-x86.zip',
'php-8.4.1-nts-Win32-vs17-x64.zip',
'php-8.4.1-nts-Win32-vs17-x86.zip',
@@ -63,6 +66,8 @@ public static function buildsProvider(): array
'php-test-pack-8.4.1.zip',
]],[[
'php-8.4.0-dev-Win32-vs17-x64.zip',
+ 'php-8.4.0-dev-Win32-vs17-x64.zip.cdx.json',
+ 'php-8.4.0-dev-Win32-vs17-x64.zip.spdx.json',
'php-8.4.0-dev-Win32-vs17-x86.zip',
'php-8.4.0-dev-nts-Win32-vs17-x64.zip',
'php-8.4.0-dev-nts-Win32-vs17-x86.zip',
@@ -86,10 +91,14 @@ private function stageBuilds(array $phpZips, $zipPath): void
if ($zip->open($zipPath, ZipArchive::CREATE) === TRUE) {
foreach ($phpZips as $zipFileName) {
$zipFilePath = $this->buildsDirectory . '/php/' . $zipFileName;
- $innerZip = new ZipArchive();
- if ($innerZip->open($zipFilePath, ZipArchive::CREATE) ===
TRUE) {
- $innerZip->addFromString("test_file.php", "<?php echo
'Hello, world!'; ?>");
- $innerZip->close();
+ if (str_ends_with($zipFileName, '.json')) {
+ file_put_contents($zipFilePath, '{}');
+ } else {
+ $innerZip = new ZipArchive();
+ if ($innerZip->open($zipFilePath, ZipArchive::CREATE) ===
TRUE) {
+ $innerZip->addFromString("test_file.php", "<?php echo
'Hello, world!'; ?>");
+ $innerZip->close();
+ }
}
$zip->addFile($zipFilePath, $zipFileName);
}
@@ -112,8 +121,15 @@ public function
testCommandHandlesSuccessfulExecution(array $phpZips): void
$this->assertEquals(0, $result, "Command should return success.");
- $expectedDestination = $this->baseDirectory . '/releases';
+ $expectedDestination = $this->baseDirectory .
(str_contains($phpZips[0], '-dev-') ? '/qa' : '/releases');
$this->assertDirectoryExists($expectedDestination, "Destination
directory should exist.");
+ foreach (array_filter($phpZips, static fn (string $file): bool =>
str_ends_with($file, '.json')) as $sidecar) {
+ $this->assertFileExists($expectedDestination . '/' . $sidecar);
+ $this->assertFileExists($expectedDestination . '/archives/' .
$sidecar);
+ }
+ $this->assertStringNotContainsString('.json',
file_get_contents($expectedDestination . '/sha256sum.txt'));
+ $this->assertStringNotContainsString('.json',
file_get_contents($expectedDestination . '/sha1sum.txt'));
+ $this->assertStringNotContainsString('.json',
file_get_contents($expectedDestination . '/releases.json'));
}
public function testCommandHandlerWithMissingTestPackZip(): void