From c1c34d8c10442e4732dbc0548d1ca3a9b551ed11 Mon Sep 17 00:00:00 2001 From: henderkes Date: Tue, 12 May 2026 10:38:33 +0700 Subject: [PATCH] trust filesystem, not downloads --- src/StaticPHP/Command/CraftCommand.php | 3 ++ src/StaticPHP/Doctor/Item/GoXcaddyCheck.php | 43 +++++++++++++++++++++ src/StaticPHP/Doctor/Item/ZigCheck.php | 2 +- src/StaticPHP/Package/PackageInstaller.php | 2 +- 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/StaticPHP/Doctor/Item/GoXcaddyCheck.php diff --git a/src/StaticPHP/Command/CraftCommand.php b/src/StaticPHP/Command/CraftCommand.php index 23320725..e187ad73 100644 --- a/src/StaticPHP/Command/CraftCommand.php +++ b/src/StaticPHP/Command/CraftCommand.php @@ -44,6 +44,9 @@ class CraftCommand extends BaseCommand // apply env array_walk($craft['extra-env'], fn ($v, $k) => f_putenv("{$k}={$v}")); + // stash craft for doctor checks that depend on what's being built (e.g. frankenphp → go-xcaddy) + ApplicationContext::set('craft', $craft); + // run doctor if ($craft['craft-options']['doctor']) { $doctor = new Doctor($this->output, FIX_POLICY_AUTOFIX); diff --git a/src/StaticPHP/Doctor/Item/GoXcaddyCheck.php b/src/StaticPHP/Doctor/Item/GoXcaddyCheck.php new file mode 100644 index 00000000..f887c670 --- /dev/null +++ b/src/StaticPHP/Doctor/Item/GoXcaddyCheck.php @@ -0,0 +1,43 @@ +addInstallPackage('go-xcaddy')->isPackageInstalled('go-xcaddy')) { + return CheckResult::fail('go-xcaddy is not installed', 'install-go-xcaddy'); + } + return CheckResult::ok(PKG_ROOT_PATH . '/go-xcaddy/bin/xcaddy'); + } + + #[FixItem('install-go-xcaddy')] + public function installGoXcaddy(): bool + { + $installer = new PackageInstaller(interactive: false); + $installer->addInstallPackage('go-xcaddy'); + $installer->run(true); + return $installer->isPackageInstalled('go-xcaddy'); + } +} diff --git a/src/StaticPHP/Doctor/Item/ZigCheck.php b/src/StaticPHP/Doctor/Item/ZigCheck.php index baa6d4cb..ec140fd7 100644 --- a/src/StaticPHP/Doctor/Item/ZigCheck.php +++ b/src/StaticPHP/Doctor/Item/ZigCheck.php @@ -26,7 +26,7 @@ class ZigCheck public function checkZig(): CheckResult { if (new PackageInstaller()->addInstallPackage('zig')->isPackageInstalled('zig')) { - return CheckResult::ok(); + return CheckResult::ok(PKG_ROOT_PATH . '/zig/zig'); } return CheckResult::fail('zig is not installed', 'install-zig'); } diff --git a/src/StaticPHP/Package/PackageInstaller.php b/src/StaticPHP/Package/PackageInstaller.php index 05208819..1962bd5c 100644 --- a/src/StaticPHP/Package/PackageInstaller.php +++ b/src/StaticPHP/Package/PackageInstaller.php @@ -344,7 +344,7 @@ class PackageInstaller if ($this->isBuildPackage($package)) { return $package->isInstalled(); } - if ($package->getArtifact() !== null && $package->getArtifact()->shouldUseBinary()) { + if ($package->getArtifact() !== null && $package->getArtifact()->hasPlatformBinary()) { $artifact = $package->getArtifact(); return $artifact->isBinaryExtracted(); }