mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-05 07:20:58 +08:00
143 lines
4.4 KiB
PHP
143 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Nexus\Install\Update;
|
|
|
|
class NexusUpdate extends Command
|
|
{
|
|
/**
|
|
* The name and signature of the console command.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $signature = 'nexus:update {--tag=} {--keep_tmp}';
|
|
|
|
/**
|
|
* The console command description.
|
|
*
|
|
* @var string
|
|
*/
|
|
protected $description = 'Update nexusphp after code updated, remember run `composer update` first. Options: --tag=, --keep_tmp';
|
|
|
|
private $update;
|
|
|
|
/**
|
|
* Create a new command instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->update = new Update();
|
|
}
|
|
|
|
/**
|
|
* Execute the console command.
|
|
*
|
|
* @return int
|
|
*/
|
|
public function handle()
|
|
{
|
|
define('WITH_LARAVEL', true);
|
|
require ROOT_PATH . 'nexus/Database/helpers.php';
|
|
$tag = $this->option('tag');
|
|
$keepTmp = $this->option('keep_tmp');
|
|
if ($tag !== null) {
|
|
if ($tag === 'dev') {
|
|
$url = "https://github.com/xiaomlove/nexusphp/archive/refs/heads/php8.zip";
|
|
} else {
|
|
$url = "https://api.github.com/repos/xiaomlove/nexusphp/tarball/v$tag";
|
|
}
|
|
$this->doLog("Specific tag: '$tag', download from '$url' and extra code...");
|
|
$tmpPath = $this->update->downAndExtractCode($url);
|
|
}
|
|
//Step 1
|
|
$step = $this->update->currentStep();
|
|
$log = sprintf('Step %s, %s...', $step, $this->update->getStepName($step));
|
|
$this->doLog($log);
|
|
$requirements = $this->update->listRequirementTableRows();
|
|
$fails = $requirements['fails'];
|
|
if (!empty($fails)) {
|
|
foreach ($fails as $value) {
|
|
$this->doLog("Error: " . nexus_json_encode($value), 'error');
|
|
}
|
|
return 0;
|
|
}
|
|
$this->update->gotoStep(++$step);
|
|
|
|
//Step 2
|
|
$log = sprintf('Step %s, %s, cli skip...', $step, $this->update->getStepName($step));
|
|
$this->doLog($log);
|
|
$this->update->gotoStep(++$step);
|
|
|
|
//Step 3
|
|
$log = sprintf('Step %s, %s, cli skip...', $step, $this->update->getStepName($step));
|
|
$this->doLog($log);
|
|
$this->update->gotoStep(++$step);
|
|
|
|
//Step 4
|
|
$log = sprintf('Step %s, %s...', $step, $this->update->getStepName($step));
|
|
$this->doLog($log);
|
|
$settingTableRows = $this->update->listSettingTableRows();
|
|
$settings = $settingTableRows['settings'];
|
|
$symbolicLinks = $settingTableRows['symbolic_links'];
|
|
$fails = $settingTableRows['fails'];
|
|
$mysqlInfo = $this->update->getMysqlVersionInfo();
|
|
|
|
if (!empty($fails)) {
|
|
foreach ($fails as $value) {
|
|
$this->doLog("Error: " . nexus_json_encode($value), 'error');
|
|
}
|
|
return 0;
|
|
}
|
|
if (!$mysqlInfo['match']) {
|
|
$this->doLog("Error: MySQL version: {$mysqlInfo['version']} is too low, please use the newest version of 5.7 or above.", 'error');
|
|
return 0;
|
|
}
|
|
$this->doLog("going to createSymbolicLinks...");
|
|
$this->update->createSymbolicLinks($symbolicLinks);
|
|
$this->doLog("createSymbolicLinks done!");
|
|
|
|
$this->doLog("going to saveSettings...");
|
|
$this->update->saveSettings($settings);
|
|
$this->doLog("saveSettings done!");
|
|
|
|
$this->doLog("going to runExtraQueries...");
|
|
$this->update->runExtraQueries();
|
|
$this->doLog("runExtraQueries done!");
|
|
|
|
$this->doLog("going to runMigrate...");
|
|
$this->update->runMigrate();
|
|
$this->doLog("runMigrate done!");
|
|
|
|
$this->doLog("going to runExtraMigrate...");
|
|
$this->update->runExtraMigrate();
|
|
$this->doLog("runExtraMigrate done!");
|
|
|
|
$this->doLog("All done!");
|
|
|
|
if (isset($tmpPath)) {
|
|
if (!$keepTmp) {
|
|
$this->doLog("Delete tmp files in: $tmpPath");
|
|
$this->update->executeCommand("rm -rf " . rtrim($tmpPath, '/'));
|
|
} else {
|
|
$this->doLog("Keep tmp files in: $tmpPath");
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
private function doLog($log, string $level = 'info')
|
|
{
|
|
$this->update->doLog($log);
|
|
$this->{$level}(sprintf(
|
|
'[%s] [%s] %s',
|
|
date('Y-m-d H:i:s'), $this->update->currentStep(), $log
|
|
));
|
|
}
|
|
}
|