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(); 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); +});