From 2df957a267182dec838d3b025f5c62f63c4e8e2c Mon Sep 17 00:00:00 2001 From: A G Date: Mon, 17 Mar 2025 23:25:36 -0400 Subject: [PATCH 1/2] Preserve file permissions in BuildCommand::class --- src/Traits/CopiesToBuildDirectory.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Traits/CopiesToBuildDirectory.php b/src/Traits/CopiesToBuildDirectory.php index f962793..b01228f 100644 --- a/src/Traits/CopiesToBuildDirectory.php +++ b/src/Traits/CopiesToBuildDirectory.php @@ -106,6 +106,14 @@ public function copyToBuildDirectory() } catch (Throwable $e) { warning('[WARNING] '.$e->getMessage()); } + + $perms = fileperms($item->getPathname()); + + if ($perms === false) { + continue; + } + + chmod($target, $perms); } $this->keepRequiredDirectories(); From 9cd3cf2643e33d95da0fc95c20fb8b821f14c107 Mon Sep 17 00:00:00 2001 From: A G Date: Mon, 17 Mar 2025 23:48:58 -0400 Subject: [PATCH 2/2] Test preserving file permissions --- tests/Unit/CopyToBuildDirectoryTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/Unit/CopyToBuildDirectoryTest.php b/tests/Unit/CopyToBuildDirectoryTest.php index c7d1789..c33e021 100644 --- a/tests/Unit/CopyToBuildDirectoryTest.php +++ b/tests/Unit/CopyToBuildDirectoryTest.php @@ -206,3 +206,15 @@ protected function buildPath(string $path = ''): string expect($required)->each->toBeFile(); }); + +it('preserves file permissions', function () use ($sourcePath, $buildPath, $command) { + createFiles("$sourcePath/file-under-test.txt"); + + chmod("$sourcePath/file-under-test.txt", octdec('0775')); + + $originalPermissions = fileperms("$sourcePath/file-under-test.txt"); + + $command->copyToBuildDirectory(); + + expect(fileperms("$buildPath/file-under-test.txt"))->toBe($originalPermissions); +});