diff --git a/src/StaticPHP/Artifact/Artifact.php b/src/StaticPHP/Artifact/Artifact.php index e241d4fe..224bcff3 100644 --- a/src/StaticPHP/Artifact/Artifact.php +++ b/src/StaticPHP/Artifact/Artifact.php @@ -327,7 +327,7 @@ class Artifact public function getSourceRoot(): string { if (isset($this->config['metadata']['source-root'])) { - return $this->getSourceDir() . '/' . ltrim($this->config['metadata']['source-root'], '/'); + return FileSystem::convertPath($this->getSourceDir() . '/' . ltrim($this->config['metadata']['source-root'], '/')); } return $this->getSourceDir(); } diff --git a/src/StaticPHP/Artifact/ArtifactCache.php b/src/StaticPHP/Artifact/ArtifactCache.php index 5a2c8bac..2b0c8b54 100644 --- a/src/StaticPHP/Artifact/ArtifactCache.php +++ b/src/StaticPHP/Artifact/ArtifactCache.php @@ -223,8 +223,8 @@ class ArtifactCache public function getCacheFullPath(array $cache_info): string { return match ($cache_info['cache_type']) { - 'archive', 'file' => DOWNLOAD_PATH . '/' . $cache_info['filename'], - 'git' => DOWNLOAD_PATH . '/' . $cache_info['dirname'], + 'archive', 'file' => FileSystem::convertPath(DOWNLOAD_PATH . '/' . $cache_info['filename']), + 'git' => FileSystem::convertPath(DOWNLOAD_PATH . '/' . $cache_info['dirname']), 'local' => $cache_info['dirname'], // local dirname is absolute path default => throw new SPCInternalException("Unknown cache type: {$cache_info['cache_type']}"), }; diff --git a/tests/StaticPHP/Artifact/ArtifactTest.php b/tests/StaticPHP/Artifact/ArtifactTest.php index e1cb8ccd..0effb109 100644 --- a/tests/StaticPHP/Artifact/ArtifactTest.php +++ b/tests/StaticPHP/Artifact/ArtifactTest.php @@ -254,11 +254,16 @@ class ArtifactTest extends TestCase ApplicationContext::initialize(); ApplicationContext::set(ArtifactCache::class, $cache); + // Use a platform-appropriate absolute path: a Unix-style /tmp/... isn't + // absolute on Windows (no drive letter), so the test would otherwise + // fall through into the SOURCE_PATH-prefixed branch on Windows. + $extract = DIRECTORY_SEPARATOR === '\\' ? 'C:\tmp\my-pkg-extract' : '/tmp/my-pkg-extract'; + $artifact = new Artifact('my-pkg', [ - 'source' => ['type' => 'url', 'url' => 'https://example.com/file.tar.gz', 'extract' => '/tmp/my-pkg-extract'], + 'source' => ['type' => 'url', 'url' => 'https://example.com/file.tar.gz', 'extract' => $extract], ]); - $expected = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, '/tmp/my-pkg-extract'); + $expected = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $extract); $this->assertSame($expected, $artifact->getSourceDir()); } @@ -703,11 +708,7 @@ class ArtifactTest extends TestCase 'Windows' => 'windows', default => 'linux', }; - $arch = php_uname('m'); - if ($arch === 'arm64') { - $arch = 'aarch64'; - } - return "{$os}-{$arch}"; + return "{$os}-" . arch2gnu(php_uname('m')); } private function injectArtifactConfig(string $name, array $config): void