Skip to content

Commit 5f3f999

Browse files
committed
run go mod frankenphp automatically when running craft
1 parent 2bc9fef commit 5f3f999

File tree

6 files changed

+28
-6
lines changed

6 files changed

+28
-6
lines changed

config/env.ini

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ SPC_LIBC=musl
6969
CC=${SPC_LINUX_DEFAULT_CC}
7070
CXX=${SPC_LINUX_DEFAULT_CXX}
7171
AR=${SPC_LINUX_DEFAULT_AR}
72-
LD=ld.gold
72+
LD=${SPC_LINUX_DEFAULT_LD}
7373
; default compiler flags, used in CMake toolchain file, openssl and pkg-config build
7474
SPC_DEFAULT_C_FLAGS="-fPIC -Os"
7575
SPC_DEFAULT_CXX_FLAGS="-fPIC -Os"

src/SPC/builder/linux/LinuxBuilder.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ public function __construct(array $options = [])
3333
if (getenv('SPC_LIBC') === 'musl' && !SystemUtil::isMuslDist()) {
3434
$this->setOptionIfNotExist('library_path', "LIBRARY_PATH=\"/usr/local/musl/{$arch}-linux-musl/lib\"");
3535
$this->setOptionIfNotExist('ld_library_path', "LD_LIBRARY_PATH=\"/usr/local/musl/{$arch}-linux-musl/lib\"");
36-
GlobalEnvManager::putenv("PATH=/usr/local/musl/bin:/usr/local/musl/{$arch}-linux-musl/bin:" . getenv('PATH'));
3736
$configure = getenv('SPC_CMD_PREFIX_PHP_CONFIGURE');
3837
$configure = "LD_LIBRARY_PATH=\"/usr/local/musl/{$arch}-linux-musl/lib\" " . $configure;
3938
GlobalEnvManager::putenv("SPC_CMD_PREFIX_PHP_CONFIGURE={$configure}");

src/SPC/builder/unix/UnixBuilderBase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ protected function buildFrankenphp(): void
324324
$xcaddyModules = str_replace('--with github.com/dunglas/caddy-cbrotli', '', $xcaddyModules);
325325
}
326326
$lrt = PHP_OS_FAMILY === 'Linux' ? '-lrt' : '';
327-
$releaseInfo = json_decode(Downloader::curlExec('https://api.github.com/repos/php/frankenphp/releases/latest'), true);
327+
$releaseInfo = json_decode(Downloader::curlExec('https://api.github.com/repos/php/frankenphp/releases/latest', retries: 3), true);
328328
$frankenPhpVersion = $releaseInfo['tag_name'];
329329
$libphpVersion = $this->getPHPVersion();
330330
if (getenv('SPC_CMD_VAR_PHP_EMBED_TYPE') === 'shared') {

src/SPC/command/CraftCommand.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,15 @@ public function handle(): int
6666
return static::FAILURE;
6767
}
6868
}
69+
// install go and xcaddy for frankenphp
70+
if (in_array('frankenphp', $craft['sapi'])) {
71+
$retcode = $this->runCommand('install-pkg', 'go-mod-frankenphp');
72+
if ($retcode !== 0) {
73+
$this->output->writeln('<error>craft go-mod-frankenphp failed</error>');
74+
$this->log("craft go-mod-frankenphp failed with code: {$retcode}", true);
75+
return static::FAILURE;
76+
}
77+
}
6978
// craft download
7079
if ($craft['craft-options']['download']) {
7180
$sharedAppend = $shared_extensions ? ',' . $shared_extensions : '';

src/SPC/store/pkg/GoModFrankenphp.php

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use SPC\store\Downloader;
88
use SPC\store\FileSystem;
99
use SPC\store\LockFile;
10+
use SPC\util\GlobalEnvManager;
1011

1112
class GoModFrankenphp extends CustomPackage
1213
{
@@ -22,6 +23,12 @@ public function getSupportName(): array
2223

2324
public function fetch(string $name, bool $force = false, ?array $config = null): void
2425
{
26+
$pkgroot = PKG_ROOT_PATH;
27+
$go_exec = "{$pkgroot}/{$name}/bin/go";
28+
$xcaddy_exec = "{$pkgroot}/{$name}/bin/xcaddy";
29+
if (file_exists($go_exec) && file_exists($xcaddy_exec)) {
30+
return;
31+
}
2532
$arch = match (explode('-', $name)[3]) {
2633
'x86_64' => 'amd64',
2734
'aarch64' => 'arm64',
@@ -43,16 +50,20 @@ public function fetch(string $name, bool $force = false, ?array $config = null):
4350
public function extract(string $name): void
4451
{
4552
$pkgroot = PKG_ROOT_PATH;
53+
$go_exec = "{$pkgroot}/{$name}/bin/go";
54+
$xcaddy_exec = "{$pkgroot}/{$name}/bin/xcaddy";
55+
if (file_exists($go_exec) && file_exists($xcaddy_exec)) {
56+
return;
57+
}
4658
$lock = json_decode(FileSystem::readFile(LockFile::LOCK_FILE), true);
4759
$source_type = $lock[$name]['source_type'];
4860
$filename = DOWNLOAD_PATH . '/' . ($lock[$name]['filename'] ?? $lock[$name]['dirname']);
4961
$extract = $lock[$name]['move_path'] === null ? "{$pkgroot}/{$name}" : $lock[$name]['move_path'];
5062

5163
FileSystem::extractPackage($name, $source_type, $filename, $extract);
5264

65+
GlobalEnvManager::init();
5366
// install xcaddy
54-
$go_exec = "{$pkgroot}/{$name}/bin/go";
55-
// $xcaddy_exec = PKG_ROOT_PATH . "$pkgroot/$name/bin/xcaddy";
5667
shell()
5768
->appendEnv([
5869
'PATH' => "{$pkgroot}/{$name}/bin:" . getenv('PATH'),

src/SPC/util/GlobalEnvManager.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,19 @@ public static function init(?BuilderBase $builder = null): void
4343
}
4444

4545
// Define env vars for linux
46-
if (PHP_OS_FAMILY === 'Linux') {
46+
if (PHP_OS_FAMILY === 'Linux' && getenv('SPC_LIBC') === 'musl') {
4747
$arch = getenv('GNU_ARCH');
4848
if (SystemUtil::isMuslDist()) {
4949
self::putenv('SPC_LINUX_DEFAULT_CC=gcc');
5050
self::putenv('SPC_LINUX_DEFAULT_CXX=g++');
5151
self::putenv('SPC_LINUX_DEFAULT_AR=ar');
52+
self::putenv('SPC_LINUX_DEFAULT_LD=ld.gold');
5253
} else {
5354
self::putenv("SPC_LINUX_DEFAULT_CC={$arch}-linux-musl-gcc");
5455
self::putenv("SPC_LINUX_DEFAULT_CXX={$arch}-linux-musl-g++");
5556
self::putenv("SPC_LINUX_DEFAULT_AR={$arch}-linux-musl-ar");
57+
self::putenv("SPC_LINUX_DEFAULT_LD={$arch}-linux-musl-ld");
58+
GlobalEnvManager::putenv("PATH=/usr/local/musl/bin:/usr/local/musl/{$arch}-linux-musl/bin:" . getenv('PATH'));
5659
}
5760
}
5861

0 commit comments

Comments
 (0)