mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-10 10:25:36 +08:00
Enhance package management in CraftCommand by merging craft-level packages and shared extensions into build options
This commit is contained in:
@@ -4,8 +4,10 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace StaticPHP\Command;
|
namespace StaticPHP\Command;
|
||||||
|
|
||||||
|
use StaticPHP\DI\ApplicationContext;
|
||||||
use StaticPHP\Doctor\Doctor;
|
use StaticPHP\Doctor\Doctor;
|
||||||
use StaticPHP\Exception\ValidationException;
|
use StaticPHP\Exception\ValidationException;
|
||||||
|
use StaticPHP\Package\PackageBuilder;
|
||||||
use StaticPHP\Package\PackageInstaller;
|
use StaticPHP\Package\PackageInstaller;
|
||||||
use StaticPHP\Util\FileSystem;
|
use StaticPHP\Util\FileSystem;
|
||||||
use Symfony\Component\Console\Attribute\AsCommand;
|
use Symfony\Component\Console\Attribute\AsCommand;
|
||||||
@@ -63,6 +65,18 @@ class CraftCommand extends BaseCommand
|
|||||||
$build_options["build-{$name}"] = true;
|
$build_options["build-{$name}"] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// merge craft-level packages into with-packages option
|
||||||
|
if ($craft['packages'] !== []) {
|
||||||
|
$existing = parse_comma_list($build_options['with-packages'] ?? '');
|
||||||
|
$build_options['with-packages'] = implode(',', array_unique(array_merge($existing, $craft['packages'])));
|
||||||
|
}
|
||||||
|
|
||||||
|
// merge shared-extensions into build-shared option
|
||||||
|
if ($craft['shared-extensions'] !== []) {
|
||||||
|
$existing = parse_extension_list($build_options['build-shared'] ?? '');
|
||||||
|
$build_options['build-shared'] = implode(',', array_unique(array_merge($existing, $craft['shared-extensions'])));
|
||||||
|
}
|
||||||
|
|
||||||
// clean build
|
// clean build
|
||||||
if ($craft['clean-build']) {
|
if ($craft['clean-build']) {
|
||||||
FileSystem::resetDir(BUILD_ROOT_PATH);
|
FileSystem::resetDir(BUILD_ROOT_PATH);
|
||||||
@@ -72,6 +86,7 @@ class CraftCommand extends BaseCommand
|
|||||||
$starttime = microtime(true);
|
$starttime = microtime(true);
|
||||||
// run installer
|
// run installer
|
||||||
$installer = new PackageInstaller($build_options);
|
$installer = new PackageInstaller($build_options);
|
||||||
|
ApplicationContext::get(PackageBuilder::class)->setArgument('extensions', implode(',', $craft['extensions']));
|
||||||
$installer->addBuildPackage('php');
|
$installer->addBuildPackage('php');
|
||||||
$installer->run(true);
|
$installer->run(true);
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ class PackageBuilder
|
|||||||
/** @var int make jobs count */
|
/** @var int make jobs count */
|
||||||
public readonly int $concurrency;
|
public readonly int $concurrency;
|
||||||
|
|
||||||
|
/** @var array<string, mixed> Build arguments */
|
||||||
|
protected array $arguments = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param array $options Builder options
|
* @param array $options Builder options
|
||||||
*/
|
*/
|
||||||
@@ -101,6 +104,16 @@ class PackageBuilder
|
|||||||
return $this->options[$key] ?? $default;
|
return $this->options[$key] ?? $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function setArgument(string $key, mixed $value): void
|
||||||
|
{
|
||||||
|
$this->arguments[$key] = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getArgument(string $key, mixed $default = null): mixed
|
||||||
|
{
|
||||||
|
return $this->arguments[$key] ?? $default;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deploy the binary file from src to dst.
|
* Deploy the binary file from src to dst.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -106,6 +106,14 @@ class TargetPackage extends LibraryPackage
|
|||||||
if ($input !== null && $input->hasArgument($key)) {
|
if ($input !== null && $input->hasArgument($key)) {
|
||||||
return $input->getArgument($key);
|
return $input->getArgument($key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fallback to builder arguments (set programmatically, e.g. from CraftCommand)
|
||||||
|
$builder = ApplicationContext::has(PackageBuilder::class)
|
||||||
|
? ApplicationContext::get(PackageBuilder::class)
|
||||||
|
: null;
|
||||||
|
if ($builder !== null && ($arg = $builder->getArgument($key)) !== null) {
|
||||||
|
return $arg;
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user